Temporal: Move more collections of valid/invalid strings into TemporalHelpers

The idea is to deduplicate more string tests into methods on this object,
that return collections of valid and invalid strings. This adds
collections of valid and invalid PlainYearMonth and PlainMonthDay strings.
This commit is contained in:
Philip Chimento 2022-10-21 14:53:42 -07:00 committed by Philip Chimento
parent 10ac2ad03e
commit d1b16d7d0e
4 changed files with 114 additions and 69 deletions

View File

@ -1798,6 +1798,47 @@ var TemporalHelpers = {
* testing parsers. * testing parsers.
*/ */
ISO: { ISO: {
/*
* PlainMonthDay strings that are not valid.
*/
plainMonthDayStringsInvalid() {
return [
"11-18junk",
];
},
/*
* PlainMonthDay strings that are valid and that should produce October 1st.
*/
plainMonthDayStringsValid() {
return [
"10-01",
"1001",
"1965-10-01",
"1976-10-01T152330.1+00:00",
"19761001T15:23:30.1+00:00",
"1976-10-01T15:23:30.1+0000",
"1976-10-01T152330.1+0000",
"19761001T15:23:30.1+0000",
"19761001T152330.1+00:00",
"19761001T152330.1+0000",
"+001976-10-01T152330.1+00:00",
"+0019761001T15:23:30.1+00:00",
"+001976-10-01T15:23:30.1+0000",
"+001976-10-01T152330.1+0000",
"+0019761001T15:23:30.1+0000",
"+0019761001T152330.1+00:00",
"+0019761001T152330.1+0000",
"1976-10-01T15:23:00",
"1976-10-01T15:23",
"1976-10-01T15",
"1976-10-01",
"--10-01",
"--1001",
1001,
];
},
/* /*
* PlainTime strings that may be mistaken for PlainMonthDay or * PlainTime strings that may be mistaken for PlainMonthDay or
* PlainYearMonth strings, and so require a time designator. * PlainYearMonth strings, and so require a time designator.
@ -1842,6 +1883,58 @@ var TemporalHelpers = {
"2021-12[-12:00]", // HHMM-UU is ambiguous with YYYY-MM, but TZ disambiguates "2021-12[-12:00]", // HHMM-UU is ambiguous with YYYY-MM, but TZ disambiguates
"202112[UTC]", // HHMMSS is ambiguous with YYYYMM, but TZ disambiguates "202112[UTC]", // HHMMSS is ambiguous with YYYYMM, but TZ disambiguates
]; ];
} },
/*
* PlainYearMonth-like strings that are not valid.
*/
plainYearMonthStringsInvalid() {
return [
"2020-13",
];
},
/*
* PlainYearMonth-like strings that are valid and should produce November
* 1976 in the ISO 8601 calendar.
*/
plainYearMonthStringsValid() {
return [
"1976-11",
"1976-11-10",
"1976-11-01T09:00:00+00:00",
"1976-11-01T00:00:00+05:00",
"197611",
"+00197611",
"1976-11-18T15:23:30.1\u221202:00",
"1976-11-18T152330.1+00:00",
"19761118T15:23:30.1+00:00",
"1976-11-18T15:23:30.1+0000",
"1976-11-18T152330.1+0000",
"19761118T15:23:30.1+0000",
"19761118T152330.1+00:00",
"19761118T152330.1+0000",
"+001976-11-18T152330.1+00:00",
"+0019761118T15:23:30.1+00:00",
"+001976-11-18T15:23:30.1+0000",
"+001976-11-18T152330.1+0000",
"+0019761118T15:23:30.1+0000",
"+0019761118T152330.1+00:00",
"+0019761118T152330.1+0000",
"1976-11-18T15:23",
"1976-11-18T15",
"1976-11-18",
];
},
/*
* PlainYearMonth-like strings that are valid and should produce November of
* the ISO year -9999.
*/
plainYearMonthStringsValidNegativeYear() {
return [
"\u2212009999-11",
];
},
} }
}; };

View File

@ -8,39 +8,13 @@ includes: [compareArray.js, temporalHelpers.js]
features: [Temporal] features: [Temporal]
---*/ ---*/
const tests = [ for (const argument of TemporalHelpers.ISO.plainMonthDayStringsValid()) {
"10-01",
"1001",
"1965-10-01",
"1976-10-01T152330.1+00:00",
"19761001T15:23:30.1+00:00",
"1976-10-01T15:23:30.1+0000",
"1976-10-01T152330.1+0000",
"19761001T15:23:30.1+0000",
"19761001T152330.1+00:00",
"19761001T152330.1+0000",
"+001976-10-01T152330.1+00:00",
"+0019761001T15:23:30.1+00:00",
"+001976-10-01T15:23:30.1+0000",
"+001976-10-01T152330.1+0000",
"+0019761001T15:23:30.1+0000",
"+0019761001T152330.1+00:00",
"+0019761001T152330.1+0000",
"1976-10-01T15:23:00",
"1976-10-01T15:23",
"1976-10-01T15",
"1976-10-01",
"--10-01",
"--1001",
1001,
];
for (const argument of tests) {
const plainMonthDay = Temporal.PlainMonthDay.from(argument); const plainMonthDay = Temporal.PlainMonthDay.from(argument);
assert.notSameValue(plainMonthDay, argument, `from ${argument} converts`); assert.notSameValue(plainMonthDay, argument, `from ${argument} converts`);
TemporalHelpers.assertPlainMonthDay(plainMonthDay, "M10", 1, `from ${argument}`); TemporalHelpers.assertPlainMonthDay(plainMonthDay, "M10", 1, `from ${argument}`);
assert.sameValue(plainMonthDay.calendar.id, "iso8601", `from ${argument} calendar`); assert.sameValue(plainMonthDay.calendar.id, "iso8601", `from ${argument} calendar`);
} }
assert.throws(RangeError, () => Temporal.PlainMonthDay.from("11-18junk"), "no junk at end of string"); for (const arg of TemporalHelpers.ISO.plainMonthDayStringsInvalid()) {
assert.throws(RangeError, () => Temporal.PlainMonthDay.from(arg), `"${arg}" not a valid PlainMonthDay string`);
}

View File

@ -4,8 +4,11 @@
/*--- /*---
esid: sec-temporal.plainyearmonth.from esid: sec-temporal.plainyearmonth.from
description: An invalid ISO string is never supported description: An invalid ISO string is never supported
includes: [temporalHelpers.js]
features: [Temporal] features: [Temporal]
---*/ ---*/
assert.throws(RangeError, () => Temporal.PlainYearMonth.from("2020-13", { overflow: "reject" })); for (const input of TemporalHelpers.ISO.plainYearMonthStringsInvalid()) {
assert.throws(RangeError, () => Temporal.PlainYearMonth.from("2020-13", { overflow: "constrain" })); assert.throws(RangeError, () => Temporal.PlainYearMonth.from(input, { overflow: "reject" }));
assert.throws(RangeError, () => Temporal.PlainYearMonth.from(input, { overflow: "constrain" }));
}

View File

@ -8,34 +8,7 @@ includes: [temporalHelpers.js]
features: [Temporal] features: [Temporal]
---*/ ---*/
const inputs = [ for (const input of TemporalHelpers.ISO.plainYearMonthStringsValid()) {
"1976-11",
"1976-11-10",
"1976-11-01T09:00:00+00:00",
"1976-11-01T00:00:00+05:00",
"197611",
"+00197611",
"1976-11-18T15:23:30.1\u221202:00",
"1976-11-18T152330.1+00:00",
"19761118T15:23:30.1+00:00",
"1976-11-18T15:23:30.1+0000",
"1976-11-18T152330.1+0000",
"19761118T15:23:30.1+0000",
"19761118T152330.1+00:00",
"19761118T152330.1+0000",
"+001976-11-18T152330.1+00:00",
"+0019761118T15:23:30.1+00:00",
"+001976-11-18T15:23:30.1+0000",
"+001976-11-18T152330.1+0000",
"+0019761118T15:23:30.1+0000",
"+0019761118T152330.1+00:00",
"+0019761118T152330.1+0000",
"1976-11-18T15:23",
"1976-11-18T15",
"1976-11-18",
];
for (const input of inputs) {
const plainYearMonth = Temporal.PlainYearMonth.from(input); const plainYearMonth = Temporal.PlainYearMonth.from(input);
TemporalHelpers.assertPlainYearMonth(plainYearMonth, 1976, 11, "M11"); TemporalHelpers.assertPlainYearMonth(plainYearMonth, 1976, 11, "M11");
const fields = plainYearMonth.getISOFields(); const fields = plainYearMonth.getISOFields();
@ -45,11 +18,13 @@ for (const input of inputs) {
assert.sameValue(fields.isoYear, 1976, "isoYear"); assert.sameValue(fields.isoYear, 1976, "isoYear");
} }
const plainYearMonth = Temporal.PlainYearMonth.from("\u2212009999-11"); for (const input of TemporalHelpers.ISO.plainYearMonthStringsValidNegativeYear()) {
TemporalHelpers.assertPlainYearMonth(plainYearMonth, -9999, 11, "M11"); const plainYearMonth = Temporal.PlainYearMonth.from(input);
const fields = plainYearMonth.getISOFields(); TemporalHelpers.assertPlainYearMonth(plainYearMonth, -9999, 11, "M11");
assert.sameValue(fields.calendar.id, "iso8601"); const fields = plainYearMonth.getISOFields();
assert.sameValue(fields.isoDay, 1, "isoDay"); assert.sameValue(fields.calendar.id, "iso8601");
assert.sameValue(fields.isoMonth, 11, "isoMonth"); assert.sameValue(fields.isoDay, 1, "isoDay");
assert.sameValue(fields.isoYear, -9999, "isoYear"); assert.sameValue(fields.isoMonth, 11, "isoMonth");
assert.sameValue(plainYearMonth.toString(), "-009999-11"); assert.sameValue(fields.isoYear, -9999, "isoYear");
assert.sameValue(plainYearMonth.toString(), "-009999-11");
}