aboutsummaryrefslogtreecommitdiff
path: root/lazy-static/compiletest
diff options
context:
space:
mode:
Diffstat (limited to 'lazy-static/compiletest')
-rw-r--r--lazy-static/compiletest/Cargo.toml11
-rw-r--r--lazy-static/compiletest/src/lib.rs11
-rw-r--r--lazy-static/compiletest/tests/compile-fail/README.md22
-rw-r--r--lazy-static/compiletest/tests/compile-fail/incorrect_visibility_restriction.rs10
-rw-r--r--lazy-static/compiletest/tests/compile-fail/static_is_private.rs14
-rw-r--r--lazy-static/compiletest/tests/compile-fail/static_is_sized.rs11
-rw-r--r--lazy-static/compiletest/tests/compile_tests.rs19
7 files changed, 98 insertions, 0 deletions
diff --git a/lazy-static/compiletest/Cargo.toml b/lazy-static/compiletest/Cargo.toml
new file mode 100644
index 0000000..e25d5a7
--- /dev/null
+++ b/lazy-static/compiletest/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "lazy_static_compiletest"
+version = "0.0.1"
+publish = false
+authors = ["lazy_static contributors"]
+
+[dependencies.lazy_static]
+path = "../"
+
+[dependencies.compiletest_rs]
+version = "0.3"
diff --git a/lazy-static/compiletest/src/lib.rs b/lazy-static/compiletest/src/lib.rs
new file mode 100644
index 0000000..0452765
--- /dev/null
+++ b/lazy-static/compiletest/src/lib.rs
@@ -0,0 +1,11 @@
+/*
+This library is a shim around `lazy_static` that disambiguates it with the `lazy_static`
+that's shipped with the Rust toolchain. We re-export the entire public API of `lazy_static`
+under a different crate name so that can be imported in the compile tests.
+
+This currently appears to use the right local build of `lazy_static`.
+*/
+
+extern crate lazy_static;
+
+pub use self::lazy_static::*;
diff --git a/lazy-static/compiletest/tests/compile-fail/README.md b/lazy-static/compiletest/tests/compile-fail/README.md
new file mode 100644
index 0000000..58dbc3b
--- /dev/null
+++ b/lazy-static/compiletest/tests/compile-fail/README.md
@@ -0,0 +1,22 @@
+This directory contains snippets of code that should yield a
+warning/note/help/error at compilation. Syntax of annotations is described in
+[rust documentation](https://github.com/rust-lang/rust/blob/master/src/test/COMPILER_TESTS.md).
+For more information check out [`compiletest` crate](https://github.com/laumann/compiletest-rs).
+
+To run compile tests issue `cargo +nightly --test`.
+
+## Notes on working with `compiletest` crate
+
+* Currently code that is inside macro should not be annotated, as `compiletest`
+ crate cannot deal with the fact that macro invocations effectively changes
+ line numbering. To prevent this add a `// error-pattern:<your error message here>`
+ on the top of the file and make sure that you set `deny` lint level
+ if you want to test compiler message different than error.
+* `compiletest` crate by default sets `allow(dead_code)` lint level so make sure
+ that you change it to something suiting your needs even if the warning is
+ issued prior to any macro invocation.
+* If you get a message `error: 0 unexpected errors found, 1 expected errors not found`
+ despite the fact that some error was bound to occur don't worry - it's a known
+ issue in the `compiletest` crate and your error was probably not registered -
+ make sure that your annotations are correct and that you are setting correct
+ lint levels.
diff --git a/lazy-static/compiletest/tests/compile-fail/incorrect_visibility_restriction.rs b/lazy-static/compiletest/tests/compile-fail/incorrect_visibility_restriction.rs
new file mode 100644
index 0000000..360e23d
--- /dev/null
+++ b/lazy-static/compiletest/tests/compile-fail/incorrect_visibility_restriction.rs
@@ -0,0 +1,10 @@
+// incorrect visibility restriction
+#[macro_use]
+extern crate lazy_static_compiletest as lazy_static;
+
+lazy_static! {
+ pub(nonsense) static ref WRONG: () = ();
+ //~^ ERROR incorrect visibility restriction
+}
+
+fn main() { }
diff --git a/lazy-static/compiletest/tests/compile-fail/static_is_private.rs b/lazy-static/compiletest/tests/compile-fail/static_is_private.rs
new file mode 100644
index 0000000..6ebc8f5
--- /dev/null
+++ b/lazy-static/compiletest/tests/compile-fail/static_is_private.rs
@@ -0,0 +1,14 @@
+#[macro_use]
+extern crate lazy_static_compiletest as lazy_static;
+
+mod outer {
+ pub mod inner {
+ lazy_static! {
+ pub(in outer) static ref FOO: () = ();
+ }
+ }
+}
+
+fn main() {
+ assert_eq!(*outer::inner::FOO, ()); //~ ERROR static `FOO` is private
+}
diff --git a/lazy-static/compiletest/tests/compile-fail/static_is_sized.rs b/lazy-static/compiletest/tests/compile-fail/static_is_sized.rs
new file mode 100644
index 0000000..ac1cad4
--- /dev/null
+++ b/lazy-static/compiletest/tests/compile-fail/static_is_sized.rs
@@ -0,0 +1,11 @@
+// error-pattern:the size for values of type `str` cannot be known at compilation time
+#[macro_use]
+extern crate lazy_static_compiletest as lazy_static;
+
+lazy_static! {
+ pub static ref FOO: str = panic!();
+}
+
+
+fn main() {
+}
diff --git a/lazy-static/compiletest/tests/compile_tests.rs b/lazy-static/compiletest/tests/compile_tests.rs
new file mode 100644
index 0000000..d908077
--- /dev/null
+++ b/lazy-static/compiletest/tests/compile_tests.rs
@@ -0,0 +1,19 @@
+extern crate compiletest_rs as compiletest;
+
+fn run_mode(mode: &'static str) {
+ let mut config = compiletest::Config::default();
+ config.mode = mode.parse().expect("Invalid mode");
+ config.src_base = ["tests", mode].iter().collect();
+
+ config.verbose = true;
+
+ config.target_rustcflags = Some("-L target/debug/ -L target/debug/deps/".to_owned());
+ config.clean_rmeta();
+
+ compiletest::run_tests(&config);
+}
+
+#[test]
+fn compile_test() {
+ run_mode("compile-fail");
+}