use chore::*; use regex::Regex; #[test] fn general() -> Result<()> { let ansii_color = Regex::new("\x1b\\[[0-9;]*m").unwrap(); for (args, tasks, expect) in &[ ( vec!["list"], concat!( "(M) 2001-02-03 @home +chore add tests\n", "(Z) foo | bar\n", "add task due:2002-03-04T05:06:07\n", "x 2001-02-03 (H) 2001-01-02 @work issue:123\n", ), concat!( "1 (M) 2001-02-03 @home +chore add tests\n", "2 (Z) foo | bar\n", "3 add task due:2002-03-04T05:06:07\n", "4 x 2001-02-03 (H) 2001-01-02 @work issue:123\n", ), ), ( vec!["modify", "pri:A"], concat!( "(M) 2001-02-03 @home +chore add tests\n", ), concat!( "DEL (M) 2001-02-03 @home +chore add tests\n", "ADD (A) 2001-02-03 @home +chore add tests\n", ), ), ( vec!["delete"], concat!( "(M) 2001-02-03 @home +chore add tests\n", ), concat!( "DEL (M) 2001-02-03 @home +chore add tests\n", ), ), ] { let config = Config { now: chrono::NaiveDate::from_ymd(2001, 2, 3).and_hms(4, 5, 6), args: args.iter().map(|s| s.to_string()).collect(), tasks: Some(tasks.to_string()), date_keys: Some("due:\nscheduled:\nwait:\nuntil:\n".to_owned()), print_color: true, ..Default::default() }; match chore::run(config)? { Output::JustPrint { stdout } => { let stdout = ansii_color.split(&stdout).collect::>().join(""); assert_eq!(&stdout, expect) } Output::WriteFiles { stdout, .. } => { let stdout = ansii_color.split(&stdout).collect::>().join(""); assert_eq!(&stdout, expect) } } } Ok(()) }