]> git.proxmox.com Git - rustc.git/blob - src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / test / ui / custom_test_frameworks / auxiliary / dynamic_runner.rs
1 use std::process::exit;
2
3 pub trait Testable {
4 // Name of the test
5 fn name(&self) -> String;
6
7 // Tests pass by default
8 fn run(&self) -> bool {
9 true
10 }
11
12 // A test can generate subtests
13 fn subtests(&self) -> Vec<Box<dyn Testable>> {
14 vec![]
15 }
16 }
17
18 fn run_test(t: &dyn Testable) -> bool {
19 let success = t.subtests().into_iter().all(|sub_t| run_test(&*sub_t)) && t.run();
20 println!("{}...{}", t.name(), if success { "SUCCESS" } else { "FAIL" });
21 success
22 }
23
24 pub fn runner(tests: &[&dyn Testable]) {
25 let mut failed = false;
26 for t in tests {
27 if !run_test(*t) {
28 failed = true;
29 }
30 }
31
32 if failed {
33 exit(1);
34 }
35 }