diff options
Diffstat (limited to 'tests/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs')
-rw-r--r-- | tests/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs b/tests/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs new file mode 100644 index 000000000..a56e0b1f5 --- /dev/null +++ b/tests/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs @@ -0,0 +1,35 @@ +use std::process::exit; + +pub trait Testable { + // Name of the test + fn name(&self) -> String; + + // Tests pass by default + fn run(&self) -> bool { + true + } + + // A test can generate subtests + fn subtests(&self) -> Vec<Box<dyn Testable>> { + vec![] + } +} + +fn run_test(t: &dyn Testable) -> bool { + let success = t.subtests().into_iter().all(|sub_t| run_test(&*sub_t)) && t.run(); + println!("{}...{}", t.name(), if success { "SUCCESS" } else { "FAIL" }); + success +} + +pub fn runner(tests: &[&dyn Testable]) { + let mut failed = false; + for t in tests { + if !run_test(*t) { + failed = true; + } + } + + if failed { + exit(1); + } +} |