Skip to main content

xacli_testing/assert/
code.rs

1//! Exit code asserters
2
3use super::{Asserter, ExecuteAsserter};
4use crate::TestingError;
5
6/// Assert command succeeded (exit code 0)
7pub fn success() -> Box<dyn Asserter> {
8    Box::new(ExecuteAsserter::new(
9        "success",
10        "Exit code is 0",
11        Box::new(|result| {
12            if result.code == 0 {
13                Ok(())
14            } else {
15                Err(TestingError::Assertion(format!(
16                    "Expected: exit code 0\nActual: exit code {}\nMatch: exact",
17                    result.code
18                )))
19            }
20        }),
21    ))
22}
23
24/// Assert command failed (non-zero exit code)
25pub fn failure() -> Box<dyn Asserter> {
26    Box::new(ExecuteAsserter::new(
27        "failure",
28        "Exit code is non-zero",
29        Box::new(|result| {
30            if result.code != 0 {
31                Ok(())
32            } else {
33                Err(TestingError::Assertion(
34                    "Expected: non-zero exit code\nActual: exit code 0\nMatch: not equal"
35                        .to_string(),
36                ))
37            }
38        }),
39    ))
40}
41
42/// Assert specific exit code
43pub fn code(expected: i64) -> Box<dyn Asserter> {
44    Box::new(ExecuteAsserter::new(
45        format!("code({})", expected),
46        format!("Exit code is {}", expected),
47        Box::new(move |result| {
48            if result.code == expected {
49                Ok(())
50            } else {
51                Err(TestingError::Assertion(format!(
52                    "Expected: exit code {}\nActual: exit code {}\nMatch: exact",
53                    expected, result.code
54                )))
55            }
56        }),
57    ))
58}