1 | use super::Error; |
---|---|
2 | use crate::{per_test_config::TestConfig, Errored}; |
3 | use spanned::Spanned; |
4 | use std::process::ExitStatus; |
5 | |
6 | impl TestConfig { |
7 | #[allow(clippy::result_large_err)] |
8 | pub(crate) fn ok(&self, status: ExitStatus) -> Result<Option<Error>, Errored> { |
9 | let Some(expected) = self.exit_status()? else { |
10 | return Ok(None); |
11 | }; |
12 | if status.code() == Some(*expected) { |
13 | Ok(None) |
14 | } else { |
15 | let span = expected.span.clone(); |
16 | let expected = expected.content; |
17 | Ok(Some(Error::ExitStatus { |
18 | status, |
19 | expected, |
20 | reason: Spanned::new( |
21 | match (expected, status.code()) { |
22 | (_, Some(101)) => "the compiler panicked", |
23 | (0, Some(1)) => "compilation failed, but was expected to succeed", |
24 | (1, Some(0)) => "compilation succeeded, but was expected to fail", |
25 | _ => "", |
26 | } |
27 | .into(), |
28 | span, |
29 | ), |
30 | })) |
31 | } |
32 | } |
33 | } |
34 |
Definitions
Learn Rust with the experts
Find out more