Sequence

Struct Sequence 

Source
pub struct Sequence { /* private fields */ }
Expand description

Used to enforce that mock calls must happen in the sequence specified.

Sequences are performed greedily, and will try to use the earliest possible match.

§Examples

#[automock]
trait Foo {
    fn foo(&self);
    fn bar(&self) -> u32;
}
let mut seq = Sequence::new();

let mut mock0 = MockFoo::new();
let mut mock1 = MockFoo::new();

mock0.expect_foo()
    .times(1)
    .returning(|| ())
    .in_sequence(&mut seq);

mock1.expect_bar()
    .times(1)
    .returning(|| 42)
    .in_sequence(&mut seq);

mock0.foo();
mock1.bar();

The count is allowed to vary.

#[automock]
trait Foo {
    fn foo(&self);
    fn bar(&self) -> u32;
}
let mut seq = Sequence::new();

let mut mock0 = MockFoo::new();
let mut mock1 = MockFoo::new();

mock0.expect_foo()
    .times(1..4)
    .returning(|| ())
    .in_sequence(&mut seq);

mock1.expect_bar()
    .times(1)
    .returning(|| 42)
    .in_sequence(&mut seq);

mock0.foo();
mock0.foo();
mock1.bar();

But, the previous count must be satisfied before a sequence may make progress.

#[automock]
trait Foo {
    fn foo(&self);
    fn bar(&self) -> u32;
}
let mut seq = Sequence::new();

let mut mock0 = MockFoo::new();
let mut mock1 = MockFoo::new();

mock0.expect_foo()
    .times(3..5)
    .returning(|| ())
    .in_sequence(&mut seq);

mock1.expect_bar()
    .times(1)
    .returning(|| 42)
    .in_sequence(&mut seq);

mock0.foo();
mock0.foo();
mock1.bar();

Furthermore, sequences are greedy, and will only perform the earliest element in sequence that is allowed. This results in the following example failing the second expectation, as the first expectation is used for both calls to foo.

The following example fails as the first expection handles all calls, leaving none for the second expectation. As the second expectation goes unused, while it is expected to be called at least once, the test panics with MockFoo::foo: Expectation(<anything>) called 0 time(s) which is fewer than expected 1.

#[automock]
trait Foo {
    fn foo(&self);
    fn bar(&self) -> u32;
}
let mut seq = Sequence::new();

let mut mock0 = MockFoo::new();

mock0.expect_foo()
    .returning(|| ())
    .in_sequence(&mut seq);

mock0.expect_foo()
    .times(1..)
    .returning(|| ())
    .in_sequence(&mut seq);

mock0.foo();
mock0.foo();

Implementations§

Source§

impl Sequence

Source

pub fn new() -> Self

Create a new empty Sequence

Trait Implementations§

Source§

impl Default for Sequence

Source§

fn default() -> Sequence

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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> Any for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Source§

fn type_name(&self) -> &'static str

Source§

impl<T> AnySync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

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.