]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/try-wait.rs
Rollup merge of #61499 - varkor:issue-53457, r=oli-obk
[rust.git] / src / test / run-pass / try-wait.rs
1 #![allow(stable_features)]
2 // ignore-cloudabi no processes
3 // ignore-emscripten no processes
4 // ignore-sgx no processes
5
6 #![feature(process_try_wait)]
7
8 use std::env;
9 use std::process::Command;
10 use std::thread;
11 use std::time::Duration;
12
13 fn main() {
14     let args = env::args().collect::<Vec<_>>();
15     if args.len() != 1 {
16         match &args[1][..] {
17             "sleep" => thread::sleep(Duration::new(1_000, 0)),
18             _ => {}
19         }
20         return
21     }
22
23     let mut me = Command::new(env::current_exe().unwrap())
24                          .arg("sleep")
25                          .spawn()
26                          .unwrap();
27     let maybe_status = me.try_wait().unwrap();
28     assert!(maybe_status.is_none());
29     let maybe_status = me.try_wait().unwrap();
30     assert!(maybe_status.is_none());
31
32     me.kill().unwrap();
33     me.wait().unwrap();
34
35     let status = me.try_wait().unwrap().unwrap();
36     assert!(!status.success());
37     let status = me.try_wait().unwrap().unwrap();
38     assert!(!status.success());
39
40     let mut me = Command::new(env::current_exe().unwrap())
41                          .arg("return-quickly")
42                          .spawn()
43                          .unwrap();
44     loop {
45         match me.try_wait() {
46             Ok(Some(res)) => {
47                 assert!(res.success());
48                 break
49             }
50             Ok(None) => {
51                 thread::sleep(Duration::from_millis(1));
52             }
53             Err(e) => panic!("error in try_wait: {}", e),
54         }
55     }
56
57     let status = me.try_wait().unwrap().unwrap();
58     assert!(status.success());
59 }