From 596e4c6cf59a02dac434e67e408260e58a4739ba Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Fri, 28 Jun 2024 02:06:18 +0300 Subject: [PATCH 1/2] Make U+2212 MINUS SIGN an invalid sign character for offset time zone IDs These are the test adjustments corresponding to the normative PR https://github.com/tc39/ecma262/pull/3334 which reached consensus at the June 2024 TC39 meeting. --- .../offset-timezone-no-unicode-minus-sign.js | 17 +++++++++++++++++ .../format/offset-timezone-gmt-same.js | 4 +--- .../formatToParts/offset-timezone-correct.js | 6 +++--- .../resolvedOptions/offset-timezone-change.js | 3 --- 4 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 test/intl402/DateTimeFormat/offset-timezone-no-unicode-minus-sign.js diff --git a/test/intl402/DateTimeFormat/offset-timezone-no-unicode-minus-sign.js b/test/intl402/DateTimeFormat/offset-timezone-no-unicode-minus-sign.js new file mode 100644 index 00000000000..280a5c282f8 --- /dev/null +++ b/test/intl402/DateTimeFormat/offset-timezone-no-unicode-minus-sign.js @@ -0,0 +1,17 @@ +// Copyright 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +esid: sec-createdatetimeformat +description: > + A valid offset time zone identifier may not include U+2212 MINUS SIGN +---*/ + +// Note: the first character of each of these strings is U+2122 MINUS SIGN +const invalidIDs = [ + '−0900', + '−10:00', + '−05', +]; +invalidIDs.forEach((id) => { + assert.throws(RangeError, () => new Intl.DateTimeFormat("en", { timeZone: id })); +}); diff --git a/test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js b/test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js index 3da20261cd8..f8be5cd8349 100644 --- a/test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js +++ b/test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js @@ -13,9 +13,7 @@ let offsetTimeZones = { '+13:00': 'Etc/GMT-13', '-07:00': 'Etc/GMT+7', '-12': 'Etc/GMT+12', - '−0900': 'Etc/GMT+9', - '−10:00': 'Etc/GMT+10', - '−0500': 'Etc/GMT+5', + '-0900': 'Etc/GMT+9', }; let date = new Date('1995-12-17T03:24:56Z'); Object.entries(offsetTimeZones).forEach(([offsetZone, gmtZone]) => { diff --git a/test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js b/test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js index 1ae0a184b7b..701e1dad0af 100644 --- a/test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js +++ b/test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js @@ -13,9 +13,9 @@ let tests = { '+13:49': {hour: "5", minute: "13"}, '-07:56': {hour: "7", minute: "28"}, '-12': {hour: "3", minute: "24"}, - '−0914': {hour: "6", minute: "10"}, - '−10:03': {hour: "5", minute: "21"}, - '−0509': {hour: "10", minute: "15"}, + '-0914': {hour: "6", minute: "10"}, + '-10:03': {hour: "5", minute: "21"}, + '-0509': {hour: "10", minute: "15"}, }; Object.entries(tests).forEach(([timeZone, expected]) => { let df = new Intl.DateTimeFormat("en", diff --git a/test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js b/test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js index 0a11da98f70..2e10965199b 100644 --- a/test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js +++ b/test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js @@ -7,7 +7,6 @@ description: Tests that offset time zones are correctly normalized in resolvedOp let validOffsetTimeZones = { '-00': '+00:00', '-00:00': '+00:00', - '−00:00': '+00:00', '+00': '+00:00', '+0000': '+00:00', '+0300': '+03:00', @@ -17,14 +16,12 @@ let validOffsetTimeZones = { '-07:00': '-07:00', '-14': '-14:00', '-2100': '-21:00', - '−2200': '-22:00', '+0103': '+01:03', '+15:59': '+15:59', '+2227': '+22:27', '-02:32': '-02:32', '-1701': '-17:01', '-22:23': '-22:23', - '−22:53': '-22:53', }; Object.keys(validOffsetTimeZones).forEach((timeZone) => { let df = new Intl.DateTimeFormat(undefined, {timeZone}); From 776be7156e40af01644a6cee730c9267bd2de36e Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Fri, 28 Jun 2024 03:28:31 +0300 Subject: [PATCH 2/2] Temporal: Make U+2212 MINUS SIGN invalid in ISO strings These are the test adjustments corresponding to the normative PR https://github.com/tc39/ecma262/pull/3334 which reached consensus at the June 2024 TC39 meeting. --- harness/temporalHelpers.js | 4 +-- .../Temporal/Duration/from/argument-string.js | 2 -- .../compare/argument-string-minus-sign.js | 28 +++++++++++++++++ .../from/argument-string-minus-sign.js | 21 +++++++++++++ .../Temporal/Instant/from/argument-string.js | 4 +-- .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../since/argument-string-minus-sign.js | 21 +++++++++++++ .../until/argument-string-minus-sign.js | 21 +++++++++++++ .../compare/argument-string-minus-sign.js | 27 +++++++++++++++++ .../from/argument-string-minus-sign.js | 21 +++++++++++++ .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../since/argument-string-minus-sign.js | 21 +++++++++++++ .../argument-string-minus-sign.js | 21 +++++++++++++ .../argument-string-minus-sign.js | 21 +++++++++++++ .../until/argument-string-minus-sign.js | 21 +++++++++++++ .../compare/argument-string-minus-sign.js | 27 +++++++++++++++++ .../from/argument-string-minus-sign.js | 26 ++++++++-------- .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../since/argument-string-minus-sign.js | 21 +++++++++++++ .../until/argument-string-minus-sign.js | 21 +++++++++++++ .../argument-string-minus-sign.js | 21 +++++++++++++ .../from/argument-string-minus-sign.js | 21 +++++++++++++ .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../compare/argument-string-minus-sign.js | 27 +++++++++++++++++ .../from/argument-string-minus-sign.js | 21 +++++++++++++ .../PlainTime/from/argument-string.js | 2 +- .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../since/argument-string-minus-sign.js | 21 +++++++++++++ .../until/argument-string-minus-sign.js | 21 +++++++++++++ .../compare/argument-string-minus-sign.js | 27 +++++++++++++++++ .../from/argument-string-minus-sign.js | 21 +++++++++++++ .../equals/argument-string-minus-sign.js | 21 +++++++++++++ .../since/argument-string-minus-sign.js | 21 +++++++++++++ .../until/argument-string-minus-sign.js | 21 +++++++++++++ test/built-ins/Temporal/TimeZone/basic.js | 3 -- .../Temporal/TimeZone/from/argument-valid.js | 4 --- .../prototype/equals/argument-valid.js | 8 ----- .../compare/argument-string-minus-sign.js | 30 +++++++++++++++++++ .../from/argument-string-minus-sign.js | 23 ++++++++++++++ .../equals/argument-string-minus-sign.js | 24 +++++++++++++++ .../since/argument-string-minus-sign.js | 24 +++++++++++++++ .../until/argument-string-minus-sign.js | 24 +++++++++++++++ .../argument-string-minus-sign.js | 22 ++++++++++++++ .../Temporal/TimeZone/from/argument-valid.js | 2 -- test/staging/Temporal/Regex/old/instant.js | 16 +--------- test/staging/Temporal/Regex/old/plaindate.js | 2 +- .../Temporal/Regex/old/plainmonthday.js | 2 +- test/staging/Temporal/Regex/old/timezone.js | 13 ++------ .../ZonedDateTime/old/string-parsing.js | 5 ++-- 49 files changed, 812 insertions(+), 68 deletions(-) create mode 100644 test/built-ins/Temporal/Instant/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/Instant/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/Instant/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/Instant/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/Instant/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDate/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDateTime/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainMonthDay/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainTime/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainTime/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainTime/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainTime/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainYearMonth/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainYearMonth/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/compare/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/from/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-string-minus-sign.js create mode 100644 test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-minus-sign.js diff --git a/harness/temporalHelpers.js b/harness/temporalHelpers.js index 91f05cbd8aa..4fe2ca12585 100644 --- a/harness/temporalHelpers.js +++ b/harness/temporalHelpers.js @@ -2130,7 +2130,7 @@ var TemporalHelpers = { "1976-11-01T00:00:00+05:00", "197611", "+00197611", - "1976-11-18T15:23:30.1\u221202:00", + "1976-11-18T15:23:30.1-02:00", "1976-11-18T152330.1+00:00", "19761118T15:23:30.1+00:00", "1976-11-18T15:23:30.1+0000", @@ -2157,7 +2157,7 @@ var TemporalHelpers = { */ plainYearMonthStringsValidNegativeYear() { return [ - "\u2212009999-11", + "-009999-11", ]; }, } diff --git a/test/built-ins/Temporal/Duration/from/argument-string.js b/test/built-ins/Temporal/Duration/from/argument-string.js index e41100b3d69..25a18da3c39 100644 --- a/test/built-ins/Temporal/Duration/from/argument-string.js +++ b/test/built-ins/Temporal/Duration/from/argument-string.js @@ -40,8 +40,6 @@ TemporalHelpers.assertDuration(Temporal.Duration.from("+P1D"), 0, 0, 0, 1, 0, 0, 0, 0, 0, 0); TemporalHelpers.assertDuration(Temporal.Duration.from("-P1D"), 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); -TemporalHelpers.assertDuration(Temporal.Duration.from("\u2212P1D"), - 0, 0, 0, -1, 0, 0, 0, 0, 0, 0); TemporalHelpers.assertDuration(Temporal.Duration.from("-P1Y1M1W1DT1H1M1.123456789S"), -1, -1, -1, -1, -1, -1, -1, -123, -456, -789); TemporalHelpers.assertDuration(Temporal.Duration.from("PT100M"), diff --git a/test/built-ins/Temporal/Instant/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/Instant/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..d1a44d81547 --- /dev/null +++ b/test/built-ins/Temporal/Instant/compare/argument-string-minus-sign.js @@ -0,0 +1,28 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.instant.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +const epoch = new Temporal.Instant(0n); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.Instant.compare(arg, epoch), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.Instant.compare(epoch, arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/Instant/from/argument-string-minus-sign.js b/test/built-ins/Temporal/Instant/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..04bf1fa17f1 --- /dev/null +++ b/test/built-ins/Temporal/Instant/from/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.instant.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.Instant.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/Instant/from/argument-string.js b/test/built-ins/Temporal/Instant/from/argument-string.js index 923158e21ca..56ea3e8e40a 100644 --- a/test/built-ins/Temporal/Instant/from/argument-string.js +++ b/test/built-ins/Temporal/Instant/from/argument-string.js @@ -19,8 +19,8 @@ const tests = [ ['1976-11-18T15:23:30.12345678Z', 217178610123456780n], ['1976-11-18T15:23:30.123456789Z', 217178610123456789n], ['1976-11-18T15:23:30,12Z', 217178610120000000n], - ['1976-11-18T15:23:30.12\u221202:00', 217185810120000000n], - ['\u2212009999-11-18T15:23:30.12Z', -377677326989880000000n], + ['1976-11-18T15:23:30.12-02:00', 217185810120000000n], + ['-009999-11-18T15:23:30.12Z', -377677326989880000000n], ['19761118T15:23:30.1+00:00', 217178610100000000n], ['1976-11-18T152330.1+00:00', 217178610100000000n], ['1976-11-18T15:23:30.1+0000', 217178610100000000n], diff --git a/test/built-ins/Temporal/Instant/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/Instant/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..7f92095ebc0 --- /dev/null +++ b/test/built-ins/Temporal/Instant/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.instant.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.Instant(0n); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/Instant/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/Instant/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..2fb0e3806ae --- /dev/null +++ b/test/built-ins/Temporal/Instant/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.instant.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.Instant(0n); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/Instant/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/Instant/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..df49edad30d --- /dev/null +++ b/test/built-ins/Temporal/Instant/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.instant.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.Instant(0n); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..7d2911abb6d --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/compare/argument-string-minus-sign.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainDate.compare(arg, new Temporal.PlainDate(1976, 11, 18)), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.PlainDate.compare(new Temporal.PlainDate(1976, 11, 18), arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/from/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..8499a9dace6 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/from/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainDate.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..6cf3826be30 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDate(2000, 5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..0cc82019413 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDate(2000, 5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-minus-sign.js new file mode 100644 index 00000000000..01bce846f85 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/prototype/toPlainDateTime/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.prototype.toplaindatetime +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDate(2000, 5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.toPlainDateTime(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-minus-sign.js new file mode 100644 index 00000000000..f8a6a7a5995 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/prototype/toZonedDateTime/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.prototype.tozoneddatetime +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDate(2000, 5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.toZonedDateTime({ plainTime: arg, timeZone: "UTC" }), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..12bc758f758 --- /dev/null +++ b/test/built-ins/Temporal/PlainDate/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindate.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDate(2000, 5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..7f7c8c669cd --- /dev/null +++ b/test/built-ins/Temporal/PlainDateTime/compare/argument-string-minus-sign.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindatetime.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainDateTime.compare(arg, new Temporal.PlainDateTime(1976, 11, 18)), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.PlainDateTime.compare(new Temporal.PlainDateTime(1976, 11, 18), arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js index eef062b12e6..3f774a41a19 100644 --- a/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js +++ b/test/built-ins/Temporal/PlainDateTime/from/argument-string-minus-sign.js @@ -1,21 +1,21 @@ -// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// Copyright (C) 2024 Igalia, S.L. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-temporal.plaindatetime.from -description: Non-ASCII minus sign is acceptable +description: Non-ASCII minus sign is not acceptable features: [Temporal] -includes: [temporalHelpers.js] ---*/ -TemporalHelpers.assertPlainDateTime( - Temporal.PlainDateTime.from("1976-11-18T15:23:30.12\u221202:00"), - 1976, 11, "M11", 18, 15, 23, 30, 120, 0, 0, - "variant minus sign (offset)" -); +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; -TemporalHelpers.assertPlainDateTime( - Temporal.PlainDateTime.from("\u2212009999-11-18T15:23:30.12"), - -9999, 11, "M11", 18, 15, 23, 30, 120, 0, 0, - "variant minus sign (leading minus)" -); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainDateTime.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..406cbe759c1 --- /dev/null +++ b/test/built-ins/Temporal/PlainDateTime/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindatetime.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..6d10aceb6f1 --- /dev/null +++ b/test/built-ins/Temporal/PlainDateTime/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindatetime.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..4bcb2ca44e8 --- /dev/null +++ b/test/built-ins/Temporal/PlainDateTime/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindatetime.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-minus-sign.js new file mode 100644 index 00000000000..f19e7e451ff --- /dev/null +++ b/test/built-ins/Temporal/PlainDateTime/prototype/withPlainTime/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaindatetime.prototype.withplaintime +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.withPlainTime(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainMonthDay/from/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainMonthDay/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..657475e9f5a --- /dev/null +++ b/test/built-ins/Temporal/PlainMonthDay/from/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainmonthday.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainMonthDay.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..2dd168d6f5d --- /dev/null +++ b/test/built-ins/Temporal/PlainMonthDay/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainmonthday.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainMonthDay(5, 2); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainTime/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainTime/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..ebf78bb0b2f --- /dev/null +++ b/test/built-ins/Temporal/PlainTime/compare/argument-string-minus-sign.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaintime.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainTime.compare(arg, new Temporal.PlainTime(12, 34, 56, 987, 654, 321)), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.PlainTime.compare(new Temporal.PlainTime(12, 34, 56, 987, 654, 321), arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/PlainTime/from/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainTime/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..bccf334e143 --- /dev/null +++ b/test/built-ins/Temporal/PlainTime/from/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaintime.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainTime.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainTime/from/argument-string.js b/test/built-ins/Temporal/PlainTime/from/argument-string.js index a8225d48b02..81c41c63e9f 100644 --- a/test/built-ins/Temporal/PlainTime/from/argument-string.js +++ b/test/built-ins/Temporal/PlainTime/from/argument-string.js @@ -24,7 +24,7 @@ const tests = [ ["1976-11-18T15:23:30.12345678", 15, 23, 30, 123, 456, 780], ["1976-11-18T15:23:30.123456789", 15, 23, 30, 123, 456, 789], ["1976-11-18T15:23:30,12", 15, 23, 30, 120, 0, 0], - ["1976-11-18T15:23:30.12\u221202:00", 15, 23, 30, 120, 0, 0], + ["1976-11-18T15:23:30.12-02:00", 15, 23, 30, 120, 0, 0], ["152330", 15, 23, 30, 0, 0, 0], ["152330.1", 15, 23, 30, 100, 0, 0], ["152330-08", 15, 23, 30, 0, 0, 0], diff --git a/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..c8a91e82f42 --- /dev/null +++ b/test/built-ins/Temporal/PlainTime/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaintime.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..ce292c3c74d --- /dev/null +++ b/test/built-ins/Temporal/PlainTime/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaintime.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..4742d9d3791 --- /dev/null +++ b/test/built-ins/Temporal/PlainTime/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plaintime.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainTime(12, 34, 56, 987, 654, 321); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainYearMonth/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainYearMonth/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..c77a9053e8d --- /dev/null +++ b/test/built-ins/Temporal/PlainYearMonth/compare/argument-string-minus-sign.js @@ -0,0 +1,27 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainyearmonth.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainYearMonth.compare(arg, new Temporal.PlainYearMonth(2019, 6)), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.PlainYearMonth.compare(new Temporal.PlainYearMonth(2019, 6), arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/PlainYearMonth/from/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainYearMonth/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..888b3019ab4 --- /dev/null +++ b/test/built-ins/Temporal/PlainYearMonth/from/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainyearmonth.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.PlainYearMonth.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..ed2fd4cdb4a --- /dev/null +++ b/test/built-ins/Temporal/PlainYearMonth/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainyearmonth.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainYearMonth(2000, 5); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..c0760fe0b4e --- /dev/null +++ b/test/built-ins/Temporal/PlainYearMonth/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainyearmonth.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainYearMonth(2000, 5); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..5b7ba27c2b0 --- /dev/null +++ b/test/built-ins/Temporal/PlainYearMonth/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,21 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.plainyearmonth.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const instance = new Temporal.PlainYearMonth(2000, 5); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/TimeZone/basic.js b/test/built-ins/Temporal/TimeZone/basic.js index 5b12b574667..6cf1ebefc26 100644 --- a/test/built-ins/Temporal/TimeZone/basic.js +++ b/test/built-ins/Temporal/TimeZone/basic.js @@ -13,9 +13,6 @@ const valid = [ ["+0330", "+03:30"], ["-0650", "-06:50"], ["-08", "-08:00"], - ["\u221201:00", "-01:00"], - ["\u22120650", "-06:50"], - ["\u221208", "-08:00"], ["UTC"], ]; for (const [zone, id = zone] of valid) { diff --git a/test/built-ins/Temporal/TimeZone/from/argument-valid.js b/test/built-ins/Temporal/TimeZone/from/argument-valid.js index 4ca5998d2a2..51290b4a748 100644 --- a/test/built-ins/Temporal/TimeZone/from/argument-valid.js +++ b/test/built-ins/Temporal/TimeZone/from/argument-valid.js @@ -13,12 +13,8 @@ const valids = [ ["+0330", "+03:30"], ["-0650", "-06:50"], ["-08", "-08:00"], - ["\u221201:00", "-01:00"], - ["\u22120650", "-06:50"], - ["\u221208", "-08:00"], ["UTC"], ["1994-11-05T08:15:30-05:00", "-05:00"], - ["1994-11-05T08:15:30\u221205:00", "-05:00"], ["1994-11-05T13:15:30Z", "UTC"], ]; diff --git a/test/built-ins/Temporal/TimeZone/prototype/equals/argument-valid.js b/test/built-ins/Temporal/TimeZone/prototype/equals/argument-valid.js index 6148da71006..5b9c79a00b2 100644 --- a/test/built-ins/Temporal/TimeZone/prototype/equals/argument-valid.js +++ b/test/built-ins/Temporal/TimeZone/prototype/equals/argument-valid.js @@ -11,11 +11,7 @@ const validsEqual = [ ["+0330", "+03:30"], ["-0650", "-06:50"], ["-08", "-08:00"], - ["\u221201:00", "-01:00"], - ["\u22120650", "-06:50"], - ["\u221208", "-08:00"], ["1994-11-05T08:15:30-05:00", "-05:00"], - ["1994-11-05T08:15:30\u221205:00", "-05:00"], ["1994-11-05T13:15:30Z", "UTC"] ]; @@ -30,11 +26,7 @@ const validsNotEqual = [ ["+0330", "+03:31"], ["-0650", "-06:51"], ["-08", "-08:01"], - ["\u221201:00", "-01:01"], - ["\u22120650", "-06:51"], - ["\u221208", "-08:01"], ["1994-11-05T08:15:30-05:00", "-05:01"], - ["1994-11-05T08:15:30\u221205:00", "-05:01"] ]; for (const [valid, canonical] of validsNotEqual) { diff --git a/test/built-ins/Temporal/ZonedDateTime/compare/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/compare/argument-string-minus-sign.js new file mode 100644 index 00000000000..4af6d7376fb --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/compare/argument-string-minus-sign.js @@ -0,0 +1,30 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.compare +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "1976-11-18T15:23:30.12-02:00[\u221202:00]", + "1976-11-18T15:23:30.12\u221202:00[\u221202:00]", + "\u2212009999-11-18T15:23:30.12[UTC]", +]; + +const datetime = new Temporal.ZonedDateTime(0n, "UTC"); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.ZonedDateTime.compare(arg, datetime), + `variant minus sign: ${arg} (first argument)` + ); + + assert.throws( + RangeError, + () => Temporal.ZonedDateTime.compare(datetime, arg), + `variant minus sign: ${arg} (second argument)` + ); +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/from/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/from/argument-string-minus-sign.js new file mode 100644 index 00000000000..50fda2e460b --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/from/argument-string-minus-sign.js @@ -0,0 +1,23 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.from +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "1976-11-18T15:23:30.12-02:00[\u221202:00]", + "1976-11-18T15:23:30.12\u221202:00[\u221202:00]", + "\u2212009999-11-18T15:23:30.12[UTC]", +]; + +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => Temporal.ZonedDateTime.from(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-string-minus-sign.js new file mode 100644 index 00000000000..72d9d2789a5 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/equals/argument-string-minus-sign.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.equals +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "1976-11-18T15:23:30.12-02:00[\u221202:00]", + "1976-11-18T15:23:30.12\u221202:00[\u221202:00]", + "\u2212009999-11-18T15:23:30.12[UTC]", +]; +const timeZone = "UTC"; +const instance = new Temporal.ZonedDateTime(0n, timeZone); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.equals(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-string-minus-sign.js new file mode 100644 index 00000000000..fa601af25ad --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/since/argument-string-minus-sign.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.since +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "1976-11-18T15:23:30.12-02:00[\u221202:00]", + "1976-11-18T15:23:30.12\u221202:00[\u221202:00]", + "\u2212009999-11-18T15:23:30.12[UTC]", +]; +const timeZone = "UTC"; +const instance = new Temporal.ZonedDateTime(0n, timeZone); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.since(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-string-minus-sign.js new file mode 100644 index 00000000000..81590c68ab7 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/until/argument-string-minus-sign.js @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.until +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "1976-11-18T15:23:30.12-02:00[\u221202:00]", + "1976-11-18T15:23:30.12\u221202:00[\u221202:00]", + "\u2212009999-11-18T15:23:30.12[UTC]", +]; +const timeZone = "UTC"; +const instance = new Temporal.ZonedDateTime(0n, timeZone); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.until(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-minus-sign.js b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-minus-sign.js new file mode 100644 index 00000000000..582786ed3e2 --- /dev/null +++ b/test/built-ins/Temporal/ZonedDateTime/prototype/withPlainTime/argument-string-minus-sign.js @@ -0,0 +1,22 @@ +// Copyright (C) 2024 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.zoneddatetime.prototype.withplaintime +description: Non-ASCII minus sign is not acceptable +features: [Temporal] +---*/ + +const invalidStrings = [ + "1976-11-18T15:23:30.12\u221202:00", + "\u2212009999-11-18T15:23:30.12", +]; +const timeZone = "UTC"; +const instance = new Temporal.ZonedDateTime(0n, timeZone); +invalidStrings.forEach((arg) => { + assert.throws( + RangeError, + () => instance.withPlainTime(arg), + `variant minus sign: ${arg}` + ); +}); diff --git a/test/intl402/Temporal/TimeZone/from/argument-valid.js b/test/intl402/Temporal/TimeZone/from/argument-valid.js index 7b10cf381d8..3671857ab1f 100644 --- a/test/intl402/Temporal/TimeZone/from/argument-valid.js +++ b/test/intl402/Temporal/TimeZone/from/argument-valid.js @@ -18,8 +18,6 @@ const valids = [ ["etc/gmt", "Etc/GMT"], ["1994-11-05T08:15:30-05:00[America/New_York]", "America/New_York"], ["1994-11-05T08:15:30-05[America/New_York]", "America/New_York"], - ["1994-11-05T08:15:30\u221205:00[America/New_York]", "America/New_York"], - ["1994-11-05T08:15:30\u221205[America/New_York]", "America/New_York"], ]; for (const [valid, canonical = valid] of valids) { diff --git a/test/staging/Temporal/Regex/old/instant.js b/test/staging/Temporal/Regex/old/instant.js index cfb8254728d..09e810ea550 100644 --- a/test/staging/Temporal/Regex/old/instant.js +++ b/test/staging/Temporal/Regex/old/instant.js @@ -175,21 +175,7 @@ test("1976-11-18T15:23:30,1234Z", [ 123, 400 ]); -[ - "\u221204:00", - "\u221204", - "\u22120400" -].forEach(offset => test(`1976-11-18T15:23:30.1234${ offset }`, [ - 1976, - 11, - 18, - 19, - 23, - 30, - 123, - 400 -])); -test("\u2212009999-11-18T15:23:30.1234Z", [ +test("-009999-11-18T15:23:30.1234Z", [ -9999, 11, 18, diff --git a/test/staging/Temporal/Regex/old/plaindate.js b/test/staging/Temporal/Regex/old/plaindate.js index b726f0e0e73..87b959f38fb 100644 --- a/test/staging/Temporal/Regex/old/plaindate.js +++ b/test/staging/Temporal/Regex/old/plaindate.js @@ -54,7 +54,7 @@ test("1976-11-18T15:23:30,1234", [ 11, 18 ]); -test("\u2212009999-11-18", [ +test("-009999-11-18", [ -9999, 11, 18 diff --git a/test/staging/Temporal/Regex/old/plainmonthday.js b/test/staging/Temporal/Regex/old/plainmonthday.js index e68ef73c564..98ddc0ba199 100644 --- a/test/staging/Temporal/Regex/old/plainmonthday.js +++ b/test/staging/Temporal/Regex/old/plainmonthday.js @@ -49,7 +49,7 @@ function generateTest(dateTimeString, zoneString) { ])); [ "1976-11-18T15:23:30,1234", - "\u2212009999-11-18", + "-009999-11-18", "19761118", "+199999-11-18", "+1999991118", diff --git a/test/staging/Temporal/Regex/old/timezone.js b/test/staging/Temporal/Regex/old/timezone.js index 2df45343e50..fb5efe10d58 100644 --- a/test/staging/Temporal/Regex/old/timezone.js +++ b/test/staging/Temporal/Regex/old/timezone.js @@ -44,11 +44,6 @@ function generateTest(dateTimeString, zoneString, expectedName) { generateTest("1976-11-18T15:23", "z", "UTC"); test("1976-11-18T15:23:30,1234Z", "UTC"); test("1976-11-18T15:23+000000,0[UTC]", "UTC"); -[ - "\u221204:00", - "\u221204", - "\u22120400" -].forEach(offset => test(`1976-11-18T15:23${ offset }`, "-04:00")); [ "1976-11-18T152330", "1976-11-18T152330.1234", @@ -76,12 +71,8 @@ test("+00", "+00:00"); test("-00", "+00:00"); test("+03", "+03:00"); test("-03", "-03:00"); -test("\u22120000", "+00:00"); -test("\u221200:00", "+00:00"); -test("\u221200", "+00:00"); -test("\u22120300", "-03:00"); -test("\u221203:00", "-03:00"); -test("\u221203", "-03:00"); +test("-0300", "-03:00"); +test("-03:00", "-03:00"); test("1976-11-18T15:23:30.123456789Z[u-ca=iso8601]", "UTC"); test("1976-11-18T15:23:30.123456789-04:00[u-ca=iso8601]", "-04:00"); test("1976-11-18T15:23:30.123456789[UTC][u-ca=iso8601]", "UTC"); diff --git a/test/staging/Temporal/ZonedDateTime/old/string-parsing.js b/test/staging/Temporal/ZonedDateTime/old/string-parsing.js index 0699b8072a4..e2c81478ed8 100644 --- a/test/staging/Temporal/ZonedDateTime/old/string-parsing.js +++ b/test/staging/Temporal/ZonedDateTime/old/string-parsing.js @@ -21,9 +21,8 @@ assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456789- // variant decimal separator assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30,12-08:00[-08:00]") }`, "1976-11-18T15:23:30.12-08:00[-08:00]"); -// variant minus sign -assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12\u221208:00[-08:00]") }`, "1976-11-18T15:23:30.12-08:00[-08:00]"); -assert.sameValue(`${ Temporal.ZonedDateTime.from("\u2212009999-11-18T15:23:30.12+00:00[UTC]") }`, "-009999-11-18T15:23:30.12+00:00[UTC]"); +// negative extended year +assert.sameValue(`${ Temporal.ZonedDateTime.from("-009999-11-18T15:23:30.12+00:00[UTC]") }`, "-009999-11-18T15:23:30.12+00:00[UTC]"); // mixture of basic and extended format [