Diffstat (limited to 'tests/builder_value.rs')
| -rw-r--r-- | tests/builder_value.rs | 47 |
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 + ); +} |