1 use std::env; 2 use std::process::Command; 3 use std::path::{Path, PathBuf}; 4 main()5fn main() { 6 let args = env::args_os() 7 .skip(1) 8 .filter(|arg| arg != "--quiet") 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!("status: {}\nstdout ---\n{}\nstderr ---\n{}", 40 output.status, 41 stdout, 42 stderr); 43 44 if !stderr.lines().any(|l| (l.starts_with("PASSED ") && l.contains(" tests")) || l.starts_with("test result: ok")) 45 && !stdout.lines().any(|l| (l.starts_with("PASSED ") && l.contains(" tests")) || l.starts_with("test result: ok")) 46 { 47 panic!("failed to find successful test run"); 48 }; 49 } 50