aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
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");
+}