use crate::base::{AssertionApi, AssertionResult, AssertionStrategy, Subject};
pub trait BooleanAssertion<R> {
#[track_caller]
fn is_true(&self) -> R;
#[track_caller]
fn is_false(&self) -> R;
}
impl<R> BooleanAssertion<R> for Subject<'_, bool, (), R>
where
AssertionResult: AssertionStrategy<R>,
{
fn is_true(&self) -> R {
if *self.actual() {
self.new_result().do_ok()
} else {
self.new_result()
.add_simple_fact("expected true")
.add_simple_fact("but actual was false")
.do_fail()
}
}
fn is_false(&self) -> R {
if !self.actual() {
self.new_result().do_ok()
} else {
self.new_result()
.add_simple_fact("expected false")
.add_simple_fact("but actual was true")
.do_fail()
}
}
}
#[cfg(test)]
mod tests {
use crate::testing::*;
use super::*;
#[test]
fn is_true() {
assert_that!(true).is_true();
assert_that!(check_that!(false).is_true()).facts_are(vec![
Fact::new_simple_fact("expected true"),
Fact::new_simple_fact("but actual was false"),
])
}
#[test]
fn is_false() {
assert_that!(false).is_false();
assert_that!(check_that!(true).is_false()).facts_are(vec![
Fact::new_simple_fact("expected false"),
Fact::new_simple_fact("but actual was true"),
])
}
}