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 Workerpub 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 Workerpub 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