diff options
Diffstat (limited to 'lazy-static/compiletest')
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"); +} |