]> git.lizzy.rs Git - rust.git/blob - tests/compile-test.rs
d532d4e5a599e4a21ad81d890e5ec7fa9e5dc4e6
[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 }