From e7d59e87a9be1a528ecb4d7f4122a308a955ddda Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Nov 2017 12:31:13 +0100 Subject: Fix date() parser fn --- src/parser.rs | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 2cbf046..04e58e8 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -277,8 +277,10 @@ impl Into for ExactDate { } named!(date, do_parse!( - exact:exact_date_parser >> - o: opt!(do_parse!(sp >> op:operator_parser >> a:amount_expr >> (op, a))) >> + exact: exact_date_parser >> + o: opt!( + complete!(do_parse!(sp >> op:operator_parser >> sp >> a:amount_expr >> (op, a))) + ) >> (Date(exact, o)) )); @@ -511,6 +513,61 @@ mod tests { }; } + #[test] + fn test_simple_date_1() { + let res = exact_date_parser(&b"today"[..]); + assert!(res.is_done(), format!("Not done: {:?}", res)); + + let res = date(&b"today"[..]); + assert!(res.is_done(), format!("Not done: {:?}", res)); + } + + #[test] + fn test_simple_date_2() { + let res = date(&b"2017-01-01"[..]); + assert!(res.is_done(), format!("Not done: {:?}", res)); + let (_, o) = res.unwrap(); + + println!("{:#?}", o); + + let calc_res : timetype::TimeType = o.into(); + let calc_res = calc_res.calculate(); + assert!(calc_res.is_ok()); + + let calc_res = calc_res.unwrap(); + println!("{:#?}", calc_res); + + assert_eq!(calc_res.get_moment().unwrap().year() , 2017); + assert_eq!(calc_res.get_moment().unwrap().month() , 01); + assert_eq!(calc_res.get_moment().unwrap().day() , 01); + assert_eq!(calc_res.get_moment().unwrap().hour() , 00); + assert_eq!(calc_res.get_moment().unwrap().minute(), 00); + assert_eq!(calc_res.get_moment().unwrap().second(), 00); + } + + #[test] + fn test_simple_date_3() { + let res = date(&b"2017-01-01T01:02:03"[..]); + assert!(res.is_done(), format!("Not done: {:?}", res)); + let (_, o) = res.unwrap(); + + println!("{:#?}", o); + + let calc_res : timetype::TimeType = o.into(); + let calc_res = calc_res.calculate(); + assert!(calc_res.is_ok()); + + let calc_res = calc_res.unwrap(); + println!("{:#?}", calc_res); + + assert_eq!(calc_res.get_moment().unwrap().year() , 2017); + assert_eq!(calc_res.get_moment().unwrap().month() , 01); + assert_eq!(calc_res.get_moment().unwrap().day() , 01); + assert_eq!(calc_res.get_moment().unwrap().hour() , 01); + assert_eq!(calc_res.get_moment().unwrap().minute(), 02); + assert_eq!(calc_res.get_moment().unwrap().second(), 03); + } + #[test] fn test_expressions_to_date() { let res = amount_expr(&b"5min + 12min"[..]); -- cgit v1.2.3