Skip to main content

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    ///
12    /// # Examples
13    ///
14    /// ```
15    /// use fluent_assertions::*;
16    /// Ok::<i32, String>(42).should().be_ok().be(42);
17    /// ```
18    #[track_caller]
19    pub fn be_ok(self) -> Assertion<T> {
20        match self.value {
21            Ok(value) => Assertion { value },
22            Err(e) => panic!("Expected Ok, but got Err({:?})", e),
23        }
24    }
25
26    /// Asserts that the Result is Err
27    ///
28    /// # Examples
29    ///
30    /// ```
31    /// use fluent_assertions::*;
32    /// Err::<i32, String>("boom".to_string()).should().be_err().be("boom");
33    /// ```
34    #[track_caller]
35    pub fn be_err(self) -> Assertion<E> {
36        match self.value {
37            Ok(v) => panic!("Expected Err, but got Ok({:?})", v),
38            Err(error) => Assertion { value: error },
39        }
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use crate::assertions::*;
46    use rstest::*;
47
48    #[rstest]
49    #[case(Ok(42))]
50    #[case(Ok(0))]
51    fn should_be_ok(#[case] input: Result<i32, String>) {
52        input.should().be_ok();
53    }
54
55    #[rstest]
56    fn should_be_err() {
57        let error = "Error message".to_string();
58        let result: Result<i32, String> = Err(error);
59        result.should().be_err();
60    }
61}