Skip to content

Commit edcb8f6

Browse files
committed
Use compiletest::make_tests to allow it to setup the output folders
1 parent 3244d12 commit edcb8f6

File tree

1 file changed

+35
-14
lines changed

1 file changed

+35
-14
lines changed

tests/compile-test.rs

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
extern crate compiletest_rs as compiletest;
44
extern crate test;
55

6+
use std::io;
67
use std::ffi::OsStr;
78
use std::fs;
8-
use std::error::Error;
99
use std::env::{set_var, var};
1010
use std::path::{Path, PathBuf};
1111

@@ -33,7 +33,7 @@ fn rustc_lib_path() -> PathBuf {
3333
option_env!("RUSTC_LIB_PATH").unwrap().into()
3434
}
3535

36-
fn config(mode: &str, dir: &str) -> compiletest::Config {
36+
fn config(mode: &str, dir: PathBuf) -> compiletest::Config {
3737
let mut config = compiletest::Config::default();
3838

3939
let cfg_mode = mode.parse().expect("Invalid mode");
@@ -59,25 +59,25 @@ fn config(mode: &str, dir: &str) -> compiletest::Config {
5959
path.push("target/debug/test_build_base");
6060
path
6161
};
62-
config.src_base = PathBuf::from(format!("tests/{}", dir));
62+
config.src_base = dir;
6363
config.rustc_path = clippy_driver_path();
6464
config
6565
}
6666

67-
fn run_mode(mode: &str, dir: &str) {
67+
fn run_mode(mode: &str, dir: PathBuf) {
6868
compiletest::run_tests(&config(mode, dir));
6969
}
7070

71-
fn run_ui_toml() -> Result<(), Box<Error>> {
72-
let base = PathBuf::from("tests/ui-toml/").canonicalize()?;
73-
for dir in fs::read_dir(&base)? {
71+
fn run_ui_toml_tests(config: &compiletest::Config, mut tests: Vec<test::TestDescAndFn>) -> Result<bool, io::Error> {
72+
let mut result = true;
73+
let opts = compiletest::test_opts(config);
74+
for dir in fs::read_dir(&config.src_base)? {
7475
let dir = dir?;
7576
if !dir.file_type()?.is_dir() {
7677
continue;
7778
}
7879
let dir_path = dir.path();
7980
set_var("CARGO_MANIFEST_DIR", &dir_path);
80-
let config = config("ui", "ui-toml");
8181
for file in fs::read_dir(&dir_path)? {
8282
let file = file?;
8383
let file_path = file.path();
@@ -89,13 +89,34 @@ fn run_ui_toml() -> Result<(), Box<Error>> {
8989
}
9090
let paths = compiletest::common::TestPaths {
9191
file: file_path,
92-
base: base.clone(),
92+
base: config.src_base.clone(),
9393
relative_dir: dir_path.file_name().unwrap().into(),
9494
};
95-
compiletest::runtest::run(config.clone(), &paths);
95+
let test_name = compiletest::make_test_name(&config, &paths);
96+
let index = tests.iter()
97+
.position(|test| test.desc.name == test_name)
98+
.expect("The test should be in there");
99+
result &= test::run_tests_console(
100+
&opts,
101+
vec![tests.swap_remove(index)])?;
102+
}
103+
}
104+
Ok(result)
105+
}
106+
107+
fn run_ui_toml() {
108+
let path = PathBuf::from("tests/ui-toml").canonicalize().unwrap();
109+
let config = config("ui", path);
110+
let tests = compiletest::make_tests(&config);
111+
112+
let res = run_ui_toml_tests(&config, tests);
113+
match res {
114+
Ok(true) => {}
115+
Ok(false) => panic!("Some tests failed"),
116+
Err(e) => {
117+
println!("I/O failure during tests: {:?}", e);
96118
}
97119
}
98-
Ok(())
99120
}
100121

101122
fn prepare_env() {
@@ -107,7 +128,7 @@ fn prepare_env() {
107128
#[test]
108129
fn compile_test() {
109130
prepare_env();
110-
run_mode("run-pass", "run-pass");
111-
run_mode("ui", "ui");
112-
run_ui_toml().unwrap();
131+
run_mode("run-pass", "tests/run-pass".into());
132+
run_mode("ui", "tests/ui".into());
133+
run_ui_toml();
113134
}

0 commit comments

Comments
 (0)