Diffstat (limited to 'tests/common/protocol/recoverable.rs')
| -rw-r--r-- | tests/common/protocol/recoverable.rs | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/tests/common/protocol/recoverable.rs b/tests/common/protocol/recoverable.rs index c338b09..378e215 100644 --- a/tests/common/protocol/recoverable.rs +++ b/tests/common/protocol/recoverable.rs @@ -1,17 +1,14 @@ use mockall::mock; use treaty::{ any::{any_trait, TypeName}, - effect::{Effect, Effective, ErasedEffective}, - protocol::{ - visitor::{DynRecoverableScope, Recoverable, RecoverableProto, RecoverableScope}, - DynWalker, - }, + effect::{blocking::Blocking, Effect, Effective, ErasedEffective}, protocol::{ visitor::{ - DynSequenceScope, RequestHint, RequestHintProto, Sequence, SequenceProto, - SequenceScope, Value, ValueProto, VisitResult, + visit_recoverable, visit_sequence, DynRecoverableScope, DynSequenceScope, Recoverable, + RecoverableProto, RecoverableScope, RequestHint, RequestHintProto, Sequence, + SequenceProto, SequenceScope, Value, ValueProto, VisitResult, }, - DynVisitor, + AsVisitor, DynVisitor, DynWalker, }, Flow, Status, }; @@ -52,3 +49,21 @@ impl<'ctx, E: Effect> RecoverableScope<'ctx, E> for MockRecoverableScopeVisitor< E::ready(self.new_walk(visitor)) } } + +pub trait RecoverableVisitorExt<'ctx> { + fn visit_recoverable_and_done<'a>(&'a mut self, scope: DynRecoverableScope<'a, 'ctx, Blocking>); +} + +impl<'ctx, T> RecoverableVisitorExt<'ctx> for T +where + T: AsVisitor<'ctx>, +{ + fn visit_recoverable_and_done<'a>( + &'a mut self, + scope: DynRecoverableScope<'a, 'ctx, Blocking>, + ) { + let result = visit_recoverable(self.as_visitor(), scope).value(); + + assert_eq!(result, VisitResult::Control(Flow::Done)); + } +} |