xref: /aosp_15_r20/platform_testing/libraries/rdroidtest/src/runner.rs (revision dd0948b35e70be4c0246aabd6c72554a5eb8b22a)
1*dd0948b3SAndroid Build Coastguard Worker //! Test runner.
2*dd0948b3SAndroid Build Coastguard Worker 
3*dd0948b3SAndroid Build Coastguard Worker use core::ops::{Deref, FnOnce};
4*dd0948b3SAndroid Build Coastguard Worker use libtest_mimic::{Arguments, Failed, Trial};
5*dd0948b3SAndroid Build Coastguard Worker use linkme::distributed_slice;
6*dd0948b3SAndroid Build Coastguard Worker use log::LevelFilter;
7*dd0948b3SAndroid Build Coastguard Worker use std::env;
8*dd0948b3SAndroid Build Coastguard Worker 
9*dd0948b3SAndroid Build Coastguard Worker /// Command-line arguments to ignore, because they are not supported by libtest-mimic.
10*dd0948b3SAndroid Build Coastguard Worker const IGNORED_ARGS: [&str; 2] = ["-Zunstable-options", "--report-time"];
11*dd0948b3SAndroid Build Coastguard Worker 
12*dd0948b3SAndroid Build Coastguard Worker /// The collection of all non-parameterized tests to run.
13*dd0948b3SAndroid Build Coastguard Worker #[doc(hidden)]
14*dd0948b3SAndroid Build Coastguard Worker #[distributed_slice]
15*dd0948b3SAndroid Build Coastguard Worker pub static RDROIDTEST_TESTS: [fn() -> Trial] = [..];
16*dd0948b3SAndroid Build Coastguard Worker 
17*dd0948b3SAndroid Build Coastguard Worker /// The collection of all parameterized tests to run.
18*dd0948b3SAndroid Build Coastguard Worker #[doc(hidden)]
19*dd0948b3SAndroid Build Coastguard Worker #[distributed_slice]
20*dd0948b3SAndroid Build Coastguard Worker pub static RDROIDTEST_PTESTS: [fn() -> Vec<Trial>] = [..];
21*dd0948b3SAndroid Build Coastguard Worker 
22*dd0948b3SAndroid Build Coastguard Worker /// Runs all tests.
main()23*dd0948b3SAndroid Build Coastguard Worker pub fn main() {
24*dd0948b3SAndroid Build Coastguard Worker     logger::init(logger::Config::default().with_max_level(LevelFilter::Debug));
25*dd0948b3SAndroid Build Coastguard Worker     let args = Arguments::from_iter(env::args().filter(|arg| !IGNORED_ARGS.contains(&arg.deref())));
26*dd0948b3SAndroid Build Coastguard Worker 
27*dd0948b3SAndroid Build Coastguard Worker     let tests = RDROIDTEST_TESTS
28*dd0948b3SAndroid Build Coastguard Worker         .iter()
29*dd0948b3SAndroid Build Coastguard Worker         .map(|test| test())
30*dd0948b3SAndroid Build Coastguard Worker         .chain(RDROIDTEST_PTESTS.iter().flat_map(|test| test()))
31*dd0948b3SAndroid Build Coastguard Worker         .collect();
32*dd0948b3SAndroid Build Coastguard Worker 
33*dd0948b3SAndroid Build Coastguard Worker     libtest_mimic::run(&args, tests).exit();
34*dd0948b3SAndroid Build Coastguard Worker }
35*dd0948b3SAndroid Build Coastguard Worker 
36*dd0948b3SAndroid Build Coastguard Worker /// Runs the given test.
run(test: impl FnOnce()) -> Result<(), Failed>37*dd0948b3SAndroid Build Coastguard Worker pub fn run(test: impl FnOnce()) -> Result<(), Failed> {
38*dd0948b3SAndroid Build Coastguard Worker     test();
39*dd0948b3SAndroid Build Coastguard Worker     Ok(())
40*dd0948b3SAndroid Build Coastguard Worker }
41