Diffstat (limited to 'tests/builder_value.rs')
-rw-r--r--tests/builder_value.rs47
1 files changed, 45 insertions, 2 deletions
diff --git a/tests/builder_value.rs b/tests/builder_value.rs
index 92f3450..9f52252 100644
--- a/tests/builder_value.rs
+++ b/tests/builder_value.rs
@@ -1,7 +1,8 @@
mod common;
+use common::walker::MockWalker;
use treaty::{
- any::OwnedStatic,
+ any::{BorrowedStatic, OwnedStatic, TempBorrowedStatic},
effect::blocking::Blocking,
protocol::{
visitor::{request_hint, ValueProto},
@@ -10,7 +11,7 @@ use treaty::{
BuildExt as _, Builder as _, Flow,
};
-use crate::common::protocol::hint::MockHintWalker;
+use crate::common::protocol::{hint::MockHintWalker, value::ValueVisitorExt as _};
#[test]
fn value_builder_gives_value_protocol_as_hint() {
@@ -36,3 +37,45 @@ fn value_builder_gives_value_protocol_as_hint() {
// The builder should have the value.
assert_eq!(builder.build().value().unwrap(), 42);
}
+
+#[test]
+fn value_builder_can_use_an_owned_value_or_a_borrowed_value() {
+ assert_eq!(
+ i32::build({
+ let mut walker = MockWalker::<(), ()>::new();
+ walker.expect_walk().once().returning(|visitor| {
+ visitor.visit_value_and_done(OwnedStatic(1));
+ Ok(())
+ });
+ walker
+ })
+ .unwrap(),
+ 1
+ );
+
+ assert_eq!(
+ i32::build({
+ let mut walker = MockWalker::<(), ()>::new();
+ walker.expect_walk().once().returning(|visitor| {
+ visitor.visit_value_and_done(BorrowedStatic(&2));
+ Ok(())
+ });
+ walker
+ })
+ .unwrap(),
+ 2
+ );
+
+ assert_eq!(
+ i32::build({
+ let mut walker = MockWalker::<(), ()>::new();
+ walker.expect_walk().once().returning(|visitor| {
+ visitor.visit_value_and_done(TempBorrowedStatic(&3));
+ Ok(())
+ });
+ walker
+ })
+ .unwrap(),
+ 3
+ );
+}