1 use std::env; 2 use std::path::{Path, PathBuf}; 3 use std::process::Command; 4 main()5fn main() { 6 let args = env::args_os() 7 .skip(1) 8 .filter(|arg| arg != "--quiet" && arg != "--skip" && arg != "check_style") 9 .collect::<Vec<_>>(); 10 assert_eq!(args.len(), 1); 11 let test = PathBuf::from(&args[0]); 12 let dst = Path::new("/data/local/tmp").join(test.file_name().unwrap()); 13 14 let status = Command::new("adb") 15 .arg("wait-for-device") 16 .status() 17 .expect("failed to run: adb wait-for-device"); 18 assert!(status.success()); 19 20 let status = Command::new("adb") 21 .arg("push") 22 .arg(&test) 23 .arg(&dst) 24 .status() 25 .expect("failed to run: adb push"); 26 assert!(status.success()); 27 28 let output = Command::new("adb") 29 .arg("shell") 30 .arg("RUST_BACKTRACE=1") 31 .arg(&dst) 32 .output() 33 .expect("failed to run: adb shell"); 34 assert!(status.success()); 35 36 let stdout = String::from_utf8_lossy(&output.stdout); 37 let stderr = String::from_utf8_lossy(&output.stderr); 38 39 println!( 40 "status: {}\nstdout ---\n{stdout}\nstderr ---\n{stderr}", 41 output.status, 42 ); 43 44 if !stderr.lines().any(|l| { 45 (l.starts_with("PASSED ") && l.contains(" tests")) || l.starts_with("test result: ok") 46 }) && !stdout.lines().any(|l| { 47 (l.starts_with("PASSED ") && l.contains(" tests")) || l.starts_with("test result: ok") 48 }) { 49 panic!("failed to find successful test run"); 50 }; 51 } 52