Struct Spec

Source
pub struct Spec<'a, S, R> { /* private fields */ }
Expand description

Data of an actual assertion.

It holds the data needed to execute an assertion such as the subject, the name of the subject or expression, an optional description of the current assertion and the location of the assertion in the source code respectively test code.

It also holds the concrete FailingStrategy on how to behave in case an assertion fails.

In case of the CollectFailures failing strategy the AssertFailures are collected in this struct.

Implementations§

Source§

impl<S, R> Spec<'_, S, R>

Source

pub const fn new(subject: S, failing_strategy: R) -> Self

Constructs a new Spec for the given subject and with the specified failing strategy.

Source

pub const fn subject(&self) -> &S

Returns the subject.

Source

pub const fn expression(&self) -> Option<Expression<'_>>

Returns the expression (or subject name) if one has been set.

Source

pub const fn location(&self) -> Option<Location<'_>>

Returns the location in source code or test code if it has been set.

Source

pub const fn description(&self) -> Option<&str>

Returns the description or the assertion if it has been set.

Source

pub const fn failing_strategy(&self) -> &R

Returns the failing strategy that is used in case an assertion fails.

Source

pub fn failures(&self) -> Vec<AssertFailure>

Returns the assertion failures that have been collected so far.

Source

pub fn display_failures(&self) -> Vec<String>

Returns the assertion failures collected so far as formatted text.

Source§

impl<'a, S, R> Spec<'a, S, R>

Source

pub const fn named(self, subject_name: &'a str) -> Self

Sets the subject name or expression for this assertion.

Source

pub const fn described_as(self, description: &'a str) -> Self

Sets a custom description about what is being asserted.

Source

pub const fn located_at(self, location: Location<'a>) -> Self

Sets the location of the assertion in the source code respectively test code.

Source

pub fn extracting<F, U>(self, extractor: F) -> Spec<'a, U, R>
where F: FnOnce(S) -> U,

Maps the current subject to some other value.

It takes a closure that maps the current subject to a new subject and returns a new Spec with the value returned by the closure as the new subject. The new subject may have a different type than the original subject. All other data like expression, description and location are taken over from this Spec into the returned Spec.

This function is useful when having a custom type and some specific property of this type shall be asserted only.

This is an alias function to the mapping() function. Both functions do exactly the same. The idea is to provide different names to be able to express the intent more clearly when used in assertions.

§Example
use asserting::prelude::*;

struct MyStruct {
    important_property: String,
    other_property: f64,
}

let some_thing = MyStruct {
    important_property: "imperdiet aliqua zzril eiusmod".into(),
    other_property: 99.9,
};

assert_that!(some_thing).extracting(|s| s.important_property)
    .is_equal_to("imperdiet aliqua zzril eiusmod");
Source

pub fn mapping<F, U>(self, mapper: F) -> Spec<'a, U, R>
where F: FnOnce(S) -> U,

Maps the current subject to some other value.

It takes a closure that maps the current subject to a new subject and returns a new Spec with the value returned by the closure as the new subject. The new subject may have a different type than the original subject. All other data like expression, description and location are taken over from this Spec into the returned Spec.

This function is useful if some type does not implement a trait that is required for an assertion.

Spec also provides the extracting() function, which is an alias to this function. Both functions do exactly the same. Choose that function of which its name expresses the intent more clearly.

§Example
use asserting::prelude::*;

struct Point {
    x: i64,
    y: i64,
}

let target = Point { x: 12, y: -64 };

assert_that!(target).mapping(|s| (s.x, s.y)).is_equal_to((12, -64));

The custom type Point does not implement the PartialEq trait nor the Debug trait, which are both required for an is_equal_to assertion. So we map the subject of the type Point to a tuple of its fields.

Source§

impl<S, R> Spec<'_, S, R>
where R: FailingStrategy,

Source

pub fn expecting(self, expectation: impl Expectation<S>) -> Self

Asserts the given expectation.

In case the expectation is not meet it does fail according the current failing strategy of this Spec.

This method is called from the implementations of the assertion traits defined in the assertions module. Implementations of custom assertions will call this method with a proper expectation.

§Examples
use asserting::expectations::{IsEmpty, IsEqualTo};
use asserting::prelude::*;

assert_that!(7 * 6).expecting(IsEqualTo {expected: 42 });

assert_that!("").expecting(IsEmpty);
Source

pub fn satisfies<P>(self, predicate: P) -> Self
where P: Fn(&S) -> bool,

Asserts whether the given predicate is meet.

This method takes a predicate function and calls it as an expectation. In case the predicate function returns false, it does fail with a generic failure message and according to the current failing strategy of this Spec.

This method can be used to do simple custom assertions without implementing an Expectation and an assertion trait.

§Examples
use asserting::prelude::*;

fn is_odd(value: &i32) -> bool {
    value & 1 == 1
}

assert_that!(37).satisfies(is_odd);

let failures = verify_that!(22).satisfies(is_odd).display_failures();

assert_that!(failures).contains_exactly([
    "assertion failed: expected 22 to satisfy the given predicate, but returned false\n"
]);

To assert a predicate with a custom failure message instead of the generic one use the method satisfies_with_message.

Source

pub fn satisfies_with_message<P>( self, message: impl Into<String>, predicate: P, ) -> Self
where P: Fn(&S) -> bool,

Asserts whether the given predicate is meet.

This method takes a predicate function and calls it as an expectation. In case the predicate function returns false, it does fail with the provided failure message and according to the current failing strategy of this Spec.

This method can be used to do simple custom assertions without implementing an Expectation and an assertion trait.

§Examples
use asserting::prelude::*;

fn is_odd(value: &i32) -> bool {
    value & 1 == 1
}

assert_that!(37).satisfies_with_message("expected my number to be odd", is_odd);

let failures = verify_that!(22)
        .satisfies_with_message("expected my number to be odd", is_odd)
        .display_failures();

assert_that!(failures).contains_exactly([
    "assertion failed: expected my number to be odd\n"
]);

To assert a predicate with a generic failure message instead of providing one use the method satisfies.

Trait Implementations§

Source§

impl<R> AssertBoolean for Spec<'_, bool, R>
where R: FailingStrategy,

Source§

fn is_true(self) -> Self

Verifies that the subject is true.
Source§

fn is_false(self) -> Self

Verifies that the subject is false.
Source§

impl<S, R> AssertCodePanics for Spec<'_, Code<S>, R>
where S: FnOnce(), R: FailingStrategy,

Source§

fn does_not_panic(self) -> Self

Verifies that the actual code under test does not panic.
Source§

fn panics(self) -> Self

Verifies that the actual code under test panics with any message.
Source§

fn panics_with_message(self, message: impl Into<String>) -> Self

Verifies that the actual code under test panics with the given message.
Source§

impl<S, R> AssertEmptiness for Spec<'_, S, R>

Source§

fn is_empty(self) -> Self

Verifies that the subject is empty.
Source§

fn is_not_empty(self) -> Self

Verifies that the subject is not empty.
Source§

impl<S, E, R> AssertEquality<E> for Spec<'_, S, R>
where S: PartialEq<E> + Debug, E: Debug, R: FailingStrategy,

Source§

fn is_equal_to(self, expected: E) -> Self

Verifies that the subject is equal to some other value.
Source§

fn is_not_equal_to(self, expected: E) -> Self

Verifies that subject is not equal to some other value.
Source§

impl<T, E, X, R> AssertHasError<X> for Spec<'_, Result<T, E>, R>
where T: Debug, E: PartialEq<X> + Debug, X: Debug, R: FailingStrategy,

Source§

fn has_error(self, expected: X) -> Self

Verifies that the subject holds an error value that is equal to the expected one. Read more
Source§

impl<S, R> AssertHasLength<usize> for Spec<'_, S, R>

Source§

fn has_length(self, expected_length: usize) -> Self

Verifies that the subject has the expected length.
Source§

fn has_length_in_range(self, range: RangeInclusive<usize>) -> Self

Verifies that the subject has a length in the expected range. Read more
Source§

impl<S, E, R> AssertHasValue<E> for Spec<'_, Option<S>, R>
where S: PartialEq<E> + Debug, E: Debug, R: FailingStrategy,

Source§

fn has_value(self, expected: E) -> Self

Verifies that the subject holds a value that is equal to the expected one. Read more
Source§

impl<T, E, X, R> AssertHasValue<X> for Spec<'_, Result<T, E>, R>
where T: PartialEq<X> + Debug, E: Debug, X: Debug, R: FailingStrategy,

Source§

fn has_value(self, expected: X) -> Self

Verifies that the subject holds a value that is equal to the expected one. Read more
Source§

impl<S, E, R> AssertInRange<E> for Spec<'_, S, R>
where S: PartialOrd<E> + Debug, E: PartialOrd<S> + Debug, R: FailingStrategy,

Source§

fn is_in_range(self, range: RangeInclusive<E>) -> Self

Verifies that the subject is within the expected range. Read more
Source§

fn is_not_in_range(self, range: RangeInclusive<E>) -> Self

Verifies that the subject is not within the expected range. Read more
Source§

impl<R> AssertIsCloseToWithDefaultMargin<f32> for Spec<'_, f32, R>
where R: FailingStrategy,

Source§

fn is_close_to(self, expected: f32) -> Self

Verifies that the actual value is approximately equal to the expected value. Read more
Source§

fn is_not_close_to(self, expected: f32) -> Self

Verifies that the actual value is not approximately equal to the expected value. Read more
Source§

impl<R> AssertIsCloseToWithDefaultMargin<f64> for Spec<'_, f64, R>
where R: FailingStrategy,

Source§

fn is_close_to(self, expected: f64) -> Self

Verifies that the actual value is approximately equal to the expected value. Read more
Source§

fn is_not_close_to(self, expected: f64) -> Self

Verifies that the actual value is not approximately equal to the expected value. Read more
Source§

impl<R> AssertIsCloseToWithinMargin<f32, F32Margin> for Spec<'_, f32, R>
where R: FailingStrategy,

Source§

fn is_close_to_with_margin( self, expected: f32, margin: impl Into<F32Margin>, ) -> Self

Verifies that the actual value is approximately equal to the expected value. Read more
Source§

fn is_not_close_to_with_margin( self, expected: f32, margin: impl Into<F32Margin>, ) -> Self

Verifies that the actual value not approximately equal to the expected value. Read more
Source§

impl<R> AssertIsCloseToWithinMargin<f64, F64Margin> for Spec<'_, f64, R>
where R: FailingStrategy,

Source§

fn is_close_to_with_margin( self, expected: f64, margin: impl Into<F64Margin>, ) -> Self

Verifies that the actual value is approximately equal to the expected value. Read more
Source§

fn is_not_close_to_with_margin( self, expected: f64, margin: impl Into<F64Margin>, ) -> Self

Verifies that the actual value not approximately equal to the expected value. Read more
Source§

impl<'a, S, T, E, R> AssertIteratorContains<'a, Vec<T>, E, R> for Spec<'a, S, R>
where S: IntoIterator<Item = T>, T: PartialEq<E> + Debug, E: Debug, R: FailingStrategy,

Source§

fn contains(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains the expected value.
Source§

impl<'a, S, T, E, R> AssertIteratorContainsInAnyOrder<'a, Vec<T>, E, R> for Spec<'a, S, R>
where S: IntoIterator<Item = T>, T: PartialEq<<E as IntoIterator>::Item> + Debug, E: IntoIterator, <E as IntoIterator>::Item: Debug, R: FailingStrategy,

Source§

fn contains_exactly_in_any_order(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains exactly the given values and nothing else in any order.
Source§

fn contains_any_of(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains at least one of the given values.
Source§

fn contains_all_of(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains the given values in any order. Read more
Source§

fn contains_only(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains only the given values and nothing else in any order and ignoring duplicates. Read more
Source§

fn contains_only_once(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains only the given values in any order and each of them only once. Read more
Source§

impl<'a, S, T, E, R> AssertIteratorContainsInOrder<'a, Vec<T>, E, R> for Spec<'a, S, R>

Source§

fn contains_exactly(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains exactly the given values and nothing else in the given order.
Source§

fn contains_sequence(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains the given sequence of values in the given order and without extra values between the sequence values. Read more
Source§

fn contains_all_in_order(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains all the given values and in the given order, possibly with other values between them.
Source§

fn starts_with(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains the given values as the first elements in order.
Source§

fn ends_with(self, expected: E) -> Spec<'a, Vec<T>, R>

Verifies that the actual collection/iterator contains the given values as the last elements in order.
Source§

impl<S, R> AssertOption for Spec<'_, Option<S>, R>
where S: Debug, R: FailingStrategy,

Source§

fn is_some(self) -> Self

Verifies that the subject has some value.
Source§

fn is_none(self) -> Self

Verifies that the subject has no value.
Source§

impl<'a, T, R> AssertOptionValue<'a, T, R> for Spec<'a, Option<T>, R>
where R: FailingStrategy,

Source§

fn some(self) -> Spec<'a, T, R>

Maps the subject to the option’s value if it has some. Otherwise, this assertion fails.
Source§

impl<S, E, R> AssertOrder<E> for Spec<'_, S, R>
where S: PartialOrd<E> + Debug, E: Debug, R: FailingStrategy,

Source§

fn is_less_than(self, expected: E) -> Self

Verifies that the subject is less than some expected value.
Source§

fn is_greater_than(self, expected: E) -> Self

Verifies that the subject is greater than some expected value.
Source§

fn is_at_most(self, expected: E) -> Self

Verifies that the subject is less than or equal to some expected value.
Source§

fn is_at_least(self, expected: E) -> Self

Verifies that the subject is greater than or equal to some expected value.
Source§

impl<T, E, R> AssertResult for Spec<'_, Result<T, E>, R>
where T: Debug, E: Debug, R: FailingStrategy,

Source§

fn is_ok(self) -> Self

Verifies that the subject has an ok value.
Source§

fn is_err(self) -> Self

Verifies that the subject has an err value.
Source§

impl<'a, T, E, R> AssertResultValue<'a, T, E, R> for Spec<'a, Result<T, E>, R>
where T: Debug, E: Debug,

Source§

fn ok(self) -> Spec<'a, T, R>

Maps the subject to the result’s ok value. Read more
Source§

fn err(self) -> Spec<'a, E, R>

Maps the subject to the result’s err value. Read more
Source§

impl<'a, S, R> AssertStringContainsAnyOf<&'a [char]> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains_any_of(self, expected: &'a [char]) -> Self

Verifies that a string contains any char from a collection of chars. Read more
Source§

impl<'a, S, R, const N: usize> AssertStringContainsAnyOf<&'a [char; N]> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains_any_of(self, expected: &'a [char; N]) -> Self

Verifies that a string contains any char from a collection of chars. Read more
Source§

impl<'a, S, R, const N: usize> AssertStringContainsAnyOf<[char; N]> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains_any_of(self, expected: [char; N]) -> Self

Verifies that a string contains any char from a collection of chars. Read more
Source§

impl<'a, S, R> AssertStringPattern<&'a str> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains(self, pattern: &'a str) -> Self

Verifies that a string contains a substring or character. Read more
Source§

fn starts_with(self, pattern: &str) -> Self

Verifies that a string starts with a substring or character. Read more
Source§

fn ends_with(self, pattern: &str) -> Self

Verifies that a string ends with a substring or character. Read more
Source§

impl<'a, S, R> AssertStringPattern<String> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains(self, pattern: String) -> Self

Verifies that a string contains a substring or character. Read more
Source§

fn starts_with(self, pattern: String) -> Self

Verifies that a string starts with a substring or character. Read more
Source§

fn ends_with(self, pattern: String) -> Self

Verifies that a string ends with a substring or character. Read more
Source§

impl<'a, S, R> AssertStringPattern<char> for Spec<'a, S, R>
where S: 'a + AsRef<str> + Debug, R: FailingStrategy,

Source§

fn contains(self, expected: char) -> Self

Verifies that a string contains a substring or character. Read more
Source§

fn starts_with(self, expected: char) -> Self

Verifies that a string starts with a substring or character. Read more
Source§

fn ends_with(self, pattern: char) -> Self

Verifies that a string ends with a substring or character. Read more

Auto Trait Implementations§

§

impl<'a, S, R> Freeze for Spec<'a, S, R>
where S: Freeze, R: Freeze,

§

impl<'a, S, R> RefUnwindSafe for Spec<'a, S, R>

§

impl<'a, S, R> Send for Spec<'a, S, R>
where S: Send, R: Send,

§

impl<'a, S, R> Sync for Spec<'a, S, R>
where S: Sync, R: Sync,

§

impl<'a, S, R> Unpin for Spec<'a, S, R>
where S: Unpin, R: Unpin,

§

impl<'a, S, R> UnwindSafe for Spec<'a, S, R>
where S: UnwindSafe, R: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.