Temporal: Split up ZonedDateTime/old/string-parsing.js and move out of staging

This commit is contained in:
Tim Chevalier 2024-10-29 17:23:37 -07:00 committed by Philip Chimento
parent 8cc0560713
commit ccf8977b1c
10 changed files with 149 additions and 67 deletions

View File

@ -0,0 +1,28 @@
// Copyright (C) 2022 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: Mixture of basic and extended format.
includes: [temporalHelpers.js]
features: [Temporal]
---*/
[
"1976-11-18T152330.1-08:00[-08:00]",
"19761118T15:23:30.1-08:00[-08:00]",
"1976-11-18T15:23:30.1-0800[-08:00]",
"1976-11-18T152330.1-0800[-08:00]",
"19761118T15:23:30.1-0800[-08:00]",
"19761118T152330.1-08:00[-08:00]",
"19761118T152330.1-0800[-08:00]",
"+001976-11-18T152330.1-08:00[-08:00]",
"+0019761118T15:23:30.1-08:00[-08:00]",
"+001976-11-18T15:23:30.1-0800[-08:00]",
"+001976-11-18T152330.1-0800[-08:00]",
"+0019761118T15:23:30.1-0800[-08:00]",
"+0019761118T152330.1-08:00[-08:00]",
"+0019761118T152330.1-0800[-08:00]"
].forEach(input => TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from(input),
new Temporal.ZonedDateTime(217207410100000000n, "-08:00")));

View File

@ -0,0 +1,37 @@
// Copyright (C) 2022 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: from() can parse any number of decimal places
includes: [temporalHelpers.js]
features: [Temporal]
---*/
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410100000000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410120000000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123000000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1234-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123400000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12345-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123450000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123456000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1234567-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123456700n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12345678-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123456780n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456789-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410123456789n, "-08:00"));

View File

@ -0,0 +1,13 @@
// Copyright (C) 2022 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: Can parse negative extended year
includes: [temporalHelpers.js]
features: [Temporal]
---*/
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("-009999-11-18T15:23:30.12+00:00[UTC]"),
new Temporal.ZonedDateTime(-377677326989880000000n, "UTC"));

View File

@ -0,0 +1,11 @@
// Copyright (C) 2022 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: No junk at end of string.
features: [Temporal]
---*/
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456789-08:00[-08:00]junk"))

View File

@ -0,0 +1,19 @@
// Copyright (C) 2022 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: Optional parts.
includes: [temporalHelpers.js]
features: [Temporal]
---*/
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30-08[-08:00]"),
new Temporal.ZonedDateTime(217207410000000000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15-08:00[-08:00]"),
new Temporal.ZonedDateTime(217206000000000000n, "-08:00"));
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("2020-01-01[+09:00]"),
new Temporal.ZonedDateTime(1577804400000000000n, "+09:00"));

View File

@ -0,0 +1,13 @@
// Copyright (C) 2022 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: Can parse variant decimal separator.
includes: [temporalHelpers.js]
features: [Temporal]
---*/
TemporalHelpers.assertZonedDateTimesEqual(
Temporal.ZonedDateTime.from("1976-11-18T15:23:30,12-08:00[-08:00]"),
new Temporal.ZonedDateTime(217207410120000000n, "-08:00"));

View File

@ -0,0 +1,16 @@
// Copyright (C) 2022 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: Throw on bad value for disambiguation
features: [Temporal]
---*/
[
"",
"EARLIER",
"balance"
].forEach(disambiguation => {
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-11-01T04:00[-08:00]", { disambiguation }));
});

View File

@ -0,0 +1,10 @@
// Copyright (C) 2022 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: Constrain overflow option has no effect on invalid ISO string.
features: [Temporal]
---*/
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-13-34T24:60[-08:00]", { overflow: "constrain" }));

View File

@ -18,3 +18,5 @@ const obj = {
assert.throws(RangeError, () => Temporal.ZonedDateTime.from(obj));
assert.throws(RangeError, () => Temporal.ZonedDateTime.from(obj, { offset: "reject" }));
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-03-08T01:00-04:00[UTC]"));
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-03-08T01:00-04:00[UTC]", { offset: "reject" }));

View File

@ -1,67 +0,0 @@
// Copyright (C) 2018 Bloomberg LP. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal-zoneddatetime-objects
description: string parsing
features: [Temporal]
---*/
// any number of decimal places
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1-08:00[-08:00]") }`, "1976-11-18T15:23:30.1-08:00[-08:00]");
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]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123-08:00[-08:00]") }`, "1976-11-18T15:23:30.123-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1234-08:00[-08:00]") }`, "1976-11-18T15:23:30.1234-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12345-08:00[-08:00]") }`, "1976-11-18T15:23:30.12345-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456-08:00[-08:00]") }`, "1976-11-18T15:23:30.123456-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.1234567-08:00[-08:00]") }`, "1976-11-18T15:23:30.1234567-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.12345678-08:00[-08:00]") }`, "1976-11-18T15:23:30.12345678-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456789-08:00[-08:00]") }`, "1976-11-18T15:23:30.123456789-08:00[-08:00]");
// 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]");
// 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
[
"1976-11-18T152330.1-08:00[-08:00]",
"19761118T15:23:30.1-08:00[-08:00]",
"1976-11-18T15:23:30.1-0800[-08:00]",
"1976-11-18T152330.1-0800[-08:00]",
"19761118T15:23:30.1-0800[-08:00]",
"19761118T152330.1-08:00[-08:00]",
"19761118T152330.1-0800[-08:00]",
"+001976-11-18T152330.1-08:00[-08:00]",
"+0019761118T15:23:30.1-08:00[-08:00]",
"+001976-11-18T15:23:30.1-0800[-08:00]",
"+001976-11-18T152330.1-0800[-08:00]",
"+0019761118T15:23:30.1-0800[-08:00]",
"+0019761118T152330.1-08:00[-08:00]",
"+0019761118T152330.1-0800[-08:00]"
].forEach(input => assert.sameValue(`${ Temporal.ZonedDateTime.from(input) }`, "1976-11-18T15:23:30.1-08:00[-08:00]"));
// optional parts
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15:23:30-08[-08:00]") }`, "1976-11-18T15:23:30-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("1976-11-18T15-08:00[-08:00]") }`, "1976-11-18T15:00:00-08:00[-08:00]");
assert.sameValue(`${ Temporal.ZonedDateTime.from("2020-01-01[+09:00]") }`, "2020-01-01T00:00:00+09:00[+09:00]");
// no junk at end of string
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("1976-11-18T15:23:30.123456789-08:00[-08:00]junk"))
// constrain has no effect on invalid ISO string
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-13-34T24:60[-08:00]", { overflow: "constrain" }));
// { offset: 'reject' } throws if offset does not match IANA time zone
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-03-08T01:00-04:00[UTC]"));
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-03-08T01:00-04:00[UTC]", { offset: "reject" }));
// throw when bad disambiguation
[
"",
"EARLIER",
"balance"
].forEach(disambiguation => {
assert.throws(RangeError, () => Temporal.ZonedDateTime.from("2020-11-01T04:00[-08:00]", { disambiguation }));
});