diff --git a/src/schema.rs b/src/schema.rs index 8e10697..dab238d 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -149,7 +149,6 @@ where } } -/* #[cfg(test)] mod test { use std::cell::RefCell; @@ -166,11 +165,7 @@ mod test { Error(()), } - impl Error for DummySymbolError { - fn description(&self) -> &str { - return "Description"; - } - } + impl Error for DummySymbolError {} impl fmt::Display for DummySymbolError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { @@ -179,28 +174,39 @@ mod test { } #[derive(Debug)] - struct DummySymbol<'a> { - _execute: &'a dyn Fn() -> Result<(), Box>, - _target_reached: &'a dyn Fn() -> Result>, + struct DummySymbol { + _target_reached: RefCell, + _execute: RefCell, } - impl<'b> Symbol for DummySymbol<'b> { + impl< + E: Iterator>>, + T: Iterator>>, + > Symbol for DummySymbol + { fn target_reached(&self) -> Result> { - (self._target_reached)() + self._target_reached.borrow_mut().next().unwrap() } fn execute(&self) -> Result<(), Box> { - (self._execute)() + self._execute.borrow_mut().next().unwrap() } } - impl<'a> DummySymbol<'a> { - fn new( - target_reached: &'a dyn Fn() -> Result>, - execute: &'a dyn Fn() -> Result<(), Box>, - ) -> DummySymbol<'a> { - DummySymbol { - _target_reached: target_reached, - _execute: execute, + impl< + E: Iterator>>, + T: Iterator>>, + > DummySymbol + { + fn new< + IE: IntoIterator>>, + IT: IntoIterator>>, + >( + target_reached: IT, + execute: IE, + ) -> Self { + Self { + _target_reached: RefCell::new(target_reached.into_iter()), + _execute: RefCell::new(execute.into_iter()), } } } @@ -217,44 +223,37 @@ mod test { impl Logger for DummyLogger { fn write(&mut self, line: &str) { - self.log.push(From::from(line)); + self.log.push(line.into()); } fn debug(&mut self, line: &str) { - self.log.push(From::from(line)); + self.log.push(line.into()); } } #[test] fn nothing_needed_to_be_done() { let result = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(true), &|| Ok(()))); + .run_symbol(&DummySymbol::new(vec![Ok(true)], vec![Ok(())]), false); assert!(result.is_ok()); } #[test] fn everything_is_ok() { - let first = RefCell::new(true); - let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol(&DummySymbol::new( - &|| { - let mut _first = first.borrow_mut(); - Ok(if *_first { - *_first = false; - true - } else { - false - }) - }, - &|| Ok(()), - )); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol( + &DummySymbol::new(vec![Ok(true), Ok(false)], vec![Ok(())]), + false, + ); assert!(result.is_ok()); } #[test] fn executing_did_not_change_state() { - let result = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(false), &|| Ok(()))); + let result = InitializingSymbolRunner::new(DummyLogger::new()).run_symbol( + &DummySymbol::new(vec![Ok(false), Ok(false)], vec![Ok(())]), + false, + ); assert_eq!( - result.unwrap_err().description(), + result.unwrap_err().to_string(), "Target not reached after executing symbol" ); } @@ -262,11 +261,14 @@ mod test { #[test] fn executing_did_not_work() { let err = InitializingSymbolRunner::new(DummyLogger::new()) - .run_symbol(&DummySymbol::new(&|| Ok(false), &|| { - Err(Box::new(DummySymbolError::Error(()))) - })) + .run_symbol( + &DummySymbol::new( + vec![Ok(false)], + vec![Err(Box::new(DummySymbolError::Error(())) as Box)], + ), + false, + ) .unwrap_err(); - assert_eq!(err.description(), "Description"); + assert_eq!(err.to_string(), "Dummy symbol error"); } } -*/