Command-line and Emacs Calendar Client
1(* Test the Date module *) 2 3open Caledonia_lib 4 5(* Setup a fixed date for testing *) 6let fixed_date = Option.get @@ Ptime.of_date_time ((2025, 3, 27), ((0, 0, 0), 0)) 7 8let setup_fixed_date () = 9 (Date.get_today := fun ?tz:_ () -> fixed_date); 10 fixed_date 11 12let test_parse_date () = 13 let test_expr expr parameter expected = 14 try 15 let result = Result.get_ok @@ Date.parse_date expr parameter in 16 let result_str = 17 let y, m, d = Ptime.to_date result in 18 Printf.sprintf "%04d-%02d-%02d" y m d 19 in 20 Alcotest.(check string) 21 (Printf.sprintf "'%s' %s should parse to '%s'" expr 22 (match parameter with `From -> "from" | `To -> "to") 23 expected) 24 expected result_str 25 with Failure msg -> 26 Alcotest.fail (Printf.sprintf "Failed to parse '%s': %s" expr msg) 27 in 28 test_expr "today" `From "2025-03-27"; 29 test_expr "today" `To "2025-03-27"; 30 test_expr "tomorrow" `From "2025-03-28"; 31 test_expr "tomorrow" `To "2025-03-28"; 32 test_expr "yesterday" `From "2025-03-26"; 33 test_expr "yesterday" `To "2025-03-26"; 34 test_expr "this-week" `From "2025-03-24"; 35 test_expr "this-week" `To "2025-03-30"; 36 test_expr "next-week" `From "2025-03-31"; 37 test_expr "next-week" `To "2025-04-06"; 38 test_expr "this-month" `From "2025-03-01"; 39 test_expr "this-month" `To "2025-03-31"; 40 test_expr "next-month" `From "2025-04-01"; 41 test_expr "next-month" `To "2025-04-30"; 42 test_expr "+7d" `From "2025-04-03"; 43 test_expr "+7d" `To "2025-04-03"; 44 test_expr "-7d" `From "2025-03-20"; 45 test_expr "-7d" `To "2025-03-20"; 46 test_expr "+2w" `From "2025-04-07"; 47 test_expr "+2w" `To "2025-04-13"; 48 test_expr "+1m" `From "2025-04-01"; 49 test_expr "+1m" `To "2025-04-30"; 50 test_expr "2025-01-01" `From "2025-01-01"; 51 test_expr "2025-01-01" `To "2025-01-01"; 52 test_expr "2025-01" `From "2025-01-01"; 53 test_expr "2025-01" `To "2025-01-01"; 54 test_expr "2025" `From "2025-01-01"; 55 test_expr "2025" `To "2025-01-01"; 56 test_expr "2025-3-1" `From "2025-03-01"; 57 test_expr "2025-3-1" `To "2025-03-01"; 58 (try 59 let _ = Result.get_ok @@ Date.parse_date "invalid-format" `From in 60 Alcotest.fail "Should have raised an exception for invalid format" 61 with Failure msg -> 62 Alcotest.(check bool) 63 "Invalid format should raise exception with appropriate message" true 64 (String.length msg > 0)); 65 () 66 67let date_tests = [ ("date expression parsing", `Quick, test_parse_date) ] 68 69let () = 70 let _ = setup_fixed_date () in 71 Alcotest.run "Query Tests" [ ("query", date_tests) ]