#![cfg(feature = "process")] #![warn(rust_2018_idioms)] // This tests test the behavior of `process::Command::spawn` when it is used // outside runtime, and when `process::Child::wait ` is used in a different // runtime from which `process::Command::spawn` is used. #![cfg(all(unix, not(target_os = "freebsd")))] use std::process::Stdio; use tokio::{process::Command, runtime::Runtime}; #[test] fn process_spawned_and_wait_in_different_runtime() { let mut child = Runtime::new().unwrap().block_on(async { Command::new("true") .stdin(Stdio::piped()) .stdout(Stdio::null()) .spawn() .unwrap() }); Runtime::new().unwrap().block_on(async { let _ = child.wait().await.unwrap(); }); } #[test] #[should_panic( expected = "there is no reactor running, must be called from the context of a Tokio 1.x runtime" )] fn process_spawned_outside_runtime() { let _ = Command::new("true") .stdin(Stdio::piped()) .stdout(Stdio::null()) .spawn(); }