diff options
Diffstat (limited to 'test_util/src')
-rw-r--r-- | test_util/src/lib.rs | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/test_util/src/lib.rs b/test_util/src/lib.rs index 870fbfb29..ab5e1080c 100644 --- a/test_util/src/lib.rs +++ b/test_util/src/lib.rs @@ -860,18 +860,35 @@ impl CheckOutputIntegrationTest { reader.read_to_string(&mut actual).unwrap(); let status = process.wait().expect("failed to finish process"); - let exit_code = status.code().unwrap(); - actual = strip_ansi_codes(&actual).to_string(); - - if self.exit_code != exit_code { - println!("OUTPUT\n{}\nOUTPUT", actual); - panic!( - "bad exit code, expected: {:?}, actual: {:?}", - self.exit_code, exit_code - ); + if let Some(exit_code) = status.code() { + if self.exit_code != exit_code { + println!("OUTPUT\n{}\nOUTPUT", actual); + panic!( + "bad exit code, expected: {:?}, actual: {:?}", + self.exit_code, exit_code + ); + } + } else { + #[cfg(unix)] + { + use std::os::unix::process::ExitStatusExt; + let signal = status.signal().unwrap(); + println!("OUTPUT\n{}\nOUTPUT", actual); + panic!( + "process terminated by signal, expected exit code: {:?}, actual signal: {:?}", + self.exit_code, signal + ); + } + #[cfg(not(unix))] + { + println!("OUTPUT\n{}\nOUTPUT", actual); + panic!("process terminated without status code on non unix platform, expected exit code: {:?}", self.exit_code); + } } + actual = strip_ansi_codes(&actual).to_string(); + let expected = if let Some(s) = self.output_str { s.to_owned() } else { |