fluent_assertions/assertions/
result_assertion.rs

1use super::Assertion;
2use std::fmt::Debug;
3
4/// Specific assertions for Result types
5impl<T, E> Assertion<Result<T, E>>
6where
7    T: Debug,
8    E: Debug,
9{
10    /// Asserts that the Result is Ok
11    pub fn be_ok(self) -> Assertion<T> {
12        match self.value {
13            Ok(value) => Assertion { value },
14            Err(e) => panic!("Expected Ok, but got Err({:?})", e),
15        }
16    }
17
18    /// Asserts that the Result is Err
19    pub fn be_err(self) -> Assertion<E> {
20        match self.value {
21            Ok(v) => panic!("Expected Err, but got Ok({:?})", v),
22            Err(error) => Assertion { value: error },
23        }
24    }
25}
26
27#[cfg(test)]
28mod tests {
29    use crate::assertions::*;
30    use rstest::*;
31
32    #[rstest]
33    #[case(Ok(42))]
34    #[case(Ok(0))]
35    fn should_be_ok(#[case] input: Result<i32, String>) {
36        input.should().be_ok();
37    }
38
39    #[rstest]
40    fn should_be_err() {
41        let error = "Error message".to_string();
42        let result: Result<i32, String> = Err(error);
43        result.should().be_err();
44    }
45}