[ { "name": "mid-October is autumn term of 2025/26", "args": [ "2025-10-15", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": "autumn", "termStart": "2025-09-03", "termEnd": "2025-12-19" } }, { "name": "1 September starts the year, but term has not begun", "args": [ "2025-09-01", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "31 August is the last day of the previous year", "args": [ "2025-08-31", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2024/25", "start": "2024-09-01", "end": "2025-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "Christmas is in the year but in no term", "args": [ "2025-12-25", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "a term's last day is inside it", "args": [ "2025-12-19", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": "autumn", "termStart": "2025-09-03", "termEnd": "2025-12-19" } }, { "name": "a term's first day is inside it", "args": [ "2026-04-13", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": "summer", "termStart": "2026-04-13", "termEnd": "2026-07-22" } }, { "name": "the summer holiday after the last term", "args": [ "2026-08-15", null, [ { "name": "summer", "start": "2026-04-13", "end": "2026-07-22" }, { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "spring", "start": "2026-01-05", "end": "2026-03-27" } ] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "no terms given", "args": [ "2026-02-01", null, [] ], "expect": { "label": "2025/26", "start": "2025-09-01", "end": "2026-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "an August start", "args": [ "2025-08-01", "08-01", [] ], "expect": { "label": "2025/26", "start": "2025-08-01", "end": "2026-07-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "the day before an August start", "args": [ "2025-07-31", "08-01", [] ], "expect": { "label": "2024/25", "start": "2024-08-01", "end": "2025-07-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "a 1 January start is one calendar year", "args": [ "2026-06-30", "01-01", [] ], "expect": { "label": "2026", "start": "2026-01-01", "end": "2026-12-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "the century turns in the label", "args": [ "1999-12-01", null, [] ], "expect": { "label": "1999/00", "start": "1999-09-01", "end": "2000-08-31", "term": null, "termStart": null, "termEnd": null } }, { "name": "a 1 March start ends on 29 February in a leap year", "args": [ "2024-02-29", "03-01", [] ], "expect": { "label": "2023/24", "start": "2023-03-01", "end": "2024-02-29", "term": null, "termStart": null, "termEnd": null } }, { "name": "and on 28 February otherwise", "args": [ "2025-02-28", "03-01", [] ], "expect": { "label": "2024/25", "start": "2024-03-01", "end": "2025-02-28", "term": null, "termStart": null, "termEnd": null } }, { "name": "a term outside the year is still found by date", "args": [ "2025-09-25", "10-01", [ { "name": "welcome week", "start": "2025-09-22", "end": "2025-09-26" } ] ], "expect": { "label": "2024/25", "start": "2024-10-01", "end": "2025-09-30", "term": "welcome week", "termStart": "2025-09-22", "termEnd": "2025-09-26" } }, { "name": "29 February is not a day every year has", "args": [ "2025-10-15", "02-29", [] ], "expectError": "yearStart must be MM-DD on a day every year has, received \"02-29\"" }, { "name": "a thirteenth month is an error", "args": [ "2025-10-15", "13-01", [] ], "expectError": "yearStart must be MM-DD on a day every year has, received \"13-01\"" }, { "name": "an unpadded yearStart is an error", "args": [ "2025-10-15", "9-1", [] ], "expectError": "yearStart must be MM-DD on a day every year has, received \"9-1\"" }, { "name": "a term ending before it starts is an error", "args": [ "2025-10-15", null, [ { "name": "autumn", "start": "2025-12-19", "end": "2025-09-03" } ] ], "expectError": "term autumn ends (2025-09-03) before it starts (2025-12-19)" }, { "name": "overlapping terms are an error", "args": [ "2025-10-15", null, [ { "name": "autumn", "start": "2025-09-03", "end": "2025-12-19" }, { "name": "winter", "start": "2025-12-19", "end": "2026-03-27" } ] ], "expectError": "terms autumn and winter overlap" }, { "name": "an impossible date is an error", "args": [ "2025-02-30", null, [] ], "expectError": "\"2025-02-30\" is not a real calendar date" } ]