(true, true) => panic!("cannot use MIRI_BLESS and MIRI_SKIP_UI_CHECKS at the same time"),
};
- // Pass on all arguments as filters.
- let path_filter = std::env::args().skip(1);
+ // Pass on all unknown arguments as filters.
+ let mut quiet = false;
+ let path_filter = std::env::args().skip(1).filter(|arg| {
+ match &**arg {
+ "--quiet" => {
+ quiet = true;
+ false
+ }
+ _ => true,
+ }
+ });
let use_std = env::var_os("MIRI_NO_STD").is_none();
],
envs: vec![],
}),
+ quiet,
};
ui_test::run_tests(config)
}
/// Can be used to override what command to run instead of `cargo` to build the
/// dependencies in `manifest_path`
pub dependency_builder: Option<DependencyBuilder>,
+ /// Print one character per test instead of one line
+ pub quiet: bool,
}
#[derive(Debug)]
// A channel for the messages emitted by the individual test threads.
let (finish_file, finished_files) = crossbeam::channel::unbounded();
+ enum TestResult {
+ Ok,
+ Failed,
+ Ignored,
+ }
s.spawn(|_| {
- for msg in finished_files {
- eprintln!("{msg}");
+ if config.quiet {
+ for (i, (_, result)) in finished_files.into_iter().enumerate() {
+ // Humans start counting at 1
+ let i = i + 1;
+ match result {
+ TestResult::Ok => eprint!("{}", ".".green()),
+ TestResult::Failed => eprint!("{}", "F".red().bold()),
+ TestResult::Ignored => eprint!("{}", "i".yellow()),
+ }
+ if i % 100 == 0 {
+ eprintln!(" {i}");
+ }
+ }
+ } else {
+ for (msg, result) in finished_files {
+ eprint!("{msg} ... ");
+ eprintln!(
+ "{}",
+ match result {
+ TestResult::Ok => "ok".green(),
+ TestResult::Failed => "FAILED".red().bold(),
+ TestResult::Ignored => "ignored (in-test comment)".yellow(),
+ }
+ );
+ }
}
});
// Ignore file if only/ignore rules do (not) apply
if !test_file_conditions(&comments, &target, &config) {
ignored.fetch_add(1, Ordering::Relaxed);
- let msg = format!(
- "{} ... {}",
- path.display(),
- "ignored (in-test comment)".yellow()
- );
- finish_file.send(msg)?;
+ finish_file.send((path.display().to_string(), TestResult::Ignored))?;
continue;
}
// Run the test for all revisions
if !revision.is_empty() {
write!(msg, "(revision `{revision}`) ").unwrap();
}
- write!(msg, "... ").unwrap();
if errors.is_empty() {
- write!(msg, "{}", "ok".green()).unwrap();
+ finish_file.send((msg, TestResult::Ok))?;
succeeded.fetch_add(1, Ordering::Relaxed);
} else {
- write!(msg, "{}", "FAILED".red().bold()).unwrap();
+ finish_file.send((msg, TestResult::Failed))?;
failures.lock().unwrap().push((
path.clone(),
m,
stderr,
));
}
- finish_file.send(msg)?;
}
}
Ok(())