[
{
"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"
}
]