]> git.lizzy.rs Git - rust.git/blob - tests/compile-test.rs
Merge pull request #2216 from LaurentMazare/master
[rust.git] / tests / compile-test.rs
1 #![feature(test)]
2
3 extern crate compiletest_rs as compiletest;
4 extern crate test;
5
6 use std::path::{PathBuf, Path};
7 use std::env::{set_var, var};
8
9 fn clippy_driver_path() -> PathBuf {
10     if let Some(path) = option_env!("CLIPPY_DRIVER_PATH") {
11         PathBuf::from(path)
12     } else {
13         PathBuf::from(concat!("target/", env!("PROFILE"), "/clippy-driver"))
14     }
15 }
16
17 fn host_libs() -> PathBuf {
18     if let Some(path) = option_env!("HOST_LIBS") {
19         PathBuf::from(path)
20     } else {
21         Path::new("target").join(env!("PROFILE"))
22     }
23 }
24
25 fn rustc_test_suite() -> Option<PathBuf> {
26     option_env!("RUSTC_TEST_SUITE").map(PathBuf::from)
27 }
28
29 fn rustc_lib_path() -> PathBuf {
30     option_env!("RUSTC_LIB_PATH").unwrap().into()
31 }
32
33 fn config(dir: &'static str, mode: &'static str) -> compiletest::Config {
34     let mut config = compiletest::Config::default();
35
36     let cfg_mode = mode.parse().expect("Invalid mode");
37     if let Ok(name) = var::<&str>("TESTNAME") {
38         let s: String = name.to_owned();
39         config.filter = Some(s)
40     }
41
42     if rustc_test_suite().is_some() {
43         config.run_lib_path = rustc_lib_path();
44         config.compile_lib_path = rustc_lib_path();
45     }
46     config.target_rustcflags = Some(format!("-L {0} -L {0}/deps -Dwarnings", host_libs().display()));
47
48     config.mode = cfg_mode;
49     config.build_base = {
50         let mut path = std::env::current_dir().unwrap();
51         path.push("target/debug/test_build_base");
52         path
53     };
54     config.src_base = PathBuf::from(format!("tests/{}", dir));
55     config.rustc_path = clippy_driver_path();
56     config
57 }
58
59 fn run_mode(dir: &'static str, mode: &'static str) {
60     compiletest::run_tests(&config(dir, mode));
61 }
62
63 fn prepare_env() {
64     set_var("CLIPPY_DISABLE_DOCS_LINKS", "true");
65     set_var("CLIPPY_TESTS", "true");
66     set_var("RUST_BACKTRACE", "0");
67 }
68
69 #[test]
70 fn compile_test() {
71     prepare_env();
72     run_mode("run-pass", "run-pass");
73     run_mode("ui", "ui");
74 }
75
76 #[test]
77 fn dogfood() {
78     prepare_env();
79     let files = ["src/main.rs", "src/driver.rs", "src/lib.rs", "clippy_lints/src/lib.rs"];
80     let mut config = config("dogfood", "ui");
81     config.target_rustcflags = config.target_rustcflags.map(|flags| format!("{} -Dclippy -Dclippy_pedantic -Dclippy_internal", flags));
82
83     for file in &files {
84         let paths = test::TestPaths {
85             base: PathBuf::new(),
86             file: PathBuf::from(file),
87             relative_dir: PathBuf::new(),
88         };
89
90         compiletest::runtest::run(config.clone(), &paths);
91     }
92 }