summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2017-11-19 12:31:13 +0100
committerMatthias Beyer <mail@beyermatthias.de>2017-11-19 13:45:00 +0100
commite7d59e87a9be1a528ecb4d7f4122a308a955ddda (patch)
tree8fcd6af3ce7e4b9861fc93aea53b8a405ec4b25c
parent8222ca0769259c73da0d77793f68d14fafa3300f (diff)
Fix date() parser fn
-rw-r--r--src/parser.rs61
1 files 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<timetype::TimeType> for ExactDate {
}
named!(date<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))
));
@@ -512,6 +514,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"[..]);
assert!(res.is_done());