summaryrefslogtreecommitdiffstats
path: root/src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs')
-rw-r--r--src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs b/src/test/ui/custom_test_frameworks/auxiliary/dynamic_runner.rs
new file mode 100644
index 000000000..a56e0b1f5
--- /dev/null
+++ b/src/test/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);
+ }
+}