mirror of https://github.com/tc39/test262.git
Add basic tests for Intl.DurationFormat accepting Temporal.Duration
This commit is contained in:
parent
6310295c80
commit
e8c771e9df
49
test/intl402/DurationFormat/prototype/format/taint-temporal-duration-prototype.js
vendored
Normal file
49
test/intl402/DurationFormat/prototype/format/taint-temporal-duration-prototype.js
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.format
|
||||
description: >
|
||||
Ensure Temporal.Duration.prototype getters aren't called.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
var duration = new Temporal.Duration(
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
||||
);
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
var expected = formatter.format(duration);
|
||||
|
||||
// Taint all Temporal.Duration.prototype getters.
|
||||
for (var prop of [
|
||||
"years",
|
||||
"months",
|
||||
"weeks",
|
||||
"days",
|
||||
"hours",
|
||||
"minutes",
|
||||
"seconds",
|
||||
"milliseconds",
|
||||
"microseconds",
|
||||
"nanoseconds",
|
||||
]) {
|
||||
// Ensure the property is present.
|
||||
var desc = Object.getOwnPropertyDescriptor(Temporal.Duration.prototype, prop);
|
||||
assert.notSameValue(
|
||||
desc,
|
||||
undefined,
|
||||
"Descriptor not found: " + prop
|
||||
);
|
||||
|
||||
Object.defineProperty(Temporal.Duration.prototype, prop, {
|
||||
get() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var actual = formatter.format(duration);
|
||||
|
||||
assert.sameValue(actual, expected);
|
41
test/intl402/DurationFormat/prototype/format/temporal-duration-object-arg.js
vendored
Normal file
41
test/intl402/DurationFormat/prototype/format/temporal-duration-object-arg.js
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.format
|
||||
description: >
|
||||
Temporal.Duration objects can be passed to format.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
var durations = [
|
||||
{
|
||||
object: new Temporal.Duration(),
|
||||
durationLike: {
|
||||
years: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
object: new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
|
||||
durationLike: {
|
||||
years: 1,
|
||||
months: 2,
|
||||
weeks: 3,
|
||||
days: 4,
|
||||
hours: 5,
|
||||
minutes: 6,
|
||||
seconds: 7,
|
||||
milliseconds: 8,
|
||||
microseconds: 9,
|
||||
nanoseconds: 10,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
for (var {object, durationLike} of durations) {
|
||||
var expected = formatter.format(durationLike);
|
||||
var actual = formatter.format(object);
|
||||
assert.sameValue(actual, expected, `"${object}"`);
|
||||
}
|
41
test/intl402/DurationFormat/prototype/format/temporal-duration-string-arg.js
vendored
Normal file
41
test/intl402/DurationFormat/prototype/format/temporal-duration-string-arg.js
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.format
|
||||
description: >
|
||||
Temporal duration strings can be passed to format.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
var durations = [
|
||||
{
|
||||
string: "PT0S",
|
||||
durationLike: {
|
||||
years: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
string: "P1Y2M3W4DT5H6M7.00800901S",
|
||||
durationLike: {
|
||||
years: 1,
|
||||
months: 2,
|
||||
weeks: 3,
|
||||
days: 4,
|
||||
hours: 5,
|
||||
minutes: 6,
|
||||
seconds: 7,
|
||||
milliseconds: 8,
|
||||
microseconds: 9,
|
||||
nanoseconds: 10,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
for (var {string, durationLike} of durations) {
|
||||
var expected = formatter.format(durationLike);
|
||||
var actual = formatter.format(string);
|
||||
assert.sameValue(actual, expected, `"${string}"`);
|
||||
}
|
59
test/intl402/DurationFormat/prototype/formatToParts/taint-temporal-duration-prototype.js
vendored
Normal file
59
test/intl402/DurationFormat/prototype/formatToParts/taint-temporal-duration-prototype.js
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.formatToParts
|
||||
description: >
|
||||
Ensure Temporal.Duration.prototype getters aren't called.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
function assertSameParts(actual, expected) {
|
||||
assert.sameValue(actual.length, expected.length);
|
||||
|
||||
for (var i = 0; i < actual.length; ++i) {
|
||||
assert.sameValue(actual[i].type, expected[i].type);
|
||||
assert.sameValue(actual[i].value, expected[i].value);
|
||||
assert.sameValue(actual[i].unit, expected[i].unit);
|
||||
}
|
||||
}
|
||||
|
||||
var duration = new Temporal.Duration(
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
||||
);
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
var expected = formatter.formatToParts(duration);
|
||||
|
||||
// Taint all Temporal.Duration.prototype getters.
|
||||
for (var prop of [
|
||||
"years",
|
||||
"months",
|
||||
"weeks",
|
||||
"days",
|
||||
"hours",
|
||||
"minutes",
|
||||
"seconds",
|
||||
"milliseconds",
|
||||
"microseconds",
|
||||
"nanoseconds",
|
||||
]) {
|
||||
// Ensure the property is present.
|
||||
var desc = Object.getOwnPropertyDescriptor(Temporal.Duration.prototype, prop);
|
||||
assert.notSameValue(
|
||||
desc,
|
||||
undefined,
|
||||
"Descriptor not found: " + prop
|
||||
);
|
||||
|
||||
Object.defineProperty(Temporal.Duration.prototype, prop, {
|
||||
get() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var actual = formatter.formatToParts(duration);
|
||||
|
||||
assertSameParts(actual, expected);
|
51
test/intl402/DurationFormat/prototype/formatToParts/temporal-duration-object-arg.js
vendored
Normal file
51
test/intl402/DurationFormat/prototype/formatToParts/temporal-duration-object-arg.js
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.formatToParts
|
||||
description: >
|
||||
Temporal.Duration objects can be passed to formatToParts.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
function assertSameParts(actual, expected) {
|
||||
assert.sameValue(actual.length, expected.length);
|
||||
|
||||
for (var i = 0; i < actual.length; ++i) {
|
||||
assert.sameValue(actual[i].type, expected[i].type);
|
||||
assert.sameValue(actual[i].value, expected[i].value);
|
||||
assert.sameValue(actual[i].unit, expected[i].unit);
|
||||
}
|
||||
}
|
||||
|
||||
var durations = [
|
||||
{
|
||||
object: new Temporal.Duration(),
|
||||
durationLike: {
|
||||
years: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
object: new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
|
||||
durationLike: {
|
||||
years: 1,
|
||||
months: 2,
|
||||
weeks: 3,
|
||||
days: 4,
|
||||
hours: 5,
|
||||
minutes: 6,
|
||||
seconds: 7,
|
||||
milliseconds: 8,
|
||||
microseconds: 9,
|
||||
nanoseconds: 10,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
for (var {object, durationLike} of durations) {
|
||||
var expected = formatter.format(durationLike);
|
||||
var actual = formatter.format(object);
|
||||
assertSameParts(actual, expected);
|
||||
}
|
51
test/intl402/DurationFormat/prototype/formatToParts/temporal-duration-string-arg.js
vendored
Normal file
51
test/intl402/DurationFormat/prototype/formatToParts/temporal-duration-string-arg.js
vendored
Normal file
|
@ -0,0 +1,51 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-Intl.DurationFormat.prototype.formatToParts
|
||||
description: >
|
||||
Temporal duration strings can be passed to formatToParts.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
function assertSameParts(actual, expected) {
|
||||
assert.sameValue(actual.length, expected.length);
|
||||
|
||||
for (var i = 0; i < actual.length; ++i) {
|
||||
assert.sameValue(actual[i].type, expected[i].type);
|
||||
assert.sameValue(actual[i].value, expected[i].value);
|
||||
assert.sameValue(actual[i].unit, expected[i].unit);
|
||||
}
|
||||
}
|
||||
|
||||
var durations = [
|
||||
{
|
||||
string: "PT0S",
|
||||
durationLike: {
|
||||
years: 0,
|
||||
},
|
||||
},
|
||||
{
|
||||
string: "P1Y2M3W4DT5H6M7.00800901S",
|
||||
durationLike: {
|
||||
years: 1,
|
||||
months: 2,
|
||||
weeks: 3,
|
||||
days: 4,
|
||||
hours: 5,
|
||||
minutes: 6,
|
||||
seconds: 7,
|
||||
milliseconds: 8,
|
||||
microseconds: 9,
|
||||
nanoseconds: 10,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
var formatter = new Intl.DurationFormat();
|
||||
|
||||
for (var {string, durationLike} of durations) {
|
||||
var expected = formatter.format(durationLike);
|
||||
var actual = formatter.format(string);
|
||||
assertSameParts(actual, expected);
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.duration.prototype.tolocalestring
|
||||
description: >
|
||||
Tests that Temporal.Duration.prototype.toLocaleString produces the same
|
||||
results as Intl.DurationFormat.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
var durationLike = {
|
||||
years: 1,
|
||||
months: 2,
|
||||
weeks: 3,
|
||||
days: 4,
|
||||
hours: 5,
|
||||
minutes: 6,
|
||||
seconds: 7,
|
||||
milliseconds: 8,
|
||||
microseconds: 9,
|
||||
nanoseconds: 10,
|
||||
};
|
||||
|
||||
var duration = Temporal.Duration.from(durationLike);
|
||||
|
||||
var locales = [
|
||||
undefined,
|
||||
"en",
|
||||
"de",
|
||||
"th-u-nu-thai",
|
||||
["ar-u-nu-arab"],
|
||||
];
|
||||
|
||||
var options = [
|
||||
undefined,
|
||||
{style: "long"},
|
||||
];
|
||||
|
||||
for (var locale of locales) {
|
||||
for (var opts of options) {
|
||||
var formatter = new Intl.DurationFormat(locale, opts);
|
||||
|
||||
assert.sameValue(
|
||||
duration.toLocaleString(locale, opts),
|
||||
formatter.format(durationLike),
|
||||
`locale="${locale}", options="${JSON.stringify(opts)}", duration="${JSON.stringify(duration)}"`
|
||||
);
|
||||
}
|
||||
}
|
47
test/intl402/Temporal/Duration/prototype/toLocaleString/taint-duration-prototype.js
vendored
Normal file
47
test/intl402/Temporal/Duration/prototype/toLocaleString/taint-duration-prototype.js
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
// Copyright 2025 André Bargull. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.duration.prototype.tolocalestring
|
||||
description: >
|
||||
Ensure Temporal.Duration.prototype getters aren't called.
|
||||
features: [Temporal, Intl.DurationFormat]
|
||||
---*/
|
||||
|
||||
var duration = new Temporal.Duration(
|
||||
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
||||
);
|
||||
|
||||
var expected = duration.toLocaleString();
|
||||
|
||||
// Taint all Temporal.Duration.prototype getters.
|
||||
for (var prop of [
|
||||
"years",
|
||||
"months",
|
||||
"weeks",
|
||||
"days",
|
||||
"hours",
|
||||
"minutes",
|
||||
"seconds",
|
||||
"milliseconds",
|
||||
"microseconds",
|
||||
"nanoseconds",
|
||||
]) {
|
||||
// Ensure the property is present.
|
||||
var desc = Object.getOwnPropertyDescriptor(Temporal.Duration.prototype, prop);
|
||||
assert.notSameValue(
|
||||
desc,
|
||||
undefined,
|
||||
"Descriptor not found: " + prop
|
||||
);
|
||||
|
||||
Object.defineProperty(Temporal.Duration.prototype, prop, {
|
||||
get() {
|
||||
throw new Test262Error();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var actual = duration.toLocaleString();
|
||||
|
||||
assert.sameValue(actual, expected);
|
Loading…
Reference in New Issue