blob: c14db690224dbf7328686b1d027c761c0f0eae87 [file]
fn main() {
// No `Command` on Miri, emscripten or L4Re
#[cfg(all(
not(miri),
any(unix, windows),
not(any(target_os = "emscripten", target_os = "l4re"))
))]
{
use std::io::{Read, pipe};
use std::{env, process};
if env::var("I_AM_THE_CHILD").is_ok() {
child();
} else {
parent();
}
fn parent() {
let me = env::current_exe().unwrap();
// If a custom `runner` is set up for the current target, we'll be
// executing `./runner ./test`, not just `./test`. For such a case,
// use the same arguments for child to avoid executing `runner`
// without an actual executable.
let args = env::args();
let (rx, tx) = pipe().unwrap();
assert!(
process::Command::new(me)
.args(args)
.env("I_AM_THE_CHILD", "1")
.stdout(tx)
.status()
.unwrap()
.success()
);
let mut s = String::new();
(&rx).read_to_string(&mut s).unwrap();
drop(rx);
assert_eq!(s, "Heloo,\n");
println!("Test pipe_subprocess.rs success");
}
fn child() {
println!("Heloo,");
}
}
}