Skip to main content

kernal/
boolean.rs

1//! Contains assertions for [bool] values. See the [BooleanAssertions] trait for more details.
2
3use crate::{AssertThat, Failure};
4
5/// An extension trait to be used on the output of [assert_that](crate::assert_that) with [bool]
6/// argument.
7///
8/// Examples:
9///
10/// ```
11/// use kernal::prelude::*;
12///
13/// assert_that!(1 == 1).is_true();
14/// assert_that!(1 == 2).is_false();
15/// ```
16pub trait BooleanAssertions {
17    /// Asserts that the tested boolean is `true`.
18    fn is_true(self) -> Self;
19
20    /// Asserts that the tested boolean is `false`.
21    fn is_false(self) -> Self;
22}
23
24impl BooleanAssertions for AssertThat<bool> {
25    fn is_true(self) -> AssertThat<bool> {
26        if !self.data {
27            Failure::new(&self)
28                .expected_it("to be true")
29                .but_it("was false")
30                .fail();
31        }
32
33        self
34    }
35
36    fn is_false(self) -> AssertThat<bool> {
37        if self.data {
38            Failure::new(&self)
39                .expected_it("to be false")
40                .but_it("was true")
41                .fail();
42        }
43
44        self
45    }
46}
47
48#[cfg(test)]
49mod tests {
50
51    use super::*;
52    use crate::{assert_fails, assert_that};
53
54    #[test]
55    fn is_true_passes_for_true() {
56        assert_that!(true).is_true();
57    }
58
59    #[test]
60    fn is_true_fails_for_false() {
61        assert_fails!((false).is_true(), expected it "to be true" but it "was false");
62    }
63
64    #[test]
65    fn is_false_passes_for_false() {
66        assert_that!(false).is_false();
67    }
68
69    #[test]
70    fn is_false_fails_for_true() {
71        assert_fails!((true).is_false(), expected it "to be false" but it "was true");
72    }
73}