Add tests for fixed bugs

This commit is contained in:
Joshua Nelson 2022-04-27 23:43:33 -05:00
parent 0da0a2196d
commit fca6dbd9af
2 changed files with 40 additions and 4 deletions

View File

@ -348,7 +348,11 @@ impl StepDescription {
eprintln!(
"note: if you are adding a new Step to bootstrap itself, make sure you register it with `describe!`"
);
#[cfg(not(test))]
std::process::exit(1);
#[cfg(test)]
// so we can use #[should_panic]
panic!()
}
}
}

View File

@ -3,7 +3,11 @@ use crate::config::{Config, TargetSelection};
use std::thread;
fn configure(cmd: &str, host: &[&str], target: &[&str]) -> Config {
let mut config = Config::parse(&[cmd.to_owned()]);
configure_with_args(&[cmd.to_owned()], host, target)
}
fn configure_with_args(cmd: &[String], host: &[&str], target: &[&str]) -> Config {
let mut config = Config::parse(cmd);
// don't save toolstates
config.save_toolstates = None;
config.dry_run = true;
@ -46,11 +50,39 @@ fn run_build(paths: &[PathBuf], config: Config) -> Cache {
builder.cache
}
fn check_cli<const N: usize>(paths: [&str; N]) {
run_build(
&paths.map(PathBuf::from),
configure_with_args(&paths.map(String::from), &["A"], &["A"]),
);
}
#[test]
fn test_valid() {
// make sure multi suite paths are accepted
check_cli(["test", "src/test/ui/attr-start.rs", "src/test/ui/attr-shebang.rs"]);
}
#[test]
#[should_panic]
fn test_invalid() {
// make sure that invalid paths are caught, even when combined with valid paths
check_cli(["test", "library/std", "x"]);
}
#[test]
fn test_intersection() {
let set = PathSet::Set(["library/core", "library/alloc", "library/std"].into_iter().map(TaskPath::parse).collect());
let subset = set.intersection(&[Path::new("library/core"), Path::new("library/alloc"), Path::new("library/stdarch")], None);
assert_eq!(subset, PathSet::Set(["library/core", "library/alloc"].into_iter().map(TaskPath::parse).collect()));
let set = PathSet::Set(
["library/core", "library/alloc", "library/std"].into_iter().map(TaskPath::parse).collect(),
);
let mut command_paths =
vec![Path::new("library/core"), Path::new("library/alloc"), Path::new("library/stdarch")];
let subset = set.intersection_removing_matches(&mut command_paths, None);
assert_eq!(
subset,
PathSet::Set(["library/core", "library/alloc"].into_iter().map(TaskPath::parse).collect())
);
assert_eq!(command_paths, vec![Path::new("library/stdarch")]);
}
#[test]