Diffstat (limited to 'tests/protocol_visitor_value.rs')
-rw-r--r--tests/protocol_visitor_value.rs55
1 files changed, 31 insertions, 24 deletions
diff --git a/tests/protocol_visitor_value.rs b/tests/protocol_visitor_value.rs
index ff17fc4..8ca591c 100644
--- a/tests/protocol_visitor_value.rs
+++ b/tests/protocol_visitor_value.rs
@@ -1,19 +1,18 @@
use std::any::TypeId;
use common::protocol::{
- hint::{KnownFactory, MockHintVisitor},
+ hint::{KnownFactory, MockHintWalker},
visitor::MockValueVisitor,
};
use mockall::predicate::eq;
use treaty::{
any::{
- BorrowedStatic, BorrowedStaticHrt, OwnedStatic, TempBorrowedMutStatic,
+ AnyTrait, BorrowedStatic, BorrowedStaticHrt, OwnedStatic, TempBorrowedMutStatic,
TempBorrowedMutStaticHrt, TypeNameId,
},
effect::Blocking,
protocol::{
- visitor::{Value, ValueKnown, ValueProto, VisitResult},
- walker::hint::Hint,
+ visitor::{visit_value, Value, ValueKnown, ValueProto, VisitResult}, walker::hint::Hint, DynVisitor
},
Flow,
};
@@ -33,7 +32,7 @@ fn custom_value_type() {
// Expect the visit method to be called once with the custom type.
mock.expect_visit()
- .once()
+ .times(2)
.with(eq(OwnedStatic(MyValue)))
.return_const(VisitResult::Control(Flow::Done));
@@ -42,10 +41,16 @@ fn custom_value_type() {
let visitor: &mut dyn Value<OwnedStatic<MyValue>, Blocking> = &mut mock;
// Visit the value.
- let result = visitor.visit(OwnedStatic(MyValue)).into_innter();
+ let result = visitor.visit(OwnedStatic(MyValue)).into_inner();
// The mock returns that it is done.
assert_eq!(result, VisitResult::Control(Flow::Done));
+
+ let visitor: &mut (dyn AnyTrait + Send + Sync) = &mut mock;
+ assert_eq!(
+ visit_value::<_, Blocking>(DynVisitor(visitor), OwnedStatic(MyValue)).into_inner(),
+ VisitResult::Control(Flow::Done)
+ );
}
/// Tests that a value with a lifetime can be given to the value protocol.
@@ -67,7 +72,7 @@ fn borrowed_value() {
// Expect the visit method to be called once with the borrowed value.
mock.expect_visit()
- .once()
+ .times(2)
.withf(|BorrowedStatic(value)| *value == "test")
.return_const(VisitResult::Control(Flow::Done));
@@ -76,6 +81,12 @@ fn borrowed_value() {
// Visit the borrowed value.
visitor.visit(BorrowedStatic(value));
+
+ let visitor: &mut (dyn AnyTrait + Send + Sync) = &mut mock;
+ assert_eq!(
+ visit_value::<_, Blocking>(DynVisitor(visitor), BorrowedStatic(value)).into_inner(),
+ VisitResult::Control(Flow::Done)
+ );
}
// Make sure the compiler doesn't do anything funny with the lifetime.
@@ -161,19 +172,19 @@ fn all_visit_results() {
// Visit can return a done.
assert_eq!(
- visitor.visit(OwnedStatic(0)).into_innter(),
+ visitor.visit(OwnedStatic(0)).into_inner(),
VisitResult::Control(Flow::Done)
);
// Visit can return an error signal.
assert_eq!(
- visitor.visit(OwnedStatic(1)).into_innter(),
+ visitor.visit(OwnedStatic(1)).into_inner(),
VisitResult::Control(Flow::Err)
);
// Visit can return a continue.
assert_eq!(
- visitor.visit(OwnedStatic(2)).into_innter(),
+ visitor.visit(OwnedStatic(2)).into_inner(),
VisitResult::Control(Flow::Continue)
);
@@ -181,7 +192,7 @@ fn all_visit_results() {
// This is for runtime visit support checking.
// The value should be given back, but that's not forced.
assert_eq!(
- visitor.visit(OwnedStatic(3)).into_innter(),
+ visitor.visit(OwnedStatic(3)).into_inner(),
VisitResult::Skipped(OwnedStatic(3))
);
}
@@ -205,7 +216,7 @@ fn value_proto() {
#[test]
fn as_hint() {
{
- let mut mock = MockHintVisitor::<ValueProto<OwnedStatic<i32>, Blocking>, Blocking>::new();
+ let mut mock = MockHintWalker::<ValueProto<OwnedStatic<i32>, Blocking>>::new();
mock.expect_known().once().return_const(
(|_, _hint| {
@@ -215,11 +226,11 @@ fn as_hint() {
}) as KnownFactory<ValueProto<OwnedStatic<i32>, Blocking>>,
);
- let walker: &mut dyn Hint<ValueProto<OwnedStatic<i32>, Blocking>, Blocking> = &mut mock;
+ let walker: &mut dyn Hint<ValueProto<OwnedStatic<i32>, Blocking>> = &mut mock;
// The value protocol has no hint data, and it has no known data.
assert_eq!(
- walker.known(&()).into_innter(),
+ walker.known(&()).into_inner(),
Ok(ValueKnown {
preview: Some(&OwnedStatic(42))
})
@@ -227,8 +238,7 @@ fn as_hint() {
}
{
- let mut mock =
- MockHintVisitor::<ValueProto<BorrowedStaticHrt<i32>, Blocking>, Blocking>::new();
+ let mut mock = MockHintWalker::<ValueProto<BorrowedStaticHrt<i32>, Blocking>>::new();
mock.expect_known().once().return_const(
(|_, _hint| {
@@ -238,12 +248,11 @@ fn as_hint() {
}) as KnownFactory<ValueProto<BorrowedStaticHrt<i32>, Blocking>>,
);
- let walker: &mut dyn Hint<ValueProto<BorrowedStaticHrt<i32>, Blocking>, Blocking> =
- &mut mock;
+ let walker: &mut dyn Hint<ValueProto<BorrowedStaticHrt<i32>, Blocking>> = &mut mock;
// The value protocol has no hint data, and it has no known data.
assert_eq!(
- walker.known(&()).into_innter(),
+ walker.known(&()).into_inner(),
Ok(ValueKnown {
preview: Some(&BorrowedStatic(&42))
})
@@ -251,20 +260,18 @@ fn as_hint() {
}
{
- let mut mock =
- MockHintVisitor::<ValueProto<TempBorrowedMutStaticHrt<i32>, Blocking>, Blocking>::new();
+ let mut mock = MockHintWalker::<ValueProto<TempBorrowedMutStaticHrt<i32>, Blocking>>::new();
mock.expect_known().once().return_const(
(|_, _hint| Ok(ValueKnown { preview: None }))
as KnownFactory<ValueProto<TempBorrowedMutStaticHrt<i32>, Blocking>>,
);
- let walker: &mut dyn Hint<ValueProto<TempBorrowedMutStaticHrt<i32>, Blocking>, Blocking> =
- &mut mock;
+ let walker: &mut dyn Hint<ValueProto<TempBorrowedMutStaticHrt<i32>, Blocking>> = &mut mock;
// The value protocol has no hint data, and it has no known data.
assert_eq!(
- walker.known(&()).into_innter(),
+ walker.known(&()).into_inner(),
Ok(ValueKnown { preview: None })
);
}