| use std::io::Write; |
| use std::process; |
| |
| use runfiles::{rlocation, Runfiles}; |
| |
| #[test] |
| fn test_call() { |
| let r = Runfiles::create().unwrap(); |
| |
| let bin = rlocation!(r, env!("HELLO_SYS_RLOCATIONPATH")).unwrap(); |
| |
| let mut child = process::Command::new(bin) |
| .stdin(process::Stdio::piped()) |
| .stdout(process::Stdio::piped()) |
| .spawn() |
| .expect("Failed to spawn command"); |
| |
| // Get the stdin handle of the child process |
| if let Some(mut stdin) = child.stdin.take() { |
| // Write text to the stdin of the child process |
| let input = "Hello world"; |
| stdin |
| .write_all(input.as_bytes()) |
| .expect("Failed to write to stdin"); |
| } |
| |
| // Wait for the child process to finish |
| let output = child.wait_with_output().expect("Failed to read stdout"); |
| |
| let stdout = String::from_utf8(output.stdout).unwrap(); |
| assert_eq!("Compressed 11 to 50 bytes", stdout.trim()); |
| } |