1 use std::env; 2 use std::process::Command; 3 use std::path::{Path, PathBuf}; 4 5 fn 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 pushr"); 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 println!("status: {}\nstdout ---\n{}\nstderr ---\n{}", 37 output.status, 38 String::from_utf8_lossy(&output.stdout), 39 String::from_utf8_lossy(&output.stderr)); 40 41 let stdout = String::from_utf8_lossy(&output.stdout); 42 stdout.lines().find(|l| 43 (l.starts_with("PASSED ") && l.contains(" tests")) || 44 l.starts_with("test result: ok") 45 ).unwrap_or_else(|| { 46 panic!("failed to find successful test run"); 47 }); 48 } 49