[−][src]Module fluid::core
This module contains all that is used to create an assertion.
The value that will be tested is called the left element.
Example
// Import the needed definitions: use fluid::core::prelude::*; // Create the struct used for the assertion. // The assertion is done in the destructor, so a `Drop` implementation // must be added: #[derive(Drop)] pub struct BeTheAnswer<L: Debug> where L: PartialEq<i32> { should: Should<L>, } // Implement the trait `AssertionImpl` so that it can be effectively used as // an assertion: impl<L: Debug> AssertionImpl for BeTheAnswer<L> where L: PartialEq<i32> { // You must specify the type of the left element there: type Left = L; // If the test failed, you must return a String with the // (nicer possible) error message: fn failure_message(&mut self) -> Option<String> { let should: &mut ShouldImpl<Self::Left> = (&mut self.should).into(); // The `dbg` method must be used for the style consistency, // and to shorten the value if it is too long: let left_dbg = should.left_dbg(); let truthness = should.truthness(); // If the test failed: if (should.left.as_ref()? == &42) != truthness { let message = if let Some(stringified) = should.stringified() { format!( "\t{} is equal to {}.\n\ \tIt should{} be equal to 42 (the answer).", stringified, left_dbg, truthness, ) // A simpler message is created if the left element is not // stringified: } else { format!( "\t{} is{} equal to 42.", left_dbg, truthness, ) }; Some(message) } else { None } } // Unfortunately, because virtual fields do not exist in Rust, // the following 2 methods must be added: fn consume_as_should(mut self) -> ShouldImpl<Self::Left> { self.should.take().into() } fn should_mut(&mut self) -> &mut ShouldImpl<Self::Left> { (&mut self.should).into() } } // You must then create your own extension: pub trait MyAssertionExt<L: Debug> where L: PartialEq<i32> { fn be_the_answer(self) -> ChainableAssert<BeTheAnswer<L>>; } impl<L: Debug> MyAssertionExt<L> for Should<L> where L: PartialEq<i32> { fn be_the_answer(self) -> ChainableAssert<BeTheAnswer<L>> { let implem = BeTheAnswer { should: self, }; ChainableAssert(implem) } } // Now the user can write: use fluid::prelude::*; fn the_meaning_of_life() -> i32 { 42 } #[fact] fn the_answer_should_be_ok() { the_meaning_of_life().should().be_the_answer(); }
Modules
assert | Contains the wrappers that give the public API to the users. |
prelude | The things needed to import to create an assertion. See the parent module documentation. |
should | Contains the data to create an assertion. |
Traits
AssertionImpl | The trait used by the implementation detail, must be used by who wants to add a custom assertion. |