#[macro_use] extern crate log; use log::LogLevel; extern crate peel; use peel::example::prelude::*; use peel::error::ErrorType; extern crate nom; use nom::Needed; use std::error::Error; #[test] fn peel_success_1234() { let mut peel = peel_example(); peel.set_log_level(LogLevel::Trace); let result = peel.traverse(b"1234", vec![]).result; assert_eq!(result.len(), 4); assert_eq!(result[0].downcast_ref::(), Some(&Parser1Result)); assert_eq!(result[1].downcast_ref::(), Some(&Parser2Result)); assert_eq!(result[2].downcast_ref::(), Some(&Parser3Result)); assert_eq!(result[3].downcast_ref::(), Some(&Parser4Result)); } #[test] fn peel_success_1334() { let mut peel = peel_example(); peel.set_log_level(LogLevel::Trace); let result = peel.traverse(b"1334", vec![]).result; assert_eq!(result.len(), 4); assert_eq!(result[0].downcast_ref::(), Some(&Parser1Result)); assert_eq!(result[2].downcast_ref::(), Some(&Parser3Result)); assert_eq!(result[2].downcast_ref::(), Some(&Parser3Result)); assert_eq!(result[3].downcast_ref::(), Some(&Parser4Result)); } #[test] fn peel_success_133_incomplete_continue_4() { let mut peel = peel_example(); peel.set_log_level(LogLevel::Trace); let ret = peel.traverse(b"133", vec![]); assert_eq!(ret.result.len(), 3); assert!(ret.left_input.is_empty()); assert!(ret.error.is_some()); let ret = peel.continue_traverse(b"34", vec![]); assert_eq!(ret.result.len(), 2); assert!(ret.left_input.is_empty()); assert!(ret.error.is_none()); } #[test] fn peel_success_incomplete() { let mut peel = peel_example(); peel.set_log_level(LogLevel::Trace); let peel_result = peel.traverse(b"", vec![]); info!("{:?}", peel_result); let error = peel_result.error.unwrap(); let res = peel_result.result; if let ErrorType::Incomplete(needed) = error.code { assert_eq!(needed, Needed::Size(1)); assert!(res.is_empty()); let result = peel.continue_traverse(b"1234", res).result; assert_eq!(result.len(), 4); } else { unreachable!(); } } #[test] fn peel_success_link() { let mut peel: Peel<()> = Peel::new(); let p1 = peel.new_parser(Parser1); let p2 = peel.new_parser(Parser2); peel.link(p1, p2); assert_eq!(peel.graph.node_indices().count(), 2); } #[test] fn peel_success_link_new_parser() { let mut peel: Peel<()> = Peel::new(); let p1 = peel.new_parser(Parser1); peel.link_new_parser(p1, Parser2); assert_eq!(peel.graph.node_indices().count(), 2); } #[test] fn peel_success_dot() { let mut peel = peel_example(); assert!(peel.create_dot_file().is_ok()); } #[test] fn peel_success_parser1() { let mut parser = Parser1; let result = parser.parse(b"1", None, None).unwrap().1; assert_eq!(result.downcast_ref::(), Some(&Parser1Result)); } #[test] fn peel_success_remove() { let mut peel = peel_example(); let count = peel.graph.node_indices().count(); let last_node = peel.graph.node_indices().last().unwrap(); assert!(peel.remove(last_node).is_some()); assert_eq!(peel.graph.node_indices().count(), count - 1); } #[test] fn peel_failure_no_tree_root() { let mut peel: Peel<()> = Peel::new(); let error = peel.traverse(b"TEST", vec![]).error.unwrap(); assert_eq!(error.code, ErrorType::NoTreeRoot); } #[test] fn peel_failure_no_parser_succeed() { let mut peel = peel_example(); peel.set_log_level(LogLevel::Trace); let error = peel.traverse(b"888", vec![]).error.unwrap(); println!("{:?}", error); println!("{}", error.description()); }