use mercurius::*; use std::cell::RefCell; use std::iter::once; use std::rc::Rc; macro_rules! assert_events { ($iter:expr, $( $event:expr), *) => { $( assert_eq!($iter.next(), Some($event)); )* assert_eq!($iter.next(), None); }; } #[test] fn link() { let mut iter = Raw::new(Rc::new(RefCell::new(None)).into(), once(())) .after(|&e| e == (), |_| once(())) .iter(once(())) .iter(once(())) .link(Raw::new(Rc::new(RefCell::new(None)).into(), once(())).iter(once(()))); assert_events!(iter, (), (), (), (), (), ()); } #[test] fn inspect() -> Result<()> { let mut fm = Rc::new(RefCell::new(None)); let mut iter = Raw::new(Rc::new(RefCell::new(Some(FrontMatter { title: "Foo".into(), create_date: ReadableDate::new(2000, 1, 1), ..Default::default() }))).into(), once(())) .after(|&e| e == (), |_| once(())) .iter(once(())) .inspect_frontmatter(&mut fm); assert_events!(iter, (), (), ()); assert_eq!(fm.borrow().as_ref().unwrap().title, "Foo"); Ok(()) }