aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorBrian Cully <bjc@kublai.com>2019-04-28 13:41:39 -0400
committerBrian Cully <bjc@kublai.com>2019-05-10 11:42:02 -0400
commitf12811a0a5e15b596a0cc06c095832a6b795172b (patch)
treeec3dbfffad3556d81c5b04d07a6ac711cef15589 /tests
downloadclint-0.1.0.tar.gz
clint-0.1.0.zip
Working handler code.v0.1.0
Diffstat (limited to 'tests')
-rw-r--r--tests/compile-fail/mutable.rs51
-rw-r--r--tests/tests.rs17
2 files changed, 68 insertions, 0 deletions
diff --git a/tests/compile-fail/mutable.rs b/tests/compile-fail/mutable.rs
new file mode 100644
index 0000000..e888503
--- /dev/null
+++ b/tests/compile-fail/mutable.rs
@@ -0,0 +1,51 @@
+extern crate clint;
+
+use clint::Handler;
+
+static mut HANDLER: Handler = Handler::new();
+
+fn main() {
+ need_move();
+ borrow_error();
+ no_borrow_needed();
+}
+
+fn need_move() {
+ let x = vec![1, 2, 3];
+ let c = || {
+ //~^ ERROR closure may outlive
+ println!("x(h-c): {:?}", x);
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x);
+}
+
+fn borrow_error() {
+ let x = vec![1, 2, 3];
+ let c = move || {
+ println!("x(h-c): {:?}", x);
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x); //~ ERROR borrow of moved value
+}
+
+fn no_borrow_needed() {
+ let x = vec![1, 2, 3];
+ let c = || {
+ println!("x(h-c): hi!");
+ };
+ unsafe {
+ HANDLER.replace(&c);
+ HANDLER.call();
+ HANDLER.call();
+ }
+ println!("x(h-o): {:?}", x);
+}
diff --git a/tests/tests.rs b/tests/tests.rs
new file mode 100644
index 0000000..c295c5a
--- /dev/null
+++ b/tests/tests.rs
@@ -0,0 +1,17 @@
+use std::path::PathBuf;
+
+fn run_mode(mode: &'static str) {
+ let mut config = compiletest_rs::Config::default();
+
+ config.mode = mode.parse().expect("invalid mode");
+ config.src_base = PathBuf::from(format!("tests/{}", mode));
+ config.target_rustcflags = Some("-L target/debug".to_string());
+ config.clean_rmeta();
+
+ compiletest_rs::run_tests(&config);
+}
+
+#[test]
+fn compile_test() {
+ run_mode("compile-fail");
+}