Diffstat (limited to 'tests/common/protocol/recoverable.rs')
-rw-r--r--tests/common/protocol/recoverable.rs31
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));
+ }
+}