diff --git a/schemas/iso/datetime/2019/date/calendar-basic.json b/schemas/iso/datetime/2019/date/calendar-basic.json index a61be55f..328f4a77 100644 --- a/schemas/iso/datetime/2019/date/calendar-basic.json +++ b/schemas/iso/datetime/2019/date/calendar-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Calendar Date (Basic Format)", "description": "A complete representation of a calendar date in basic format [YYYY][MM][DD] (§5.2.2.1 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "19850412", "20000101", "20231231", "00000101", "99991231" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], diff --git a/schemas/iso/datetime/2019/date/calendar-expanded-basic.json b/schemas/iso/datetime/2019/date/calendar-expanded-basic.json index b8494cd3..96218ab4 100644 --- a/schemas/iso/datetime/2019/date/calendar-expanded-basic.json +++ b/schemas/iso/datetime/2019/date/calendar-expanded-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Calendar Date Expanded (Basic Format)", "description": "An expanded representation of a calendar date in basic format [±][YYYYYY][MM][DD] with six digits for the year (§5.2.2.3 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "+0019850412", "-0000010101", diff --git a/schemas/iso/datetime/2019/date/calendar-expanded-extended.json b/schemas/iso/datetime/2019/date/calendar-expanded-extended.json index 639e3a20..848039ac 100644 --- a/schemas/iso/datetime/2019/date/calendar-expanded-extended.json +++ b/schemas/iso/datetime/2019/date/calendar-expanded-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Calendar Date Expanded (Extended Format)", "description": "An expanded representation of a calendar date in extended format [±][YYYYYY][\"-\"][MM][\"-\"][DD] with six digits for the year (§5.2.2.3 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "+001985-04-12", "-000001-01-01", diff --git a/schemas/iso/datetime/2019/date/calendar-extended.json b/schemas/iso/datetime/2019/date/calendar-extended.json index b070c0bd..48518b7a 100644 --- a/schemas/iso/datetime/2019/date/calendar-extended.json +++ b/schemas/iso/datetime/2019/date/calendar-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Calendar Date (Extended Format)", "description": "A complete representation of a calendar date in extended format [YYYY][\"-\"][MM][\"-\"][DD] (§5.2.2.1 b)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "1985-04-12", "2000-01-01", diff --git a/schemas/iso/datetime/2019/date/week-basic.json b/schemas/iso/datetime/2019/date/week-basic.json index 7be7217b..db606bd4 100644 --- a/schemas/iso/datetime/2019/date/week-basic.json +++ b/schemas/iso/datetime/2019/date/week-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Week Date (Basic Format)", "description": "A complete representation of a week date in basic format [YYYY][\"W\"][WW][D] where WW is the calendar week of year (01-53) and D is the calendar day of week (1-7) (§5.2.4.1 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., whether a year has 53 weeks) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e whether a year has 53 weeks) must be performed by the consumer", "examples": [ "1985W155", "2000W011", "2023W527", "0000W011", "9999W537" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], diff --git a/schemas/iso/datetime/2019/date/week-expanded-basic.json b/schemas/iso/datetime/2019/date/week-expanded-basic.json index 56396f0d..5d464049 100644 --- a/schemas/iso/datetime/2019/date/week-expanded-basic.json +++ b/schemas/iso/datetime/2019/date/week-expanded-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Week Date Expanded (Basic Format)", "description": "An expanded representation of a week date in basic format [±][YYYYYY][\"W\"][WW][D] with six digits for the year, WW as calendar week of year (01-53), and D as calendar day of week (1-7) (§5.2.4.3 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., whether a year has 53 weeks) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e whether a year has 53 weeks) must be performed by the consumer", "examples": [ "+001985W155", "-000001W011", diff --git a/schemas/iso/datetime/2019/date/week-expanded-extended.json b/schemas/iso/datetime/2019/date/week-expanded-extended.json index e68f5cb5..8c731d87 100644 --- a/schemas/iso/datetime/2019/date/week-expanded-extended.json +++ b/schemas/iso/datetime/2019/date/week-expanded-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Week Date Expanded (Extended Format)", "description": "An expanded representation of a week date in extended format [±][YYYYYY][\"-\"][\"W\"][WW][\"-\"][D] with six digits for the year, WW as calendar week of year (01-53), and D as calendar day of week (1-7) (§5.2.4.3 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., whether a year has 53 weeks) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e whether a year has 53 weeks) must be performed by the consumer", "examples": [ "+001985-W15-5", "-000001-W01-1", diff --git a/schemas/iso/datetime/2019/date/week-extended.json b/schemas/iso/datetime/2019/date/week-extended.json index 56bcafb8..ae9264ed 100644 --- a/schemas/iso/datetime/2019/date/week-extended.json +++ b/schemas/iso/datetime/2019/date/week-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Week Date (Extended Format)", "description": "A complete representation of a week date in extended format [YYYY][\"-\"][\"W\"][WW][\"-\"][D] where WW is the calendar week of year (01-53) and D is the calendar day of week (1-7) (§5.2.4.1 b)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., whether a year has 53 weeks) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e whether a year has 53 weeks) must be performed by the consumer", "examples": [ "1985-W15-5", "2000-W01-1", diff --git a/schemas/iso/datetime/2019/datetime/calendar-basic.json b/schemas/iso/datetime/2019/datetime/calendar-basic.json new file mode 100644 index 00000000..f01ce90f --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-basic.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day (Basic Format)", + "description": "A representation of calendar date combined with complete local time of day in basic format [YYYY][MM][DD][\"T\"][hh][mm][ss] where the time designator \"T\" separates date from time (§5.4.2.1 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "19850412T232050", + "20000101T000000", + "20231215T235959", + "19000301T120000", + "21001231T180000" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-extended.json b/schemas/iso/datetime/2019/datetime/calendar-extended.json new file mode 100644 index 00000000..c6905008 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-extended.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day (Extended Format)", + "description": "A representation of calendar date combined with complete local time of day in extended format [YYYY][\"-\"][MM][\"-\"][DD][\"T\"][hh][\":\"[mm][\":\"[ss] where the time designator \"T\" separates date from time (§5.4.2.1 b)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "1985-04-12T23:20:50", + "2000-01-01T00:00:00", + "2023-12-15T23:59:59", + "1900-03-01T12:00:00", + "2100-12-31T18:00:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-minute-basic.json b/schemas/iso/datetime/2019/datetime/calendar-minute-basic.json new file mode 100644 index 00000000..a63c77f4 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-minute-basic.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Reduced Precision (Basic Format)", + "description": "A representation of calendar date combined with reduced precision local time of day (hour and minute only) in basic format [YYYY][MM][DD][\"T\"][hh][mm] where seconds are omitted (§5.4.3 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "19850412T1015", + "20000101T0000", + "20231215T2359", + "19000301T1200", + "21001231T1800" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3])[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-minute-extended.json b/schemas/iso/datetime/2019/datetime/calendar-minute-extended.json new file mode 100644 index 00000000..d2899dc1 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-minute-extended.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Reduced Precision (Extended Format)", + "description": "A representation of calendar date combined with reduced precision local time of day (hour and minute only) in extended format [YYYY][\"-\"][MM][\"-\"][DD][\"T\"][hh][\":\"[mm] where seconds are omitted (§5.4.3 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "1985-04-12T10:15", + "2000-01-01T00:00", + "2023-12-15T23:59", + "1900-03-01T12:00", + "2100-12-31T18:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3]):[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-shift-basic.json b/schemas/iso/datetime/2019/datetime/calendar-shift-basic.json new file mode 100644 index 00000000..5e20d533 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-shift-basic.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Time Shift (Basic Format)", + "description": "A representation of calendar date combined with complete local time of day and time shift from UTC in basic format [YYYY][MM][DD][\"T\"][hh][mm][ss][±][hh][mm] where the time shift includes hours and minutes (§5.4.2.1 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "19850412T232050+0400", + "20000101T000000-0500", + "20231215T235959+0000", + "19000301T120000+0530", + "21001231T180000-1200" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-0000$" + }, + "pattern": "^([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-shift-extended.json b/schemas/iso/datetime/2019/datetime/calendar-shift-extended.json new file mode 100644 index 00000000..9b11f38b --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-shift-extended.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Time Shift (Extended Format)", + "description": "A representation of calendar date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][MM][\"-\"][DD][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh][\":\"[mm] where the time shift includes hours and minutes (§5.4.2.1 b)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "1985-04-12T23:20:50+04:00", + "2000-01-01T00:00:00-05:00", + "2023-12-15T23:59:59+00:00", + "1900-03-01T12:00:00+05:30", + "2100-12-31T18:00:00-12:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00:00$" + }, + "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3]):[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-shifthour-basic.json b/schemas/iso/datetime/2019/datetime/calendar-shifthour-basic.json new file mode 100644 index 00000000..fc3c598a --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-shifthour-basic.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Hourly Time Shift (Basic Format)", + "description": "A representation of calendar date combined with complete local time of day and time shift from UTC in basic format [YYYY][MM][DD][\"T\"][hh][mm][ss][±][hh] where the time shift includes only hours (§5.4.2.1 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "19850412T232050+04", + "20000101T000000-05", + "20231215T235959+00", + "19000301T120000+05", + "21001231T180000-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-shifthour-extended.json b/schemas/iso/datetime/2019/datetime/calendar-shifthour-extended.json new file mode 100644 index 00000000..3a3b0c67 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-shifthour-extended.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and Local Time of Day with Hourly Time Shift (Extended Format)", + "description": "A representation of calendar date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][MM][\"-\"][DD][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh] where the time shift includes only hours (§5.4.2.1 b)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "1985-04-12T23:20:50+04", + "2000-01-01T00:00:00-05", + "2023-12-15T23:59:59+00", + "1900-03-01T12:00:00+05", + "2100-12-31T18:00:00-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-utc-basic.json b/schemas/iso/datetime/2019/datetime/calendar-utc-basic.json new file mode 100644 index 00000000..c1d060db --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-utc-basic.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and UTC of Day (Basic Format)", + "description": "A representation of calendar date combined with complete UTC of day in basic format [YYYY][MM][DD][\"T\"][hh][mm][ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.1 a)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "19850412T232050Z", + "20000101T000000Z", + "20231215T235959Z", + "19000301T120000Z", + "21001231T235960Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/calendar-utc-extended.json b/schemas/iso/datetime/2019/datetime/calendar-utc-extended.json new file mode 100644 index 00000000..d0a7aa21 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/calendar-utc-extended.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Calendar Date and UTC of Day (Extended Format)", + "description": "A representation of calendar date combined with complete UTC of day in extended format [YYYY][\"-\"][MM][\"-\"][DD][\"T\"][hh][\":\"[mm][\":\"[ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.1 b)", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", + "examples": [ + "1985-04-12T23:20:50Z", + "2000-01-01T00:00:00Z", + "2023-12-15T23:59:59Z", + "1900-03-01T12:00:00Z", + "2100-12-31T23:59:60Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-9]))T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-basic.json b/schemas/iso/datetime/2019/datetime/ordinal-basic.json new file mode 100644 index 00000000..7158c238 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-basic.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day (Basic Format)", + "description": "A representation of ordinal date combined with complete local time of day in basic format [YYYY][DDD][\"T\"][hh][mm][ss] where the time designator \"T\" separates date from time (§5.4.2.2 a)", + "examples": [ + "1985102T232050", + "2000001T000000", + "2023349T235959", + "1900060T120000", + "2100365T180000" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-extended.json b/schemas/iso/datetime/2019/datetime/ordinal-extended.json new file mode 100644 index 00000000..0be497be --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-extended.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day (Extended Format)", + "description": "A representation of ordinal date combined with complete local time of day in extended format [YYYY][\"-\"][DDD][\"T\"][hh][\":\"[mm][\":\"[ss] where the time designator \"T\" separates date from time (§5.4.2.2 b)", + "examples": [ + "1985-102T23:20:50", + "2000-001T00:00:00", + "2023-349T23:59:59", + "1900-060T12:00:00", + "2100-365T18:00:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}-(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-basic.json b/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-basic.json new file mode 100644 index 00000000..57799dde --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-basic.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and UTC of Day with Reduced Precision (Basic Format)", + "description": "A representation of ordinal date combined with reduced precision UTC of day (hour and minute only) in basic format [YYYY][DDD][\"T\"][hh][mm][\"Z\"] where seconds are omitted (§5.4.3 b)", + "examples": [ + "1985102T1015Z", + "2000001T0000Z", + "2023349T2359Z", + "1900060T1200Z", + "2100365T1800Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3])[0-5][0-9]Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-extended.json b/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-extended.json new file mode 100644 index 00000000..c88a8049 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-minute-utc-extended.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and UTC of Day with Reduced Precision (Extended Format)", + "description": "A representation of ordinal date combined with reduced precision UTC of day (hour and minute only) in extended format [YYYY][\"-\"][DDD][\"T\"][hh][\":\"[mm][\"Z\"] where seconds are omitted (§5.4.3 b)", + "examples": [ + "1985-102T10:15Z", + "2000-001T00:00Z", + "2023-349T23:59Z", + "1900-060T12:00Z", + "2100-365T18:00Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}-(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3]):[0-5][0-9]Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-shift-basic.json b/schemas/iso/datetime/2019/datetime/ordinal-shift-basic.json new file mode 100644 index 00000000..ff67ce94 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-shift-basic.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day with Time Shift (Basic Format)", + "description": "A representation of ordinal date combined with complete local time of day and time shift from UTC in basic format [YYYY][DDD][\"T\"][hh][mm][ss][±][hh][mm] where the time shift includes hours and minutes (§5.4.2.2 a)", + "examples": [ + "1985102T232050+0400", + "2000001T000000-0500", + "2023349T235959+0000", + "1900060T120000+0530", + "2100365T180000-1200" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-0000$" + }, + "pattern": "^[0-9]{4}(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-shift-extended.json b/schemas/iso/datetime/2019/datetime/ordinal-shift-extended.json new file mode 100644 index 00000000..8a7929db --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-shift-extended.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day with Time Shift (Extended Format)", + "description": "A representation of ordinal date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][DDD][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh][\":\"[mm] where the time shift includes hours and minutes (§5.4.2.2 b)", + "examples": [ + "1985-102T23:20:50+04:00", + "2000-001T00:00:00-05:00", + "2023-349T23:59:59+00:00", + "1900-060T12:00:00+05:30", + "2100-365T18:00:00-12:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00:00$" + }, + "pattern": "^[0-9]{4}-(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3]):[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-shifthour-basic.json b/schemas/iso/datetime/2019/datetime/ordinal-shifthour-basic.json new file mode 100644 index 00000000..685ba9d3 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-shifthour-basic.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day with Hourly Time Shift (Basic Format)", + "description": "A representation of ordinal date combined with complete local time of day and time shift from UTC in basic format [YYYY][DDD][\"T\"][hh][mm][ss][±][hh] where the time shift includes only hours (§5.4.2.2 a)", + "examples": [ + "1985102T232050+04", + "2000001T000000-05", + "2023349T235959+00", + "1900060T120000+05", + "2100365T180000-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^[0-9]{4}(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-shifthour-extended.json b/schemas/iso/datetime/2019/datetime/ordinal-shifthour-extended.json new file mode 100644 index 00000000..1a2d1e4d --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-shifthour-extended.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and Local Time of Day with Hourly Time Shift (Extended Format)", + "description": "A representation of ordinal date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][DDD][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh] where the time shift includes only hours (§5.4.2.2 b)", + "examples": [ + "1985-102T23:20:50+04", + "2000-001T00:00:00-05", + "2023-349T23:59:59+00", + "1900-060T12:00:00+05", + "2100-365T18:00:00-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^[0-9]{4}-(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-utc-basic.json b/schemas/iso/datetime/2019/datetime/ordinal-utc-basic.json new file mode 100644 index 00000000..58616241 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-utc-basic.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and UTC of Day (Basic Format)", + "description": "A representation of ordinal date combined with complete UTC of day in basic format [YYYY][DDD][\"T\"][hh][mm][ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.2 a)", + "examples": [ + "1985102T232050Z", + "2000001T000000Z", + "2023349T235959Z", + "1900060T120000Z", + "2100365T235960Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/ordinal-utc-extended.json b/schemas/iso/datetime/2019/datetime/ordinal-utc-extended.json new file mode 100644 index 00000000..d8d590da --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/ordinal-utc-extended.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Ordinal Date and UTC of Day (Extended Format)", + "description": "A representation of ordinal date combined with complete UTC of day in extended format [YYYY][\"-\"][DDD][\"T\"][hh][\":\"[mm][\":\"[ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.2 b)", + "examples": [ + "1985-102T23:20:50Z", + "2000-001T00:00:00Z", + "2023-349T23:59:59Z", + "1900-060T12:00:00Z", + "2100-365T23:59:60Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}-(00[1-9]|0[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-basic.json b/schemas/iso/datetime/2019/datetime/week-basic.json new file mode 100644 index 00000000..03a31e06 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-basic.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day (Basic Format)", + "description": "A representation of week date combined with complete local time of day in basic format [YYYY][\"W\"][ww][D][\"T\"][hh][mm][ss] where the time designator \"T\" separates date from time (§5.4.2.3 a)", + "examples": [ + "1985W155T232050", + "2000W011T000000", + "2023W507T235959", + "1900W097T120000", + "2100W527T180000" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}W(0[1-9]|[1-4][0-9]|5[0-3])[1-7]T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-extended.json b/schemas/iso/datetime/2019/datetime/week-extended.json new file mode 100644 index 00000000..6c289f68 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-extended.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day (Extended Format)", + "description": "A representation of week date combined with complete local time of day in extended format [YYYY][\"-\"][\"W\"][ww][\"-\"][D][\"T\"][hh][\":\"[mm][\":\"[ss] where the time designator \"T\" separates date from time (§5.4.2.3 b)", + "examples": [ + "1985-W15-5T23:20:50", + "2000-W01-1T00:00:00", + "2023-W50-7T23:59:59", + "1900-W09-7T12:00:00", + "2100-W52-7T18:00:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])-[1-7]T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-minute-shift-basic.json b/schemas/iso/datetime/2019/datetime/week-minute-shift-basic.json new file mode 100644 index 00000000..16fb32f6 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-minute-shift-basic.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Time Shift and Reduced Precision (Basic Format)", + "description": "A representation of week date combined with reduced precision local time of day (hour and minute only) and time shift from UTC in basic format [YYYY][\"W\"][ww][D][\"T\"][hh][mm][±][hh][mm] where seconds are omitted (§5.4.3 c)", + "examples": [ + "1985W155T1015+0400", + "2000W011T0000-0500", + "2023W507T2359+0000", + "1900W097T1200+0530", + "2100W527T1800-1200" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-0000$" + }, + "pattern": "^[0-9]{4}W(0[1-9]|[1-4][0-9]|5[0-3])[1-7]T([01][0-9]|2[0-3])[0-5][0-9][+-]([01][0-9]|2[0-3])[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-minute-shift-extended.json b/schemas/iso/datetime/2019/datetime/week-minute-shift-extended.json new file mode 100644 index 00000000..f44e74d1 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-minute-shift-extended.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Time Shift and Reduced Precision (Extended Format)", + "description": "A representation of week date combined with reduced precision local time of day (hour and minute only) and time shift from UTC in extended format [YYYY][\"-\"][\"W\"][ww][\"-\"][D][\"T\"][hh][\":\"[mm][±][hh][\":\"[mm] where seconds are omitted (§5.4.3 c)", + "examples": [ + "1985-W15-5T10:15+04:00", + "2000-W01-1T00:00-05:00", + "2023-W50-7T23:59+00:00", + "1900-W09-7T12:00+05:30", + "2100-W52-7T18:00-12:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00:00$" + }, + "pattern": "^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])-[1-7]T([01][0-9]|2[0-3]):[0-5][0-9][+-]([01][0-9]|2[0-3]):[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-shift-basic.json b/schemas/iso/datetime/2019/datetime/week-shift-basic.json new file mode 100644 index 00000000..660657ef --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-shift-basic.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Time Shift (Basic Format)", + "description": "A representation of week date combined with complete local time of day and time shift from UTC in basic format [YYYY][\"W\"][ww][D][\"T\"][hh][mm][ss][±][hh][mm] where the time shift includes hours and minutes (§5.4.2.3 a)", + "examples": [ + "1985W155T232050+0400", + "2000W011T000000-0500", + "2023W507T235959+0000", + "1900W097T120000+0530", + "2100W527T180000-1200" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-0000$" + }, + "pattern": "^[0-9]{4}W(0[1-9]|[1-4][0-9]|5[0-3])[1-7]T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-shift-extended.json b/schemas/iso/datetime/2019/datetime/week-shift-extended.json new file mode 100644 index 00000000..88369a63 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-shift-extended.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Time Shift (Extended Format)", + "description": "A representation of week date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][\"W\"][ww][\"-\"][D][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh][\":\"[mm] where the time shift includes hours and minutes (§5.4.2.3 b)", + "examples": [ + "1985-W15-5T23:20:50+04:00", + "2000-W01-1T00:00:00-05:00", + "2023-W50-7T23:59:59+00:00", + "1900-W09-7T12:00:00+05:30", + "2100-W52-7T18:00:00-12:00" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00:00$" + }, + "pattern": "^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])-[1-7]T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3]):[0-5][0-9]$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-shifthour-basic.json b/schemas/iso/datetime/2019/datetime/week-shifthour-basic.json new file mode 100644 index 00000000..de93daa9 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-shifthour-basic.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Hourly Time Shift (Basic Format)", + "description": "A representation of week date combined with complete local time of day and time shift from UTC in basic format [YYYY][\"W\"][ww][D][\"T\"][hh][mm][ss][±][hh] where the time shift includes only hours (§5.4.2.3 a)", + "examples": [ + "1985W155T232050+04", + "2000W011T000000-05", + "2023W507T235959+00", + "1900W097T120000+05", + "2100W527T180000-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^[0-9]{4}W(0[1-9]|[1-4][0-9]|5[0-3])[1-7]T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-shifthour-extended.json b/schemas/iso/datetime/2019/datetime/week-shifthour-extended.json new file mode 100644 index 00000000..b1f44174 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-shifthour-extended.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and Local Time of Day with Hourly Time Shift (Extended Format)", + "description": "A representation of week date combined with complete local time of day and time shift from UTC in extended format [YYYY][\"-\"][\"W\"][ww][\"-\"][D][\"T\"][hh][\":\"[mm][\":\"[ss][±][hh] where the time shift includes only hours (§5.4.2.3 b)", + "examples": [ + "1985-W15-5T23:20:50+04", + "2000-W01-1T00:00:00-05", + "2023-W50-7T23:59:59+00", + "1900-W09-7T12:00:00+05", + "2100-W52-7T18:00:00-12" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "not": { + "pattern": "-00$" + }, + "pattern": "^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])-[1-7]T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)[+-]([01][0-9]|2[0-3])$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-utc-basic.json b/schemas/iso/datetime/2019/datetime/week-utc-basic.json new file mode 100644 index 00000000..90e3ab40 --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-utc-basic.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and UTC of Day (Basic Format)", + "description": "A representation of week date combined with complete UTC of day in basic format [YYYY][\"W\"][ww][D][\"T\"][hh][mm][ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.3 a)", + "examples": [ + "1985W155T232050Z", + "2000W011T000000Z", + "2023W507T235959Z", + "1900W097T120000Z", + "2100W527T235960Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}W(0[1-9]|[1-4][0-9]|5[0-3])[1-7]T([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/datetime/week-utc-extended.json b/schemas/iso/datetime/2019/datetime/week-utc-extended.json new file mode 100644 index 00000000..d362a11a --- /dev/null +++ b/schemas/iso/datetime/2019/datetime/week-utc-extended.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "ISO 8601-1:2019 Week Date and UTC of Day (Extended Format)", + "description": "A representation of week date combined with complete UTC of day in extended format [YYYY][\"-\"][\"W\"][ww][\"-\"][D][\"T\"][hh][\":\"[mm][\":\"[ss][\"Z\"] where \"Z\" is the UTC designator (§5.4.2.3 b)", + "examples": [ + "1985-W15-5T23:20:50Z", + "2000-W01-1T00:00:00Z", + "2023-W50-7T23:59:59Z", + "1900-W09-7T12:00:00Z", + "2100-W52-7T23:59:60Z" + ], + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "x-links": [ "https://www.iso.org/standard/70907.html" ], + "type": "string", + "pattern": "^[0-9]{4}-W(0[1-9]|[1-4][0-9]|5[0-3])-[1-7]T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$" +} diff --git a/schemas/iso/datetime/2019/duration/calendar-basic.json b/schemas/iso/datetime/2019/duration/calendar-basic.json index 1ba4fc22..13e530c9 100644 --- a/schemas/iso/datetime/2019/duration/calendar-basic.json +++ b/schemas/iso/datetime/2019/duration/calendar-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Duration (Alternative Calendar Basic Format)", "description": "A duration in alternative basic format P[YYYYMMDD]T[HHMMSS] (§5.5.2.4)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "P00020110T223355", "P00010101T000000", "P00001231T235959" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], diff --git a/schemas/iso/datetime/2019/duration/calendar-extended.json b/schemas/iso/datetime/2019/duration/calendar-extended.json index 2eae676f..82107594 100644 --- a/schemas/iso/datetime/2019/duration/calendar-extended.json +++ b/schemas/iso/datetime/2019/duration/calendar-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Duration (Alternative Calendar Extended Format)", "description": "A duration in alternative extended format P[YYYY-MM-DD]T[HH:MM:SS] (§5.5.2.4)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap years for February 29) must be performed by the consumer", + "$comment": "This schema validates day/month combinations (i.e rejects April 31) but does not validate leap years. February 29 is accepted for any year, and leap year validation must be performed by the consumer", "examples": [ "P0002-01-10T22:33:55", "P0001-01-01T00:00:00", diff --git a/schemas/iso/datetime/2019/time/local-day-basic.json b/schemas/iso/datetime/2019/time/local-day-basic.json index 5c30fa51..b37a40a8 100644 --- a/schemas/iso/datetime/2019/time/local-day-basic.json +++ b/schemas/iso/datetime/2019/time/local-day-basic.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Local Time of Day (Basic Format)", "description": "A complete representation of local time of day in basic format [\"T\"][hh][mm][ss] where the time designator \"T\" may be omitted by mutual agreement (§5.3.1.2 a)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap second validity in specific contexts) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e leap second validity in specific contexts) must be performed by the consumer", "examples": [ "T232050", "T000000", "T235960", "T120000", "T010101" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], diff --git a/schemas/iso/datetime/2019/time/local-day-extended.json b/schemas/iso/datetime/2019/time/local-day-extended.json index 87fe39e7..28e7eaba 100644 --- a/schemas/iso/datetime/2019/time/local-day-extended.json +++ b/schemas/iso/datetime/2019/time/local-day-extended.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Local Time of Day (Extended Format)", "description": "A complete representation of local time of day in extended format [hh][:][mm][:][ss] or [\"T\"][hh][:][mm][:][ss] where the time designator \"T\" may be omitted by mutual agreement (§5.3.1.2 b)", - "$comment": "This schema provides syntactic validation only. Semantic validation (e.g., leap second validity in specific contexts) must be performed by the consumer", + "$comment": "This schema provides syntactic validation only. Semantic validation (i.e leap second validity in specific contexts) must be performed by the consumer", "examples": [ "23:20:50", "T23:20:50", diff --git a/schemas/iso/datetime/2019/time/local-day-shift-basic.json b/schemas/iso/datetime/2019/time/local-day-shift-basic.json index 7cfe9551..8ee12423 100644 --- a/schemas/iso/datetime/2019/time/local-day-shift-basic.json +++ b/schemas/iso/datetime/2019/time/local-day-shift-basic.json @@ -13,5 +13,8 @@ "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], "type": "string", + "not": { + "pattern": "-00(?:00)?$" + }, "pattern": "^T?([01][0-9]|2[0-3])[0-5][0-9]([0-5][0-9]|60)(?:Z|[+-](?:[01][0-9]|2[0-3])(?:[0-5][0-9])?)$" } diff --git a/schemas/iso/datetime/2019/time/local-day-shift-extended.json b/schemas/iso/datetime/2019/time/local-day-shift-extended.json index 3bb11f32..73dabd43 100644 --- a/schemas/iso/datetime/2019/time/local-day-shift-extended.json +++ b/schemas/iso/datetime/2019/time/local-day-shift-extended.json @@ -13,5 +13,8 @@ "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], "type": "string", + "not": { + "pattern": "-00(?::00)?$" + }, "pattern": "^T?([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(?:Z|[+-](?:[01][0-9]|2[0-3])(?::[0-5][0-9])?)$" } diff --git a/schemas/iso/datetime/2019/time/shift-basic.json b/schemas/iso/datetime/2019/time/shift-basic.json index 7254f5f1..a9219b2a 100644 --- a/schemas/iso/datetime/2019/time/shift-basic.json +++ b/schemas/iso/datetime/2019/time/shift-basic.json @@ -2,9 +2,12 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "ISO 8601-1:2019 Time Shift from UTC (Basic Format)", "description": "A representation of the time shift between local time scale and UTC in basic format [±][hh][mm] or [±][hh] or Z where Z is the UTC designator representing zero shift (§5.3.4.1)", - "examples": [ "+0100", "-0530", "+00", "-12", "Z", "+1400", "-0000" ], + "examples": [ "+0100", "-0530", "+00", "-12", "Z", "+1400", "+0000" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], "type": "string", + "not": { + "pattern": "^-00(?:00)?$" + }, "pattern": "^(?:Z|[+-](?:[01][0-9]|2[0-3])(?:[0-5][0-9])?)$" } diff --git a/schemas/iso/datetime/2019/time/shift-extended.json b/schemas/iso/datetime/2019/time/shift-extended.json index 7776bc89..3913eecb 100644 --- a/schemas/iso/datetime/2019/time/shift-extended.json +++ b/schemas/iso/datetime/2019/time/shift-extended.json @@ -3,9 +3,12 @@ "title": "ISO 8601-1:2019 Time Shift from UTC (Extended Format)", "description": "A representation of the time shift between local time scale and UTC in extended format [±][hh][:][mm] or Z where Z is the UTC designator representing zero shift (§5.3.4.1)", "$comment": "Extended format is not applicable for hour-only time shifts", - "examples": [ "+01:00", "-05:30", "Z", "+14:00", "-00:00", "+12:45" ], + "examples": [ "+01:00", "-05:30", "Z", "+14:00", "+00:00", "+12:45" ], "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", "x-links": [ "https://www.iso.org/standard/70907.html" ], "type": "string", + "not": { + "pattern": "^-00:00$" + }, "pattern": "^(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])$" } diff --git a/test/iso/datetime/2019/datetime/calendar-basic.test.json b/test/iso/datetime/2019/datetime/calendar-basic.test.json new file mode 100644 index 00000000..bada631d --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-basic.test.json @@ -0,0 +1,431 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50", + "data": "19850412T232050", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00", + "data": "20000101T000000", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60", + "data": "20231231T235960", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00", + "data": "20200229T120000", + "valid": true + }, + { + "description": "Valid - end of year 2023-12-31 23:59:59", + "data": "20231231T235959", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00:00", + "data": "20240101T000000", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45", + "data": "19000315T063045", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30", + "data": "21000820T184530", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "19850412232050", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "19850412t232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format (has hyphens and colons)", + "data": "1985-04-12T23:20:50", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "20230012T120000", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "20231312T120000", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "20239912T120000", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "20230100T120000", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "20230132T120000", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "20230199T120000", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "20230115T240000", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "20230115T250000", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "20230115T990000", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "20230115T126000", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "20230115T129900", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "20230115T120061", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "20230115T120099", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "20230115T000000", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "20230115T230000", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "20230115T120000", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "20230115T125900", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "20230115T120000", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "20230115T120059", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "20230630T235960", + "valid": true + }, + { + "description": "Invalid - too short", + "data": "2023011512000", + "valid": false + }, + { + "description": "Invalid - too long", + "data": "20230115T1200000", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "20230115T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "20230115T120000+0100", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "20230115T120000.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "20230115T1200", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "20230115T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "20230115", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "20230115T120000", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "20231231T120000", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 01 15T12 00 00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "230115T120000", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "20230115T120000X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X20230115T120000", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "00000101T120000", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "99991231T235959", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "20230230T120000", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "20230231T120000", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "20230229T120000", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "20230431T120000", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "20230631T120000", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "20230931T120000", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "20231131T120000", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "20230132T120000", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "20230332T120000", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "20230532T120000", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "20230732T120000", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "20230832T120000", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "20231032T120000", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "20231232T120000", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O230115T120000", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023O115T120000", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "202301O5T120000", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "20230115TO20000", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "20230115T12O000", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "20230115T1200O0", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "20230430T120000", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "20230630T120000", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "20230930T120000", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "20231130T120000", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "20230131T120000", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "20230331T120000", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "20230531T120000", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "20230731T120000", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "20230831T120000", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "20231031T120000", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "20231231T120000", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-extended.test.json b/test/iso/datetime/2019/datetime/calendar-extended.test.json new file mode 100644 index 00000000..08566d42 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-extended.test.json @@ -0,0 +1,441 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50", + "data": "1985-04-12T23:20:50", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00", + "data": "2000-01-01T00:00:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60", + "data": "2023-12-31T23:59:60", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00", + "data": "2020-02-29T12:00:00", + "valid": true + }, + { + "description": "Valid - end of year 2023-12-31 23:59:59", + "data": "2023-12-31T23:59:59", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00:00", + "data": "2024-01-01T00:00:00", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45", + "data": "1900-03-15T06:30:45", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30", + "data": "2100-08-20T18:45:30", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-04-1223:20:50", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-04-12t23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format (no hyphens or colons)", + "data": "19850412T232050", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "2023-00-12T12:00:00", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "2023-13-12T12:00:00", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "2023-99-12T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "2023-01-00T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "2023-01-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "2023-01-99T12:00:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-01-15T24:00:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-01-15T25:00:00", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-01-15T99:00:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-01-15T12:60:00", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-01-15T12:99:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-01-15T12:00:61", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-01-15T12:00:99", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-01-15T00:00:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-01-15T23:00:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-01-15T12:00:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-01-15T12:59:00", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-01-15T12:00:00", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-01-15T12:00:59", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-06-30T23:59:60", + "valid": true + }, + { + "description": "Invalid - missing hyphens in date", + "data": "20230115T12:00:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-01-15T120000", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "2023-01-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023-01-15T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-01-15T12:00:00.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-01-15T12:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-01-15T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-01-15", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "2023-01-15T12:00:00", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "2023-12-31T12:00:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-01-15 T 12:00:00", + "valid": false + }, + { + "description": "Invalid - extra hyphen in date", + "data": "2023--01-15T12:00:00", + "valid": false + }, + { + "description": "Invalid - extra colon in time", + "data": "2023-01-15T12::00:00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-01-15T12:00:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-01-15T12:00:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-01-15T12:00:00", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "0000-01-01T12:00:00", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "9999-12-31T23:59:59", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "2023-02-30T12:00:00", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "2023-02-31T12:00:00", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "2023-02-29T12:00:00", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "2023-04-31T12:00:00", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "2023-06-31T12:00:00", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "2023-09-31T12:00:00", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "2023-11-31T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "2023-01-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "2023-03-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "2023-05-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "2023-07-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "2023-08-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "2023-10-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "2023-12-32T12:00:00", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O23-01-15T12:00:00", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023-O1-15T12:00:00", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "2023-01-O5T12:00:00", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "2023-01-15TO2:00:00", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "2023-01-15T12:O0:00", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "2023-01-15T12:00:O0", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "2023-04-30T12:00:00", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "2023-06-30T12:00:00", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "2023-09-30T12:00:00", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "2023-11-30T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "2023-01-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "2023-03-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "2023-05-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "2023-07-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "2023-08-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "2023-10-31T12:00:00", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "2023-12-31T12:00:00", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-minute-basic.test.json b/test/iso/datetime/2019/datetime/calendar-minute-basic.test.json new file mode 100644 index 00000000..3843e6bd --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-minute-basic.test.json @@ -0,0 +1,396 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-minute-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 201801011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 10:15", + "data": "19850412T1015", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00", + "data": "20000101T0000", + "valid": true + }, + { + "description": "Valid - end of day 2023-12-31 23:59", + "data": "20231231T2359", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00", + "data": "20200229T1200", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00", + "data": "20240101T0000", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30", + "data": "19000315T0630", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45", + "data": "21000820T1845", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "198504121015", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "19850412t1015", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format (has hyphens and colons)", + "data": "1985-04-12T10:15", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "20230012T1200", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "20231312T1200", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "20239912T1200", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "20230100T1200", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "20230132T1200", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "20230199T1200", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "20230115T2400", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "20230115T2500", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "20230115T9900", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "20230115T1260", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "20230115T1299", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "20230115T0000", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "20230115T2300", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "20230115T1200", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "20230115T1259", + "valid": true + }, + { + "description": "Invalid - with seconds", + "data": "20230115T120000", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "20230115T1200Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "20230115T1200+0100", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "20230115T1200.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "20230115T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "20230115", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T1200", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "20230115T1200", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "20231231T1200", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 01 15T12 00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "230115T1200", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "20230115T1200X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X20230115T1200", + "valid": false + }, + { + "description": "Invalid - too short (missing time digits)", + "data": "20230115T120", + "valid": false + }, + { + "description": "Invalid - too long", + "data": "20230115T12000", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "00000101T1200", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "99991231T2359", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "20230230T1200", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "20230231T1200", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "20230229T1200", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "20230431T1200", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "20230631T1200", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "20230931T1200", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "20231131T1200", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "20230132T1200", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "20230332T1200", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "20230532T1200", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "20230732T1200", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "20230832T1200", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "20231032T1200", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "20231232T1200", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O230115T1200", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023O115T1200", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "202301O5T1200", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "20230115T1O00", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "20230115T12O0", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "20230430T1200", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "20230630T1200", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "20230930T1200", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "20231130T1200", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "20230131T1200", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "20230331T1200", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "20230531T1200", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "20230731T1200", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "20230831T1200", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "20231031T1200", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "20231231T1200", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-minute-extended.test.json b/test/iso/datetime/2019/datetime/calendar-minute-extended.test.json new file mode 100644 index 00000000..dca62702 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-minute-extended.test.json @@ -0,0 +1,406 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-minute-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 201801011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 10:15", + "data": "1985-04-12T10:15", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00", + "data": "2000-01-01T00:00", + "valid": true + }, + { + "description": "Valid - end of day 2023-12-31 23:59", + "data": "2023-12-31T23:59", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00", + "data": "2020-02-29T12:00", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00", + "data": "2024-01-01T00:00", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30", + "data": "1900-03-15T06:30", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45", + "data": "2100-08-20T18:45", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-04-1210:15", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-04-12t10:15", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format (no hyphens or colons)", + "data": "19850412T1015", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "2023-00-12T12:00", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "2023-13-12T12:00", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "2023-99-12T12:00", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "2023-01-00T12:00", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "2023-01-32T12:00", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "2023-01-99T12:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-01-15T24:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-01-15T25:00", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-01-15T99:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-01-15T12:60", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-01-15T12:99", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-01-15T00:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-01-15T23:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-01-15T12:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-01-15T12:59", + "valid": true + }, + { + "description": "Invalid - missing hyphens in date", + "data": "20230115T12:00", + "valid": false + }, + { + "description": "Invalid - missing colon in time", + "data": "2023-01-15T1200", + "valid": false + }, + { + "description": "Invalid - with seconds", + "data": "2023-01-15T12:00:00", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "2023-01-15T12:00Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023-01-15T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "2023-01-15T12:00.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-01-15T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-01-15", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "2023-01-15T12:00", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "2023-12-31T12:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-01-15 T 12:00", + "valid": false + }, + { + "description": "Invalid - extra hyphen in date", + "data": "2023--01-15T12:00", + "valid": false + }, + { + "description": "Invalid - extra colon in time", + "data": "2023-01-15T12::00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-01-15T12:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-01-15T12:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-01-15T12:00", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "0000-01-01T12:00", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "9999-12-31T23:59", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "2023-02-30T12:00", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "2023-02-31T12:00", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "2023-02-29T12:00", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "2023-04-31T12:00", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "2023-06-31T12:00", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "2023-09-31T12:00", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "2023-11-31T12:00", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "2023-01-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "2023-03-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "2023-05-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "2023-07-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "2023-08-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "2023-10-32T12:00", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "2023-12-32T12:00", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O23-01-15T12:00", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023-O1-15T12:00", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "2023-01-O5T12:00", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "2023-01-15T1O:00", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "2023-01-15T12:O0", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "2023-04-30T12:00", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "2023-06-30T12:00", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "2023-09-30T12:00", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "2023-11-30T12:00", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "2023-01-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "2023-03-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "2023-05-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "2023-07-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "2023-08-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "2023-10-31T12:00", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "2023-12-31T12:00", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-shift-basic.test.json b/test/iso/datetime/2019/datetime/calendar-shift-basic.test.json new file mode 100644 index 00000000..b3e0ff25 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-shift-basic.test.json @@ -0,0 +1,446 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-shift-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 +04:00", + "data": "19850412T232050+0400", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 -05:00", + "data": "20000101T000000-0500", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 +00:00", + "data": "20231231T235960+0000", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 +05:30", + "data": "20200229T120000+0530", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "20230115T120000+0100", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "20230115T120000-0800", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "20230115T120000+2359", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "20230115T120000-2359", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "20230115T120000+0000", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "20230115T120000-0000", + "valid": false + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 +02:00", + "data": "19000315T063045+0200", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 -12:00", + "data": "21000820T184530-1200", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "19850412232050+0400", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "19850412t232050+0400", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-04-12T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "19850412T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "19850412T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "20230115T120000+2400", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "20230115T120000+2500", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "20230115T120000+0160", + "valid": false + }, + { + "description": "Invalid - shift minute 99", + "data": "20230115T120000+0199", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "20230115T1200000400", + "valid": false + }, + { + "description": "Invalid - colon in shift (extended format shift)", + "data": "19850412T232050+04:00", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "19850412T232050+04", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "20230012T120000+0100", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "20231312T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "20230100T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "20230132T120000+0100", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "20230115T240000+0100", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "20230115T250000+0100", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "20230115T126000+0100", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "20230115T129900+0100", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "20230115T120061+0100", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "20230115T120099+0100", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "20230115T000000+0100", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "20230115T230000+0100", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "20230115T120000+0100", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "20230115T125900+0100", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "20230115T120000+0100", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "20230115T120059+0100", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "20230630T235960+0100", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "20230115T120000.5+0100", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "20230115T1200+0100", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "20230115+0100", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "20230115T120000+0100", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "20231231T120000+0100", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 01 15T12 00 00+01 00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "20230115T120000+0100X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X20230115T120000+0100", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "00000101T120000+0000", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "99991231T235959+0000", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "20230230T120000+0100", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "20230231T120000+0100", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "20230229T120000+0100", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "20230431T120000+0100", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "20230631T120000+0100", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "20230931T120000+0100", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "20231131T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "20230132T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "20230332T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "20230532T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "20230732T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "20230832T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "20231032T120000+0100", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "20231232T120000+0100", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O230115T120000+0100", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023O115T120000+0100", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "202301O5T120000+0100", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "20230115T1O0000+0100", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "20230115T12O000+0100", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "20230115T1200O0+0100", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "20230430T120000+0100", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "20230630T120000+0100", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "20230930T120000+0100", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "20231130T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "20230131T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "20230331T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "20230531T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "20230731T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "20230831T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "20231031T120000+0100", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "20231231T120000+0100", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-shift-extended.test.json b/test/iso/datetime/2019/datetime/calendar-shift-extended.test.json new file mode 100644 index 00000000..226e8c02 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-shift-extended.test.json @@ -0,0 +1,456 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-shift-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 +04:00", + "data": "1985-04-12T23:20:50+04:00", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 -05:00", + "data": "2000-01-01T00:00:00-05:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 +00:00", + "data": "2023-12-31T23:59:60+00:00", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 +05:30", + "data": "2020-02-29T12:00:00+05:30", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023-01-15T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023-01-15T12:00:00-08:00", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023-01-15T12:00:00+23:59", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023-01-15T12:00:00-23:59", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023-01-15T12:00:00+00:00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023-01-15T12:00:00-00:00", + "valid": false + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 +02:00", + "data": "1900-03-15T06:30:45+02:00", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 -12:00", + "data": "2100-08-20T18:45:30-12:00", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-04-1223:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-04-12t23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "19850412T232050+0400", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-04-12T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-04-12T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-01-15T12:00:00+24:00", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023-01-15T12:00:00+25:00", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023-01-15T12:00:00+01:60", + "valid": false + }, + { + "description": "Invalid - shift minute 99", + "data": "2023-01-15T12:00:00+01:99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-01-15T12:00:0004:00", + "valid": false + }, + { + "description": "Invalid - missing colon in shift (basic format shift)", + "data": "1985-04-12T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985-04-12T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "2023-00-12T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "2023-13-12T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "2023-01-00T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "2023-01-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-01-15T24:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-01-15T25:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-01-15T12:60:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-01-15T12:99:00+01:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-01-15T12:00:61+01:00", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-01-15T12:00:99+01:00", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-01-15T00:00:00+01:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-01-15T23:00:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-01-15T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-01-15T12:59:00+01:00", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-01-15T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-01-15T12:00:59+01:00", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-06-30T23:59:60+01:00", + "valid": true + }, + { + "description": "Invalid - missing hyphens in date", + "data": "20230115T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-01-15T120000+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-01-15T12:00:00.5+01:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-01-15T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-01-15+01:00", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "2023-01-15T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "2023-12-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-01-15 T 12:00:00 + 01:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-01-15T12:00:00+01:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-01-15T12:00:00+01:00", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "0000-01-01T12:00:00+00:00", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "9999-12-31T23:59:59+00:00", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "2023-02-30T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "2023-02-31T12:00:00+01:00", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "2023-02-29T12:00:00+01:00", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "2023-04-31T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "2023-06-31T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "2023-09-31T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "2023-11-31T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "2023-01-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "2023-03-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "2023-05-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "2023-07-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "2023-08-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "2023-10-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "2023-12-32T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O23-01-15T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023-O1-15T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "2023-01-O5T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "2023-01-15T1O:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "2023-01-15T12:O0:00+01:00", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "2023-01-15T12:00:O0+01:00", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "2023-04-30T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "2023-06-30T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "2023-09-30T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "2023-11-30T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "2023-01-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "2023-03-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "2023-05-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "2023-07-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "2023-08-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "2023-10-31T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "2023-12-31T12:00:00+01:00", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-shifthour-basic.test.json b/test/iso/datetime/2019/datetime/calendar-shifthour-basic.test.json new file mode 100644 index 00000000..3f96822b --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-shifthour-basic.test.json @@ -0,0 +1,451 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-shifthour-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 +04", + "data": "19850412T232050+04", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 -05", + "data": "20000101T000000-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 +00", + "data": "20231231T235960+00", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 +05", + "data": "20200229T120000+05", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "20230115T120000+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "20230115T120000-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "20230115T120000+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "20230115T120000-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "20230115T120000+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "20230115T120000-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 +02", + "data": "19000315T063045+02", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 -12", + "data": "21000820T184530-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "19850412232050+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "19850412t232050+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-04-12T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "19850412T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "19850412T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "20230115T120000+24", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "20230115T120000+25", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "20230115T120000+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "20230115T12000004", + "valid": false + }, + { + "description": "Invalid - shift with minutes (full shift)", + "data": "19850412T232050+0400", + "valid": false + }, + { + "description": "Invalid - shift with colon", + "data": "19850412T232050+04:00", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "19850412T232050+4", + "valid": false + }, + { + "description": "Invalid - three digit shift", + "data": "19850412T232050+004", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "20230012T120000+01", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "20231312T120000+01", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "20230100T120000+01", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "20230132T120000+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "20230115T240000+01", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "20230115T250000+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "20230115T126000+01", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "20230115T129900+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "20230115T120061+01", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "20230115T120099+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "20230115T000000+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "20230115T230000+01", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "20230115T120000+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "20230115T125900+01", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "20230115T120000+01", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "20230115T120059+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "20230630T235960+01", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "20230115T120000.5+01", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "20230115T1200+01", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "20230115+01", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "20230115T120000+01", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "20231231T120000+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 01 15T12 00 00+01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "20230115T120000+01X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X20230115T120000+01", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "00000101T120000+00", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "99991231T235959+00", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "20230230T120000+01", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "20230231T120000+01", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "20230229T120000+01", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "20230431T120000+01", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "20230631T120000+01", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "20230931T120000+01", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "20231131T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "20230132T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "20230332T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "20230532T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "20230732T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "20230832T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "20231032T120000+01", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "20231232T120000+01", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O230115T120000+01", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023O115T120000+01", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "202301O5T120000+01", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "20230115T1O0000+01", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "20230115T12O000+01", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "20230115T1200O0+01", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "20230430T120000+01", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "20230630T120000+01", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "20230930T120000+01", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "20231130T120000+01", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "20230131T120000+01", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "20230331T120000+01", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "20230531T120000+01", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "20230731T120000+01", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "20230831T120000+01", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "20231031T120000+01", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "20231231T120000+01", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-shifthour-extended.test.json b/test/iso/datetime/2019/datetime/calendar-shifthour-extended.test.json new file mode 100644 index 00000000..6533cff3 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-shifthour-extended.test.json @@ -0,0 +1,461 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-shifthour-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 +04", + "data": "1985-04-12T23:20:50+04", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 -05", + "data": "2000-01-01T00:00:00-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 +00", + "data": "2023-12-31T23:59:60+00", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 +05", + "data": "2020-02-29T12:00:00+05", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "2023-01-15T12:00:00+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "2023-01-15T12:00:00-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "2023-01-15T12:00:00+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "2023-01-15T12:00:00-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "2023-01-15T12:00:00+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "2023-01-15T12:00:00-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 +02", + "data": "1900-03-15T06:30:45+02", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 -12", + "data": "2100-08-20T18:45:30-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-04-1223:20:50+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-04-12t23:20:50+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "19850412T232050+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-04-12T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-04-12T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-01-15T12:00:00+24", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023-01-15T12:00:00+25", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "2023-01-15T12:00:00+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-01-15T12:00:0004", + "valid": false + }, + { + "description": "Invalid - shift with minutes (full shift)", + "data": "1985-04-12T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - shift without colon (basic format shift)", + "data": "1985-04-12T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "1985-04-12T23:20:50+4", + "valid": false + }, + { + "description": "Invalid - three digit shift", + "data": "1985-04-12T23:20:50+004", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "2023-00-12T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "2023-13-12T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "2023-01-00T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "2023-01-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-01-15T24:00:00+01", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-01-15T25:00:00+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-01-15T12:60:00+01", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-01-15T12:99:00+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-01-15T12:00:61+01", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-01-15T12:00:99+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-01-15T00:00:00+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-01-15T23:00:00+01", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-01-15T12:00:00+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-01-15T12:59:00+01", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-01-15T12:00:00+01", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-01-15T12:00:59+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-06-30T23:59:60+01", + "valid": true + }, + { + "description": "Invalid - missing hyphens in date", + "data": "20230115T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-01-15T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-01-15T12:00:00.5+01", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-01-15T12:00+01", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-01-15+01", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "2023-01-15T12:00:00+01", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "2023-12-31T12:00:00+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-01-15 T 12:00:00 + 01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-01-15T12:00:00+01X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-01-15T12:00:00+01", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "0000-01-01T12:00:00+00", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "9999-12-31T23:59:59+00", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "2023-02-30T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "2023-02-31T12:00:00+01", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "2023-02-29T12:00:00+01", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "2023-04-31T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "2023-06-31T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "2023-09-31T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "2023-11-31T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "2023-01-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "2023-03-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "2023-05-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "2023-07-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "2023-08-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "2023-10-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "2023-12-32T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O23-01-15T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023-O1-15T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "2023-01-O5T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "2023-01-15T1O:00:00+01", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "2023-01-15T12:O0:00+01", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "2023-01-15T12:00:O0+01", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "2023-04-30T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "2023-06-30T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "2023-09-30T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "2023-11-30T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "2023-01-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "2023-03-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "2023-05-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "2023-07-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "2023-08-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "2023-10-31T12:00:00+01", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "2023-12-31T12:00:00+01", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-utc-basic.test.json b/test/iso/datetime/2019/datetime/calendar-utc-basic.test.json new file mode 100644 index 00000000..6f138f90 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-utc-basic.test.json @@ -0,0 +1,441 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-utc-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 UTC", + "data": "19850412T232050Z", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 UTC", + "data": "20000101T000000Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 UTC", + "data": "20231231T235960Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 UTC", + "data": "20200229T120000Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-12-31 23:59:59 UTC", + "data": "20231231T235959Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00:00 UTC", + "data": "20240101T000000Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 UTC", + "data": "19000315T063045Z", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 UTC", + "data": "21000820T184530Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "19850412232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "19850412t232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "19850412T232050z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "19850412T232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-04-12T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "20230012T120000Z", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "20231312T120000Z", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "20239912T120000Z", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "20230100T120000Z", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "20230132T120000Z", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "20230199T120000Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "20230115T240000Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "20230115T250000Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "20230115T990000Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "20230115T126000Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "20230115T129900Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "20230115T120061Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "20230115T120099Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "20230115T000000Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "20230115T230000Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "20230115T120000Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "20230115T125900Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "20230115T120000Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "20230115T120059Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "20230630T235960Z", + "valid": true + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "20230115T120000+0100", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "20230115T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "20230115T120000.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "20230115T1200Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "20230115T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "20230115Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000Z", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "20230115T120000Z", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "20231231T120000Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 01 15T12 00 00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "230115T120000Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "20230115T120000ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X20230115T120000Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "20230115T120000ZZ", + "valid": false + }, + { + "description": "Invalid - Z before time", + "data": "20230115TZ120000", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "00000101T120000Z", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "99991231T235959Z", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "20230230T120000Z", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "20230231T120000Z", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "20230229T120000Z", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "20230431T120000Z", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "20230631T120000Z", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "20230931T120000Z", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "20231131T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "20230132T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "20230332T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "20230532T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "20230732T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "20230832T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "20231032T120000Z", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "20231232T120000Z", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O230115T120000Z", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023O115T120000Z", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "202301O5T120000Z", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "20230115T1O0000Z", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "20230115T12O000Z", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "20230115T1200O0Z", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "20230430T120000Z", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "20230630T120000Z", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "20230930T120000Z", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "20231130T120000Z", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "20230131T120000Z", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "20230331T120000Z", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "20230531T120000Z", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "20230731T120000Z", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "20230831T120000Z", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "20231031T120000Z", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "20231231T120000Z", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/calendar-utc-extended.test.json b/test/iso/datetime/2019/datetime/calendar-utc-extended.test.json new file mode 100644 index 00000000..512983d7 --- /dev/null +++ b/test/iso/datetime/2019/datetime/calendar-utc-extended.test.json @@ -0,0 +1,456 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/calendar-utc-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180101120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-04-12 23:20:50 UTC", + "data": "1985-04-12T23:20:50Z", + "valid": true + }, + { + "description": "Valid - midnight 2000-01-01 00:00:00 UTC", + "data": "2000-01-01T00:00:00Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-12-31 23:59:60 UTC", + "data": "2023-12-31T23:59:60Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-02-29 12:00:00 UTC", + "data": "2020-02-29T12:00:00Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-12-31 23:59:59 UTC", + "data": "2023-12-31T23:59:59Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-01-01 00:00:00 UTC", + "data": "2024-01-01T00:00:00Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-03-15 06:30:45 UTC", + "data": "1900-03-15T06:30:45Z", + "valid": true + }, + { + "description": "Valid - future date 2100-08-20 18:45:30 UTC", + "data": "2100-08-20T18:45:30Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-04-1223:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-04-12t23:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985-04-12T23:20:50z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985-04-12T23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "19850412T232050Z", + "valid": false + }, + { + "description": "Invalid - month 00", + "data": "2023-00-12T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - month 13", + "data": "2023-13-12T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - month 99", + "data": "2023-99-12T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 00", + "data": "2023-01-00T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 32", + "data": "2023-01-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 99", + "data": "2023-01-99T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-01-15T24:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-01-15T25:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-01-15T99:00:00Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-01-15T12:60:00Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-01-15T12:99:00Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-01-15T12:00:61Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-01-15T12:00:99Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-01-15T00:00:00Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-01-15T23:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-01-15T12:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-01-15T12:59:00Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-01-15T12:00:00Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-01-15T12:00:59Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-06-30T23:59:60Z", + "valid": true + }, + { + "description": "Invalid - missing hyphens in date", + "data": "20230115T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-01-15T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023-01-15T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023-01-15T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-01-15T12:00:00.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-01-15T12:00Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-01-15T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-01-15Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00Z", + "valid": false + }, + { + "description": "Valid - January (month 01)", + "data": "2023-01-15T12:00:00Z", + "valid": true + }, + { + "description": "Valid - December (month 12)", + "data": "2023-12-31T12:00:00Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-01-15 T 12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra hyphen in date", + "data": "2023--01-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra colon in time", + "data": "2023-01-15T12::00:00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-01-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-01-15T12:00:00ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-01-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023-01-15T12:00:00ZZ", + "valid": false + }, + { + "description": "Valid - year 0000", + "data": "0000-01-01T12:00:00Z", + "valid": true + }, + { + "description": "Valid - year 9999", + "data": "9999-12-31T23:59:59Z", + "valid": true + }, + { + "description": "Invalid - 30 February", + "data": "2023-02-30T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 31 February", + "data": "2023-02-31T12:00:00Z", + "valid": false + }, + { + "description": "Valid - 29 February (leap year validation is consumer responsibility)", + "data": "2023-02-29T12:00:00Z", + "valid": true + }, + { + "description": "Invalid - 31 April", + "data": "2023-04-31T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 31 June", + "data": "2023-06-31T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 31 September", + "data": "2023-09-31T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 31 November", + "data": "2023-11-31T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 January", + "data": "2023-01-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 March", + "data": "2023-03-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 May", + "data": "2023-05-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 July", + "data": "2023-07-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 August", + "data": "2023-08-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 October", + "data": "2023-10-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - 32 December", + "data": "2023-12-32T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - letter in year", + "data": "2O23-01-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - letter in month", + "data": "2023-O1-15T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - letter in day", + "data": "2023-01-O5T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - letter in hour", + "data": "2023-01-15T1O:00:00Z", + "valid": false + }, + { + "description": "Invalid - letter in minute", + "data": "2023-01-15T12:O0:00Z", + "valid": false + }, + { + "description": "Invalid - letter in second", + "data": "2023-01-15T12:00:O0Z", + "valid": false + }, + { + "description": "Valid - 30 April (30-day month)", + "data": "2023-04-30T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 30 June (30-day month)", + "data": "2023-06-30T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 30 September (30-day month)", + "data": "2023-09-30T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 30 November (30-day month)", + "data": "2023-11-30T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 January (31-day month)", + "data": "2023-01-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 March (31-day month)", + "data": "2023-03-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 May (31-day month)", + "data": "2023-05-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 July (31-day month)", + "data": "2023-07-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 August (31-day month)", + "data": "2023-08-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 October (31-day month)", + "data": "2023-10-31T12:00:00Z", + "valid": true + }, + { + "description": "Valid - 31 December (31-day month)", + "data": "2023-12-31T12:00:00Z", + "valid": true + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-basic.test.json b/test/iso/datetime/2019/datetime/ordinal-basic.test.json new file mode 100644 index 00000000..4f600ee7 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-basic.test.json @@ -0,0 +1,261 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50", + "data": "1985102T232050", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00", + "data": "2000001T000000", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60", + "data": "2023365T235960", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00", + "data": "2020060T120000", + "valid": true + }, + { + "description": "Valid - end of year 2023-365 23:59:59", + "data": "2023365T235959", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00:00", + "data": "2024001T000000", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30:45", + "data": "1900074T063045", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45:30", + "data": "2100232T184530", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366)", + "data": "2020366T120000", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985102232050", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985102t232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format (has hyphen)", + "data": "1985-102T23:20:50", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023000T120000", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023367T120000", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023999T120000", + "valid": false + }, + { + "description": "Invalid - day with leading zeros 0001", + "data": "20230001T120000", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023100T240000", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023100T250000", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023100T990000", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023100T126000", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023100T129900", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023100T120061", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023100T120099", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023100T000000", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023100T230000", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023100T120000", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023100T125900", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023100T120000", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023100T120059", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023181T235960", + "valid": true + }, + { + "description": "Invalid - with Z designator", + "data": "2023100T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023100T120000+0100", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023100T120000.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023100T1200", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023100T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023100", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023001T120000", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023365T120000", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020366T120000", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 100T12 00 00", + "valid": false + }, + { + "description": "Invalid - too short day (2 digits)", + "data": "202310T120000", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23100T120000", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023100T120000X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023100T120000", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-extended.test.json b/test/iso/datetime/2019/datetime/ordinal-extended.test.json new file mode 100644 index 00000000..a5ee763e --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-extended.test.json @@ -0,0 +1,266 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50", + "data": "1985-102T23:20:50", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00", + "data": "2000-001T00:00:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60", + "data": "2023-365T23:59:60", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00", + "data": "2020-060T12:00:00", + "valid": true + }, + { + "description": "Valid - end of year 2023-365 23:59:59", + "data": "2023-365T23:59:59", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00:00", + "data": "2024-001T00:00:00", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30:45", + "data": "1900-074T06:30:45", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45:30", + "data": "2100-232T18:45:30", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366)", + "data": "2020-366T12:00:00", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-10223:20:50", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-102t23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format (no hyphen or colons)", + "data": "1985102T232050", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023-000T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023-367T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023-999T12:00:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-100T24:00:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-100T25:00:00", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-100T99:00:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-100T12:60:00", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-100T12:99:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-100T12:00:61", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-100T12:00:99", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-100T00:00:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-100T23:00:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-100T12:00:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-100T12:59:00", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-100T12:00:00", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-100T12:00:59", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-181T23:59:60", + "valid": true + }, + { + "description": "Invalid - missing hyphen in date", + "data": "2023100T12:00:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-100T120000", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "2023-100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023-100T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-100T12:00:00.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-100T12:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-100T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-100", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023-001T12:00:00", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023-365T12:00:00", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020-366T12:00:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-100 T 12:00:00", + "valid": false + }, + { + "description": "Invalid - extra hyphen", + "data": "2023--100T12:00:00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-100T12:00:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-100T12:00:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-100T12:00:00", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-minute-utc-basic.test.json b/test/iso/datetime/2019/datetime/ordinal-minute-utc-basic.test.json new file mode 100644 index 00000000..9f7379c3 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-minute-utc-basic.test.json @@ -0,0 +1,236 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-minute-utc-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 10:15 UTC", + "data": "1985102T1015Z", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00 UTC", + "data": "2000001T0000Z", + "valid": true + }, + { + "description": "Valid - end of day 2023-365 23:59 UTC", + "data": "2023365T2359Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00 UTC", + "data": "2020060T1200Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00 UTC", + "data": "2024001T0000Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30 UTC", + "data": "1900074T0630Z", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45 UTC", + "data": "2100232T1845Z", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366) UTC", + "data": "2020366T1200Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "19851021015Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985102t1015Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985102T1015z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985102T1015", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-102T10:15Z", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023000T1200Z", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023367T1200Z", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023999T1200Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023100T2400Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023100T2500Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023100T9900Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023100T1260Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023100T1299Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023100T0000Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023100T2300Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023100T1200Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023100T1259Z", + "valid": true + }, + { + "description": "Invalid - with seconds", + "data": "2023100T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023100T1200+0100", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023100T1200+01", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "2023100T1200.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023100T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023100Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T1200Z", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023001T1200Z", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023365T1200Z", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020366T1200Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 100T12 00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23100T1200Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023100T1200ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023100T1200Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023100T1200ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-minute-utc-extended.test.json b/test/iso/datetime/2019/datetime/ordinal-minute-utc-extended.test.json new file mode 100644 index 00000000..b720cc06 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-minute-utc-extended.test.json @@ -0,0 +1,251 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-minute-utc-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 20180011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 10:15 UTC", + "data": "1985-102T10:15Z", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00 UTC", + "data": "2000-001T00:00Z", + "valid": true + }, + { + "description": "Valid - end of day 2023-365 23:59 UTC", + "data": "2023-365T23:59Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00 UTC", + "data": "2020-060T12:00Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00 UTC", + "data": "2024-001T00:00Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30 UTC", + "data": "1900-074T06:30Z", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45 UTC", + "data": "2100-232T18:45Z", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366) UTC", + "data": "2020-366T12:00Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-10210:15Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-102t10:15Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985-102T10:15z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985-102T10:15", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985102T1015Z", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023-000T12:00Z", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023-367T12:00Z", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023-999T12:00Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-100T24:00Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-100T25:00Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-100T99:00Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-100T12:60Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-100T12:99Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-100T00:00Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-100T23:00Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-100T12:00Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-100T12:59Z", + "valid": true + }, + { + "description": "Invalid - missing hyphen in date", + "data": "2023100T12:00Z", + "valid": false + }, + { + "description": "Invalid - missing colon in time", + "data": "2023-100T1200Z", + "valid": false + }, + { + "description": "Invalid - with seconds", + "data": "2023-100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023-100T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023-100T12:00+01", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "2023-100T12:00.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-100T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-100Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00Z", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023-001T12:00Z", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023-365T12:00Z", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020-366T12:00Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-100 T 12:00Z", + "valid": false + }, + { + "description": "Invalid - extra hyphen", + "data": "2023--100T12:00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-100T12:00Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-100T12:00ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-100T12:00Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023-100T12:00ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-shift-basic.test.json b/test/iso/datetime/2019/datetime/ordinal-shift-basic.test.json new file mode 100644 index 00000000..5b8a9807 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-shift-basic.test.json @@ -0,0 +1,281 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-shift-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 +04:00", + "data": "1985102T232050+0400", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 -05:00", + "data": "2000001T000000-0500", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 +00:00", + "data": "2023365T235960+0000", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 +05:30", + "data": "2020060T120000+0530", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023100T120000+0100", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023100T120000-0800", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023100T120000+2359", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023100T120000-2359", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023100T120000+0000", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023100T120000-0000", + "valid": false + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) +02:00", + "data": "1900074T063045+0200", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) -12:00", + "data": "2100232T184530-1200", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985102232050+0400", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985102t232050+0400", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-102T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985102T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985102T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023100T120000+2400", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023100T120000+2500", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023100T120000+0160", + "valid": false + }, + { + "description": "Invalid - shift minute 99", + "data": "2023100T120000+0199", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023100T1200000400", + "valid": false + }, + { + "description": "Invalid - colon in shift (extended format shift)", + "data": "1985102T232050+04:00", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985102T232050+04", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023000T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023367T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023999T120000+0100", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023100T240000+0100", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023100T250000+0100", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023100T126000+0100", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023100T129900+0100", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023100T120061+0100", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023100T120099+0100", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023100T000000+0100", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023100T230000+0100", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023100T120000+0100", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023100T125900+0100", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023100T120000+0100", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023100T120059+0100", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023181T235960+0100", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023100T120000.5+0100", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023100T1200+0100", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023100+0100", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023001T120000+0100", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023365T120000+0100", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020366T120000+0100", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 100T12 00 00+01 00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023100T120000+0100X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023100T120000+0100", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-shift-extended.test.json b/test/iso/datetime/2019/datetime/ordinal-shift-extended.test.json new file mode 100644 index 00000000..13c4e60c --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-shift-extended.test.json @@ -0,0 +1,291 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-shift-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 +04:00", + "data": "1985-102T23:20:50+04:00", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 -05:00", + "data": "2000-001T00:00:00-05:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 +00:00", + "data": "2023-365T23:59:60+00:00", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 +05:30", + "data": "2020-060T12:00:00+05:30", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023-100T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023-100T12:00:00-08:00", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023-100T12:00:00+23:59", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023-100T12:00:00-23:59", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023-100T12:00:00+00:00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023-100T12:00:00-00:00", + "valid": false + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) +02:00", + "data": "1900-074T06:30:45+02:00", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) -12:00", + "data": "2100-232T18:45:30-12:00", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-10223:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-102t23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985102T232050+0400", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-102T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-102T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-100T12:00:00+24:00", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023-100T12:00:00+25:00", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023-100T12:00:00+01:60", + "valid": false + }, + { + "description": "Invalid - shift minute 99", + "data": "2023-100T12:00:00+01:99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-100T12:00:0004:00", + "valid": false + }, + { + "description": "Invalid - missing colon in shift (basic format shift)", + "data": "1985-102T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985-102T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023-000T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023-367T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023-999T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-100T24:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-100T25:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-100T12:60:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-100T12:99:00+01:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-100T12:00:61+01:00", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-100T12:00:99+01:00", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-100T00:00:00+01:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-100T23:00:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-100T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-100T12:59:00+01:00", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-100T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-100T12:00:59+01:00", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-181T23:59:60+01:00", + "valid": true + }, + { + "description": "Invalid - missing hyphen in date", + "data": "2023100T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-100T120000+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-100T12:00:00.5+01:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-100T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-100+01:00", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023-001T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023-365T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020-366T12:00:00+01:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-100 T 12:00:00 + 01:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-100T12:00:00+01:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-100T12:00:00+01:00", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-shifthour-basic.test.json b/test/iso/datetime/2019/datetime/ordinal-shifthour-basic.test.json new file mode 100644 index 00000000..298e5c56 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-shifthour-basic.test.json @@ -0,0 +1,286 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-shifthour-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 +04", + "data": "1985102T232050+04", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 -05", + "data": "2000001T000000-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 +00", + "data": "2023365T235960+00", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 +05", + "data": "2020060T120000+05", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "2023100T120000+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "2023100T120000-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "2023100T120000+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "2023100T120000-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "2023100T120000+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "2023100T120000-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) +02", + "data": "1900074T063045+02", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) -12", + "data": "2100232T184530-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985102232050+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985102t232050+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-102T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985102T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985102T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023100T120000+24", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023100T120000+25", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "2023100T120000+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023100T12000004", + "valid": false + }, + { + "description": "Invalid - shift with minutes (full shift)", + "data": "1985102T232050+0400", + "valid": false + }, + { + "description": "Invalid - shift with colon", + "data": "1985102T232050+04:00", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "1985102T232050+4", + "valid": false + }, + { + "description": "Invalid - three digit shift", + "data": "1985102T232050+004", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023000T120000+01", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023367T120000+01", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023999T120000+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023100T240000+01", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023100T250000+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023100T126000+01", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023100T129900+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023100T120061+01", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023100T120099+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023100T000000+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023100T230000+01", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023100T120000+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023100T125900+01", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023100T120000+01", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023100T120059+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023181T235960+01", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023100T120000.5+01", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023100T1200+01", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023100+01", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023001T120000+01", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023365T120000+01", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020366T120000+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 100T12 00 00+01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023100T120000+01X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023100T120000+01", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-shifthour-extended.test.json b/test/iso/datetime/2019/datetime/ordinal-shifthour-extended.test.json new file mode 100644 index 00000000..d311a8e6 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-shifthour-extended.test.json @@ -0,0 +1,296 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-shifthour-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 +04", + "data": "1985-102T23:20:50+04", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 -05", + "data": "2000-001T00:00:00-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 +00", + "data": "2023-365T23:59:60+00", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 +05", + "data": "2020-060T12:00:00+05", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "2023-100T12:00:00+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "2023-100T12:00:00-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "2023-100T12:00:00+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "2023-100T12:00:00-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "2023-100T12:00:00+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "2023-100T12:00:00-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) +02", + "data": "1900-074T06:30:45+02", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) -12", + "data": "2100-232T18:45:30-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-10223:20:50+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-102t23:20:50+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985102T232050+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-102T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-102T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-100T12:00:00+24", + "valid": false + }, + { + "description": "Invalid - shift hour 25", + "data": "2023-100T12:00:00+25", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "2023-100T12:00:00+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-100T12:00:0004", + "valid": false + }, + { + "description": "Invalid - shift with minutes (full shift)", + "data": "1985-102T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - shift without colon (basic format shift)", + "data": "1985-102T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "1985-102T23:20:50+4", + "valid": false + }, + { + "description": "Invalid - three digit shift", + "data": "1985-102T23:20:50+004", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023-000T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023-367T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023-999T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-100T24:00:00+01", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-100T25:00:00+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-100T12:60:00+01", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-100T12:99:00+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-100T12:00:61+01", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-100T12:00:99+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-100T00:00:00+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-100T23:00:00+01", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-100T12:00:00+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-100T12:59:00+01", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-100T12:00:00+01", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-100T12:00:59+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-181T23:59:60+01", + "valid": true + }, + { + "description": "Invalid - missing hyphen in date", + "data": "2023100T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-100T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-100T12:00:00.5+01", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-100T12:00+01", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-100+01", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023-001T12:00:00+01", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023-365T12:00:00+01", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020-366T12:00:00+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-100 T 12:00:00 + 01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-100T12:00:00+01X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-100T12:00:00+01", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-utc-basic.test.json b/test/iso/datetime/2019/datetime/ordinal-utc-basic.test.json new file mode 100644 index 00000000..d40450d3 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-utc-basic.test.json @@ -0,0 +1,266 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-utc-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 UTC", + "data": "1985102T232050Z", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 UTC", + "data": "2000001T000000Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 UTC", + "data": "2023365T235960Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 UTC", + "data": "2020060T120000Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-365 23:59:59 UTC", + "data": "2023365T235959Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00:00 UTC", + "data": "2024001T000000Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30:45 UTC", + "data": "1900074T063045Z", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45:30 UTC", + "data": "2100232T184530Z", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366) UTC", + "data": "2020366T120000Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985102232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985102t232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985102T232050z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985102T232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-102T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023000T120000Z", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023367T120000Z", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023999T120000Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023100T240000Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023100T250000Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023100T990000Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023100T126000Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023100T129900Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023100T120061Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023100T120099Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023100T000000Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023100T230000Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023100T120000Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023100T125900Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023100T120000Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023100T120059Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023181T235960Z", + "valid": true + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023100T120000+0100", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023100T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023100T120000.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023100T1200Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023100T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023100Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000Z", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023001T120000Z", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023365T120000Z", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020366T120000Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 100T12 00 00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23100T120000Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023100T120000ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023100T120000Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023100T120000ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/ordinal-utc-extended.test.json b/test/iso/datetime/2019/datetime/ordinal-utc-extended.test.json new file mode 100644 index 00000000..5a952de1 --- /dev/null +++ b/test/iso/datetime/2019/datetime/ordinal-utc-extended.test.json @@ -0,0 +1,281 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/ordinal-utc-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018001120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-102 (Apr 12) 23:20:50 UTC", + "data": "1985-102T23:20:50Z", + "valid": true + }, + { + "description": "Valid - 2000-001 (Jan 1) 00:00:00 UTC", + "data": "2000-001T00:00:00Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-365 23:59:60 UTC", + "data": "2023-365T23:59:60Z", + "valid": true + }, + { + "description": "Valid - leap day 2020-060 (Feb 29) 12:00:00 UTC", + "data": "2020-060T12:00:00Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-365 23:59:59 UTC", + "data": "2023-365T23:59:59Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-001 00:00:00 UTC", + "data": "2024-001T00:00:00Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-074 (Mar 15) 06:30:45 UTC", + "data": "1900-074T06:30:45Z", + "valid": true + }, + { + "description": "Valid - future date 2100-232 (Aug 20) 18:45:30 UTC", + "data": "2100-232T18:45:30Z", + "valid": true + }, + { + "description": "Valid - leap year day 366 (2020-366) UTC", + "data": "2020-366T12:00:00Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-10223:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-102t23:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985-102T23:20:50z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985-102T23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985102T232050Z", + "valid": false + }, + { + "description": "Invalid - day 000", + "data": "2023-000T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 367", + "data": "2023-367T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 999", + "data": "2023-999T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-100T24:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-100T25:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-100T99:00:00Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-100T12:60:00Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-100T12:99:00Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-100T12:00:61Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-100T12:00:99Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-100T00:00:00Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-100T23:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-100T12:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-100T12:59:00Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-100T12:00:00Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-100T12:00:59Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-181T23:59:60Z", + "valid": true + }, + { + "description": "Invalid - missing hyphen in date", + "data": "2023100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-100T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023-100T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023-100T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-100T12:00:00.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-100T12:00Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-100T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-100Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00Z", + "valid": false + }, + { + "description": "Valid - day 001 (Jan 1)", + "data": "2023-001T12:00:00Z", + "valid": true + }, + { + "description": "Valid - day 365 (non-leap year last day)", + "data": "2023-365T12:00:00Z", + "valid": true + }, + { + "description": "Valid - day 366 (leap year last day)", + "data": "2020-366T12:00:00Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-100 T 12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra hyphen", + "data": "2023--100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-100T12:00:00ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-100T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023-100T12:00:00ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-basic.test.json b/test/iso/datetime/2019/datetime/week-basic.test.json new file mode 100644 index 00000000..2d9e363e --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-basic.test.json @@ -0,0 +1,271 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 (Apr 12) 23:20:50", + "data": "1985W155T232050", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 (Jan 3) 00:00:00", + "data": "2000W011T000000", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60", + "data": "2023W507T235960", + "valid": true + }, + { + "description": "Valid - 2020-W09-7 (Mar 1) 12:00:00", + "data": "2020W097T120000", + "valid": true + }, + { + "description": "Valid - end of year 2023-W52-7 23:59:59", + "data": "2023W527T235959", + "valid": true + }, + { + "description": "Valid - start of year 2024-W01-1 00:00:00", + "data": "2024W011T000000", + "valid": true + }, + { + "description": "Valid - historical date 1900-W09-7 06:30:45", + "data": "1900W097T063045", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 18:45:30", + "data": "2100W337T184530", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985W155232050", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985w155T232050", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985W155t232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format (has hyphens and colons)", + "data": "1985-W15-5T23:20:50", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023W007T120000", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023W547T120000", + "valid": false + }, + { + "description": "Invalid - week 99", + "data": "2023W997T120000", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023W100T120000", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023W108T120000", + "valid": false + }, + { + "description": "Invalid - day 9", + "data": "2023W109T120000", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023W101T240000", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023W101T250000", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023W101T990000", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023W101T126000", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023W101T129900", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023W101T120061", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023W101T120099", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023W101T000000", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023W101T230000", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023W101T120000", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023W101T125900", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023W101T120000", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023W101T120059", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023W267T235960", + "valid": true + }, + { + "description": "Invalid - with Z designator", + "data": "2023W101T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023W101T120000+0100", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023W101T120000.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023W101T1200", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023W101T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023W101", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000", + "valid": false + }, + { + "description": "Valid - week 01 day 1 (Monday)", + "data": "2023W011T120000", + "valid": true + }, + { + "description": "Valid - week 53 day 7 (Sunday of week 53)", + "data": "2020W537T120000", + "valid": true + }, + { + "description": "Valid - day 7 (Sunday)", + "data": "2023W107T120000", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 W10 1T12 00 00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023101T120000", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23W101T120000", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023W101T120000X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023W101T120000", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-extended.test.json b/test/iso/datetime/2019/datetime/week-extended.test.json new file mode 100644 index 00000000..e1a8cfa7 --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-extended.test.json @@ -0,0 +1,286 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 (Apr 12) 23:20:50", + "data": "1985-W15-5T23:20:50", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 (Jan 3) 00:00:00", + "data": "2000-W01-1T00:00:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60", + "data": "2023-W50-7T23:59:60", + "valid": true + }, + { + "description": "Valid - 2020-W09-7 (Mar 1) 12:00:00", + "data": "2020-W09-7T12:00:00", + "valid": true + }, + { + "description": "Valid - end of year 2023-W52-7 23:59:59", + "data": "2023-W52-7T23:59:59", + "valid": true + }, + { + "description": "Valid - start of year 2024-W01-1 00:00:00", + "data": "2024-W01-1T00:00:00", + "valid": true + }, + { + "description": "Valid - historical date 1900-W09-7 06:30:45", + "data": "1900-W09-7T06:30:45", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 18:45:30", + "data": "2100-W33-7T18:45:30", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-W15-523:20:50", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985-w15-5T23:20:50", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-W15-5t23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format (no hyphens or colons)", + "data": "1985W155T232050", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023-W00-7T12:00:00", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023-W54-7T12:00:00", + "valid": false + }, + { + "description": "Invalid - week 99", + "data": "2023-W99-7T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023-W10-0T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023-W10-8T12:00:00", + "valid": false + }, + { + "description": "Invalid - day 9", + "data": "2023-W10-9T12:00:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-W10-1T24:00:00", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-W10-1T25:00:00", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-W10-1T99:00:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-W10-1T12:60:00", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-W10-1T12:99:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-W10-1T12:00:61", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-W10-1T12:00:99", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-W10-1T00:00:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-W10-1T23:00:00", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-W10-1T12:00:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-W10-1T12:59:00", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-W10-1T12:00:00", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-W10-1T12:00:59", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-W26-7T23:59:60", + "valid": true + }, + { + "description": "Invalid - missing hyphens", + "data": "2023W101T12:00:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-W10-1T120000", + "valid": false + }, + { + "description": "Invalid - with Z designator", + "data": "2023-W10-1T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - with time shift", + "data": "2023-W10-1T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-W10-1T12:00:00.5", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-W10-1T12:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-W10-1T12", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-W10-1", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00", + "valid": false + }, + { + "description": "Valid - week 01 day 1 (Monday)", + "data": "2023-W01-1T12:00:00", + "valid": true + }, + { + "description": "Valid - week 53 day 7 (Sunday of week 53)", + "data": "2020-W53-7T12:00:00", + "valid": true + }, + { + "description": "Valid - day 7 (Sunday)", + "data": "2023-W10-7T12:00:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-W10-1 T 12:00:00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023-10-1T12:00:00", + "valid": false + }, + { + "description": "Invalid - extra hyphen", + "data": "2023--W10-1T12:00:00", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-W10-1T12:00:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-W10-1T12:00:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-W10-1T12:00:00", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-minute-shift-basic.test.json b/test/iso/datetime/2019/datetime/week-minute-shift-basic.test.json new file mode 100644 index 00000000..effb5804 --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-minute-shift-basic.test.json @@ -0,0 +1,236 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-minute-shift-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 10:15 +04:00", + "data": "1985W155T1015+0400", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00 -05:00", + "data": "2000W011T0000-0500", + "valid": true + }, + { + "description": "Valid - end of day 2023-W50-7 23:59 +00:00", + "data": "2023W507T2359+0000", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023W101T1200+0100", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023W101T1200-0800", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023W101T1200+2359", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023W101T1200-2359", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023W101T1200+0000", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023W101T1200-0000", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02:00", + "data": "1900W097T0630+0200", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12:00", + "data": "2100W337T1845-1200", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985W1551015+0400", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985w155T1015+0400", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985W155t1015+0400", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-W15-5T10:15+04:00", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985W155T1015", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985W155T1015Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023W101T1200+2400", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023W101T1200+0160", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023W101T12000400", + "valid": false + }, + { + "description": "Invalid - colon in shift (extended format shift)", + "data": "1985W155T1015+04:00", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985W155T1015+04", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023W007T1200+0100", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023W547T1200+0100", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023W100T1200+0100", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023W108T1200+0100", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023W101T2400+0100", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023W101T1260+0100", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023W101T0000+0100", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023W101T2300+0100", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023W101T1259+0100", + "valid": true + }, + { + "description": "Invalid - with seconds", + "data": "2023W101T120000+0100", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "2023W101T1200.5+0100", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023W101T12+0100", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023W011T1200+0100", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020W537T1200+0100", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 W10 1T12 00+01 00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023101T1200+0100", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023W101T1200+0100X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023W101T1200+0100", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-minute-shift-extended.test.json b/test/iso/datetime/2019/datetime/week-minute-shift-extended.test.json new file mode 100644 index 00000000..f4d23acf --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-minute-shift-extended.test.json @@ -0,0 +1,246 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-minute-shift-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011200, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 10:15 +04:00", + "data": "1985-W15-5T10:15+04:00", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00 -05:00", + "data": "2000-W01-1T00:00-05:00", + "valid": true + }, + { + "description": "Valid - end of day 2023-W50-7 23:59 +00:00", + "data": "2023-W50-7T23:59+00:00", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023-W10-1T12:00+01:00", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023-W10-1T12:00-08:00", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023-W10-1T12:00+23:59", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023-W10-1T12:00-23:59", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023-W10-1T12:00+00:00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023-W10-1T12:00-00:00", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02:00", + "data": "1900-W09-7T06:30+02:00", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12:00", + "data": "2100-W33-7T18:45-12:00", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-W15-510:15+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985-w15-5T10:15+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-W15-5t10:15+04:00", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985W155T1015+0400", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-W15-5T10:15", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-W15-5T10:15Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-W10-1T12:00+24:00", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023-W10-1T12:00+01:60", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-W10-1T12:0004:00", + "valid": false + }, + { + "description": "Invalid - missing colon in shift", + "data": "1985-W15-5T10:15+0400", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985-W15-5T10:15+04", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023-W00-7T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023-W54-7T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023-W10-0T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023-W10-8T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-W10-1T24:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-W10-1T12:60+01:00", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-W10-1T00:00+01:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-W10-1T23:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-W10-1T12:59+01:00", + "valid": true + }, + { + "description": "Invalid - missing hyphens", + "data": "2023W101T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - missing colon in time", + "data": "2023-W10-1T1200+01:00", + "valid": false + }, + { + "description": "Invalid - with seconds", + "data": "2023-W10-1T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal minutes", + "data": "2023-W10-1T12:00.5+01:00", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-W10-1T12+01:00", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023-W01-1T12:00+01:00", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020-W53-7T12:00+01:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-W10-1 T 12:00 + 01:00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023-10-1T12:00+01:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-W10-1T12:00+01:00X", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-W10-1T12:00+01:00", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-shift-basic.test.json b/test/iso/datetime/2019/datetime/week-shift-basic.test.json new file mode 100644 index 00000000..c94485ee --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-shift-basic.test.json @@ -0,0 +1,236 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-shift-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 +04:00", + "data": "1985W155T232050+0400", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 -05:00", + "data": "2000W011T000000-0500", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 +00:00", + "data": "2023W507T235960+0000", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023W101T120000+0100", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023W101T120000-0800", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023W101T120000+2359", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023W101T120000-2359", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023W101T120000+0000", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023W101T120000-0000", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02:00", + "data": "1900W097T063045+0200", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12:00", + "data": "2100W337T184530-1200", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985W155232050+0400", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985w155T232050+0400", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985W155t232050+0400", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-W15-5T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985W155T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985W155T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023W101T120000+2400", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023W101T120000+0160", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023W101T1200000400", + "valid": false + }, + { + "description": "Invalid - colon in shift (extended format shift)", + "data": "1985W155T232050+04:00", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985W155T232050+04", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023W007T120000+0100", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023W547T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023W100T120000+0100", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023W108T120000+0100", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023W101T240000+0100", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023W101T126000+0100", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023W101T120061+0100", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023W101T000000+0100", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023W101T230000+0100", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023W101T125900+0100", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023W267T235960+0100", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023W101T120000.5+0100", + "valid": false + }, + { + "description": "Invalid - partial time", + "data": "2023W101T1200+0100", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023W011T120000+0100", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020W537T120000+0100", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 W10 1T12 00 00+01 00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023101T120000+0100", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023W101T120000+0100X", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-shift-extended.test.json b/test/iso/datetime/2019/datetime/week-shift-extended.test.json new file mode 100644 index 00000000..48e1079f --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-shift-extended.test.json @@ -0,0 +1,246 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-shift-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 +04:00", + "data": "1985-W15-5T23:20:50+04:00", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 -05:00", + "data": "2000-W01-1T00:00:00-05:00", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 +00:00", + "data": "2023-W50-7T23:59:60+00:00", + "valid": true + }, + { + "description": "Valid - positive shift +01:00", + "data": "2023-W10-1T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - negative shift -08:00", + "data": "2023-W10-1T12:00:00-08:00", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23:59", + "data": "2023-W10-1T12:00:00+23:59", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23:59", + "data": "2023-W10-1T12:00:00-23:59", + "valid": true + }, + { + "description": "Valid - zero shift +00:00", + "data": "2023-W10-1T12:00:00+00:00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00:00", + "data": "2023-W10-1T12:00:00-00:00", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02:00", + "data": "1900-W09-7T06:30:45+02:00", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12:00", + "data": "2100-W33-7T18:45:30-12:00", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-W15-523:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985-w15-5T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-W15-5t23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985W155T232050+0400", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-W15-5T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-W15-5T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-W10-1T12:00:00+24:00", + "valid": false + }, + { + "description": "Invalid - shift minute 60", + "data": "2023-W10-1T12:00:00+01:60", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-W10-1T12:00:0004:00", + "valid": false + }, + { + "description": "Invalid - missing colon in shift", + "data": "1985-W15-5T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - hourly shift only", + "data": "1985-W15-5T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023-W00-7T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023-W54-7T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023-W10-0T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023-W10-8T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-W10-1T24:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-W10-1T12:60:00+01:00", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-W10-1T12:00:61+01:00", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-W10-1T00:00:00+01:00", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-W10-1T23:00:00+01:00", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-W10-1T12:59:00+01:00", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-W26-7T23:59:60+01:00", + "valid": true + }, + { + "description": "Invalid - missing hyphens", + "data": "2023W101T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-W10-1T120000+01:00", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-W10-1T12:00:00.5+01:00", + "valid": false + }, + { + "description": "Invalid - partial time", + "data": "2023-W10-1T12:00+01:00", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023-W01-1T12:00:00+01:00", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020-W53-7T12:00:00+01:00", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-W10-1 T 12:00:00 + 01:00", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023-10-1T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-W10-1T12:00:00+01:00X", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-shifthour-basic.test.json b/test/iso/datetime/2019/datetime/week-shifthour-basic.test.json new file mode 100644 index 00000000..dfe594a6 --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-shifthour-basic.test.json @@ -0,0 +1,241 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-shifthour-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 +04", + "data": "1985W155T232050+04", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 -05", + "data": "2000W011T000000-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 +00", + "data": "2023W507T235960+00", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "2023W101T120000+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "2023W101T120000-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "2023W101T120000+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "2023W101T120000-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "2023W101T120000+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "2023W101T120000-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02", + "data": "1900W097T063045+02", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12", + "data": "2100W337T184530-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985W155232050+04", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985w155T232050+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985W155t232050+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-W15-5T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985W155T232050", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985W155T232050Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023W101T120000+24", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "2023W101T120000+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023W101T12000004", + "valid": false + }, + { + "description": "Invalid - shift with minutes", + "data": "1985W155T232050+0400", + "valid": false + }, + { + "description": "Invalid - shift with colon", + "data": "1985W155T232050+04:00", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "1985W155T232050+4", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023W007T120000+01", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023W547T120000+01", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023W100T120000+01", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023W108T120000+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023W101T240000+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023W101T126000+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023W101T120061+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023W101T000000+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023W101T230000+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023W101T125900+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023W267T235960+01", + "valid": true + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023W101T120000.5+01", + "valid": false + }, + { + "description": "Invalid - partial time", + "data": "2023W101T1200+01", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023W011T120000+01", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020W537T120000+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 W10 1T12 00 00+01", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023101T120000+01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023W101T120000+01X", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-shifthour-extended.test.json b/test/iso/datetime/2019/datetime/week-shifthour-extended.test.json new file mode 100644 index 00000000..d5f691b7 --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-shifthour-extended.test.json @@ -0,0 +1,251 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-shifthour-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 +04", + "data": "1985-W15-5T23:20:50+04", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 -05", + "data": "2000-W01-1T00:00:00-05", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 +00", + "data": "2023-W50-7T23:59:60+00", + "valid": true + }, + { + "description": "Valid - positive shift +01", + "data": "2023-W10-1T12:00:00+01", + "valid": true + }, + { + "description": "Valid - negative shift -08", + "data": "2023-W10-1T12:00:00-08", + "valid": true + }, + { + "description": "Valid - maximum positive shift +23", + "data": "2023-W10-1T12:00:00+23", + "valid": true + }, + { + "description": "Valid - maximum negative shift -23", + "data": "2023-W10-1T12:00:00-23", + "valid": true + }, + { + "description": "Valid - zero shift +00", + "data": "2023-W10-1T12:00:00+00", + "valid": true + }, + { + "description": "Invalid - negative zero shift -00", + "data": "2023-W10-1T12:00:00-00", + "valid": false + }, + { + "description": "Valid - historical date 1900-W09-7 +02", + "data": "1900-W09-7T06:30:45+02", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 -12", + "data": "2100-W33-7T18:45:30-12", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-W15-523:20:50+04", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985-w15-5T23:20:50+04", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-W15-5t23:20:50+04", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985W155T232050+04", + "valid": false + }, + { + "description": "Invalid - missing time shift", + "data": "1985-W15-5T23:20:50", + "valid": false + }, + { + "description": "Invalid - with Z instead of shift", + "data": "1985-W15-5T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - shift hour 24", + "data": "2023-W10-1T12:00:00+24", + "valid": false + }, + { + "description": "Invalid - shift hour 99", + "data": "2023-W10-1T12:00:00+99", + "valid": false + }, + { + "description": "Invalid - missing shift sign", + "data": "2023-W10-1T12:00:0004", + "valid": false + }, + { + "description": "Invalid - shift with minutes", + "data": "1985-W15-5T23:20:50+04:00", + "valid": false + }, + { + "description": "Invalid - shift without colon (basic)", + "data": "1985-W15-5T23:20:50+0400", + "valid": false + }, + { + "description": "Invalid - single digit shift", + "data": "1985-W15-5T23:20:50+4", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023-W00-7T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023-W54-7T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023-W10-0T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023-W10-8T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-W10-1T24:00:00+01", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-W10-1T12:60:00+01", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-W10-1T12:00:61+01", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-W10-1T00:00:00+01", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-W10-1T23:00:00+01", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-W10-1T12:59:00+01", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-W26-7T23:59:60+01", + "valid": true + }, + { + "description": "Invalid - missing hyphens", + "data": "2023W101T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-W10-1T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-W10-1T12:00:00.5+01", + "valid": false + }, + { + "description": "Invalid - partial time", + "data": "2023-W10-1T12:00+01", + "valid": false + }, + { + "description": "Valid - week 01 day 1", + "data": "2023-W01-1T12:00:00+01", + "valid": true + }, + { + "description": "Valid - week 53 day 7", + "data": "2020-W53-7T12:00:00+01", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-W10-1 T 12:00:00 + 01", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023-10-1T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-W10-1T12:00:00+01X", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-utc-basic.test.json b/test/iso/datetime/2019/datetime/week-utc-basic.test.json new file mode 100644 index 00000000..752f9406 --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-utc-basic.test.json @@ -0,0 +1,286 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-utc-basic.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 UTC", + "data": "1985W155T232050Z", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 UTC", + "data": "2000W011T000000Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 UTC", + "data": "2023W507T235960Z", + "valid": true + }, + { + "description": "Valid - 2020-W09-7 12:00:00 UTC", + "data": "2020W097T120000Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-W52-7 23:59:59 UTC", + "data": "2023W527T235959Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-W01-1 00:00:00 UTC", + "data": "2024W011T000000Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-W09-7 06:30:45 UTC", + "data": "1900W097T063045Z", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 18:45:30 UTC", + "data": "2100W337T184530Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985W155232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985w155T232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985W155t232050Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985W155T232050z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985W155T232050", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - extended format", + "data": "1985-W15-5T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023W007T120000Z", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023W547T120000Z", + "valid": false + }, + { + "description": "Invalid - week 99", + "data": "2023W997T120000Z", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023W100T120000Z", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023W108T120000Z", + "valid": false + }, + { + "description": "Invalid - day 9", + "data": "2023W109T120000Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023W101T240000Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023W101T250000Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023W101T990000Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023W101T126000Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023W101T129900Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023W101T120061Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023W101T120099Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023W101T000000Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023W101T230000Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023W101T120000Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023W101T125900Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023W101T120000Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023W101T120059Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023W267T235960Z", + "valid": true + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023W101T120000+0100", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023W101T120000+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023W101T120000.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023W101T1200Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023W101T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023W101Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T120000Z", + "valid": false + }, + { + "description": "Valid - week 01 day 1 (Monday)", + "data": "2023W011T120000Z", + "valid": true + }, + { + "description": "Valid - week 53 day 7 (Sunday)", + "data": "2020W537T120000Z", + "valid": true + }, + { + "description": "Valid - day 7 (Sunday)", + "data": "2023W107T120000Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023 W10 1T12 00 00Z", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023101T120000Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23W101T120000Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023W101T120000ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023W101T120000Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023W101T120000ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/datetime/week-utc-extended.test.json b/test/iso/datetime/2019/datetime/week-utc-extended.test.json new file mode 100644 index 00000000..8107b5ae --- /dev/null +++ b/test/iso/datetime/2019/datetime/week-utc-extended.test.json @@ -0,0 +1,301 @@ +{ + "x-license": "https://github.com/sourcemeta/std/blob/main/LICENSE", + "target": "../../../../../schemas/iso/datetime/2019/datetime/week-utc-extended.json", + "tests": [ + { + "description": "Invalid type - integer", + "data": 2018011120000, + "valid": false + }, + { + "description": "Invalid type - boolean", + "data": true, + "valid": false + }, + { + "description": "Invalid type - null", + "data": null, + "valid": false + }, + { + "description": "Invalid type - array", + "data": [], + "valid": false + }, + { + "description": "Invalid type - object", + "data": {}, + "valid": false + }, + { + "description": "Valid - 1985-W15-5 23:20:50 UTC", + "data": "1985-W15-5T23:20:50Z", + "valid": true + }, + { + "description": "Valid - 2000-W01-1 00:00:00 UTC", + "data": "2000-W01-1T00:00:00Z", + "valid": true + }, + { + "description": "Valid - leap second 2023-W50-7 23:59:60 UTC", + "data": "2023-W50-7T23:59:60Z", + "valid": true + }, + { + "description": "Valid - 2020-W09-7 12:00:00 UTC", + "data": "2020-W09-7T12:00:00Z", + "valid": true + }, + { + "description": "Valid - end of year 2023-W52-7 23:59:59 UTC", + "data": "2023-W52-7T23:59:59Z", + "valid": true + }, + { + "description": "Valid - start of year 2024-W01-1 00:00:00 UTC", + "data": "2024-W01-1T00:00:00Z", + "valid": true + }, + { + "description": "Valid - historical date 1900-W09-7 06:30:45 UTC", + "data": "1900-W09-7T06:30:45Z", + "valid": true + }, + { + "description": "Valid - future date 2100-W33-7 18:45:30 UTC", + "data": "2100-W33-7T18:45:30Z", + "valid": true + }, + { + "description": "Invalid - missing T designator", + "data": "1985-W15-523:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase w", + "data": "1985-w15-5T23:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase t", + "data": "1985-W15-5t23:20:50Z", + "valid": false + }, + { + "description": "Invalid - lowercase z", + "data": "1985-W15-5T23:20:50z", + "valid": false + }, + { + "description": "Invalid - missing Z designator", + "data": "1985-W15-5T23:20:50", + "valid": false + }, + { + "description": "Invalid - empty string", + "data": "", + "valid": false + }, + { + "description": "Invalid - basic format", + "data": "1985W155T232050Z", + "valid": false + }, + { + "description": "Invalid - week 00", + "data": "2023-W00-7T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - week 54", + "data": "2023-W54-7T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - week 99", + "data": "2023-W99-7T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 0", + "data": "2023-W10-0T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 8", + "data": "2023-W10-8T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - day 9", + "data": "2023-W10-9T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 24", + "data": "2023-W10-1T24:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 25", + "data": "2023-W10-1T25:00:00Z", + "valid": false + }, + { + "description": "Invalid - hour 99", + "data": "2023-W10-1T99:00:00Z", + "valid": false + }, + { + "description": "Invalid - minute 60", + "data": "2023-W10-1T12:60:00Z", + "valid": false + }, + { + "description": "Invalid - minute 99", + "data": "2023-W10-1T12:99:00Z", + "valid": false + }, + { + "description": "Invalid - second 61", + "data": "2023-W10-1T12:00:61Z", + "valid": false + }, + { + "description": "Invalid - second 99", + "data": "2023-W10-1T12:00:99Z", + "valid": false + }, + { + "description": "Valid - hour 00 (minimum)", + "data": "2023-W10-1T00:00:00Z", + "valid": true + }, + { + "description": "Valid - hour 23 (maximum)", + "data": "2023-W10-1T23:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 00 (minimum)", + "data": "2023-W10-1T12:00:00Z", + "valid": true + }, + { + "description": "Valid - minute 59 (maximum)", + "data": "2023-W10-1T12:59:00Z", + "valid": true + }, + { + "description": "Valid - second 00 (minimum)", + "data": "2023-W10-1T12:00:00Z", + "valid": true + }, + { + "description": "Valid - second 59", + "data": "2023-W10-1T12:00:59Z", + "valid": true + }, + { + "description": "Valid - second 60 (leap second)", + "data": "2023-W26-7T23:59:60Z", + "valid": true + }, + { + "description": "Invalid - missing hyphens", + "data": "2023W101T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing colons in time", + "data": "2023-W10-1T120000Z", + "valid": false + }, + { + "description": "Invalid - with time shift instead of Z", + "data": "2023-W10-1T12:00:00+01:00", + "valid": false + }, + { + "description": "Invalid - with hourly time shift", + "data": "2023-W10-1T12:00:00+01", + "valid": false + }, + { + "description": "Invalid - with decimal seconds", + "data": "2023-W10-1T12:00:00.5Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour and minute only)", + "data": "2023-W10-1T12:00Z", + "valid": false + }, + { + "description": "Invalid - partial time (hour only)", + "data": "2023-W10-1T12Z", + "valid": false + }, + { + "description": "Invalid - date only", + "data": "2023-W10-1Z", + "valid": false + }, + { + "description": "Invalid - time only", + "data": "T12:00:00Z", + "valid": false + }, + { + "description": "Valid - week 01 day 1 (Monday)", + "data": "2023-W01-1T12:00:00Z", + "valid": true + }, + { + "description": "Valid - week 53 day 7 (Sunday)", + "data": "2020-W53-7T12:00:00Z", + "valid": true + }, + { + "description": "Valid - day 7 (Sunday)", + "data": "2023-W10-7T12:00:00Z", + "valid": true + }, + { + "description": "Invalid - spaces in datetime", + "data": "2023-W10-1 T 12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing W designator", + "data": "2023-10-1T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra hyphen", + "data": "2023--W10-1T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - missing year digits", + "data": "23-W10-1T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - extra characters at end", + "data": "2023-W10-1T12:00:00ZX", + "valid": false + }, + { + "description": "Invalid - extra characters at beginning", + "data": "X2023-W10-1T12:00:00Z", + "valid": false + }, + { + "description": "Invalid - double Z", + "data": "2023-W10-1T12:00:00ZZ", + "valid": false + } + ] +} diff --git a/test/iso/datetime/2019/time/shift-basic.test.json b/test/iso/datetime/2019/time/shift-basic.test.json index 4c3e8408..78518cf9 100644 --- a/test/iso/datetime/2019/time/shift-basic.test.json +++ b/test/iso/datetime/2019/time/shift-basic.test.json @@ -48,15 +48,25 @@ "valid": true }, { - "description": "Valid - zero shift", + "description": "Invalid - negative zero shift -0000", "data": "-0000", - "valid": true + "valid": false + }, + { + "description": "Invalid - negative zero shift -00", + "data": "-00", + "valid": false }, { - "description": "Valid - positive zero", + "description": "Valid - positive zero +0000", "data": "+0000", "valid": true }, + { + "description": "Valid - positive zero +00", + "data": "+00", + "valid": true + }, { "description": "Invalid - lowercase z", "data": "z", diff --git a/test/iso/datetime/2019/time/shift-extended.test.json b/test/iso/datetime/2019/time/shift-extended.test.json index ebae49ca..62e5e1d8 100644 --- a/test/iso/datetime/2019/time/shift-extended.test.json +++ b/test/iso/datetime/2019/time/shift-extended.test.json @@ -38,9 +38,9 @@ "valid": true }, { - "description": "Valid - zero shift", + "description": "Invalid - negative zero shift", "data": "-00:00", - "valid": true + "valid": false }, { "description": "Valid - positive zero",