mirror of
https://github.com/tc39/test262.git
synced 2025-07-24 22:45:10 +02:00
Add test for ECMA402 PR 788 (#3917)
* Add test for ECMA402 PR 788 https://github.com/tc39/ecma402/pull/788 * Fix misunderstanding about "+00:00" * Fix lint * Swap actual, expected position * Update test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-basic.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/constructor-invalid-offset-timezone.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/constructor-invalid-offset-timezone.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/constructor-invalid-offset-timezone.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> * Update test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js Co-authored-by: Richard Gibson <richard.gibson@gmail.com> --------- Co-authored-by: Richard Gibson <richard.gibson@gmail.com>
This commit is contained in:
parent
b5fd799fa0
commit
6789b50cce
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-createdatetimeformat
|
||||||
|
description: Tests that invalid offset time zones are rejected.
|
||||||
|
---*/
|
||||||
|
let invalidOffsetTimeZones = [
|
||||||
|
'+3',
|
||||||
|
'+24',
|
||||||
|
'+23:0',
|
||||||
|
'+130',
|
||||||
|
'+13234',
|
||||||
|
'+135678',
|
||||||
|
'-7',
|
||||||
|
'-10.50',
|
||||||
|
'-10,50',
|
||||||
|
'-24',
|
||||||
|
'-014',
|
||||||
|
'-210',
|
||||||
|
'-2400',
|
||||||
|
'-1:10',
|
||||||
|
'-21:0',
|
||||||
|
'+0:003',
|
||||||
|
'+15:59:00',
|
||||||
|
'+15:59.50',
|
||||||
|
'+15:59,50',
|
||||||
|
'+222700',
|
||||||
|
'-02:3200',
|
||||||
|
'-170100',
|
||||||
|
'-22230',
|
||||||
|
];
|
||||||
|
invalidOffsetTimeZones.forEach((timeZone) => {
|
||||||
|
assert.throws(RangeError, function() {
|
||||||
|
new Intl.DateTimeFormat(undefined, {timeZone});
|
||||||
|
}, timeZone + ":");
|
||||||
|
});
|
27
test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js
vendored
Normal file
27
test/intl402/DateTimeFormat/prototype/format/offset-timezone-gmt-same.js
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-createdatetimeformat
|
||||||
|
description: >
|
||||||
|
Tests that date and time formatting in an offset time zone
|
||||||
|
matches that in the equivalent Etc/GMT±n time zone.
|
||||||
|
---*/
|
||||||
|
let offsetTimeZones = {
|
||||||
|
'+0300': 'Etc/GMT-3',
|
||||||
|
'+1400': 'Etc/GMT-14',
|
||||||
|
'+02': 'Etc/GMT-2',
|
||||||
|
'+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',
|
||||||
|
};
|
||||||
|
let date = new Date('1995-12-17T03:24:56Z');
|
||||||
|
Object.entries(offsetTimeZones).forEach(([offsetZone, gmtZone]) => {
|
||||||
|
let offsetDf = new Intl.DateTimeFormat("en",
|
||||||
|
{timeZone: offsetZone, dateStyle: "short", timeStyle: "short"});
|
||||||
|
let gmtDf = new Intl.DateTimeFormat("en",
|
||||||
|
{timeZone: gmtZone, dateStyle: "short", timeStyle: "short"});
|
||||||
|
assert.sameValue(offsetDf.format(date), gmtDf.format(date), `${offsetZone} vs. ${gmtZone}:`);
|
||||||
|
});
|
28
test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js
vendored
Normal file
28
test/intl402/DateTimeFormat/prototype/formatToParts/offset-timezone-correct.js
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-createdatetimeformat
|
||||||
|
description: >
|
||||||
|
Tests that formatted hour and minute are correct for offset time zones.
|
||||||
|
---*/
|
||||||
|
let date = new Date('1995-12-17T03:24:56Z');
|
||||||
|
let tests = {
|
||||||
|
'+0301': {hour: "6", minute: "25"},
|
||||||
|
'+1412': {hour: "5", minute: "36"},
|
||||||
|
'+02': {hour: "5", minute: "24"},
|
||||||
|
'+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"},
|
||||||
|
};
|
||||||
|
Object.entries(tests).forEach(([timeZone, expected]) => {
|
||||||
|
let df = new Intl.DateTimeFormat("en",
|
||||||
|
{timeZone, timeStyle: "short"});
|
||||||
|
let res = df.formatToParts(date);
|
||||||
|
let hour = res.filter((t) => t.type === "hour")[0].value
|
||||||
|
let minute = res.filter((t) => t.type === "minute")[0].value
|
||||||
|
assert.sameValue(hour, expected.hour, `hour in ${timeZone} time zone:`);
|
||||||
|
assert.sameValue(minute, expected.minute, `minute in ${timeZone} time zone:`);
|
||||||
|
});
|
28
test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-basic.js
vendored
Normal file
28
test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-basic.js
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-createdatetimeformat
|
||||||
|
description: Tests that offset time zones are correctly normalized in resolvedOptions() output.
|
||||||
|
---*/
|
||||||
|
let validOffsetTimeZones = [
|
||||||
|
'+03',
|
||||||
|
'+13',
|
||||||
|
'+23',
|
||||||
|
'-07',
|
||||||
|
'-14',
|
||||||
|
'-21',
|
||||||
|
'+01:03',
|
||||||
|
'+15:59',
|
||||||
|
'+22:27',
|
||||||
|
'-02:32',
|
||||||
|
'-17:01',
|
||||||
|
'-22:23',
|
||||||
|
];
|
||||||
|
validOffsetTimeZones.forEach((timeZone) => {
|
||||||
|
let df = new Intl.DateTimeFormat(undefined, {timeZone});
|
||||||
|
let expected = timeZone;
|
||||||
|
if (expected.length == 3) {
|
||||||
|
expected += ":00";
|
||||||
|
}
|
||||||
|
assert.sameValue(df.resolvedOptions().timeZone, expected, timeZone);
|
||||||
|
});
|
33
test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js
vendored
Normal file
33
test/intl402/DateTimeFormat/prototype/resolvedOptions/offset-timezone-change.js
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2023 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-createdatetimeformat
|
||||||
|
description: Tests that offset time zones are correctly normalized in resolvedOptions() output.
|
||||||
|
---*/
|
||||||
|
let validOffsetTimeZones = {
|
||||||
|
'-00': '+00:00',
|
||||||
|
'-00:00': '+00:00',
|
||||||
|
'−00:00': '+00:00',
|
||||||
|
'+00': '+00:00',
|
||||||
|
'+0000': '+00:00',
|
||||||
|
'+0300': '+03:00',
|
||||||
|
'+03:00': '+03:00',
|
||||||
|
'+13:00': '+13:00',
|
||||||
|
'+2300': '+23:00',
|
||||||
|
'-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});
|
||||||
|
let expected = validOffsetTimeZones[timeZone];
|
||||||
|
assert.sameValue(df.resolvedOptions().timeZone, expected, timeZone);
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user