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) ]