Skip to content

Commit 641129c

Browse files
anbaMs2ger
authored andcommitted
Add coverage for resolved locale when Unicode extensions and options are present
These tests currently fail in V8, but pass in JSC and SM.
1 parent 5c9ff87 commit 641129c

9 files changed

+607
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.collator.prototype.resolvedoptions
6+
description: >
7+
Resolved caseFirst when using Unicode extension values and options.
8+
locale: [en]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Different options value
13+
// present and supported. Unicode extension value is ignored and not reflected
14+
// in the resolved locale.
15+
{
16+
locale: "en-u-kf-lower",
17+
caseFirst: "upper",
18+
resolved: {
19+
locale: "en",
20+
caseFirst: "upper",
21+
}
22+
},
23+
24+
// Unicode extension value is present and supported. Options value present and
25+
// supported. Unicode extension value is equal to options value. Unicode
26+
// extension value is reflected in the resolved locale.
27+
{
28+
locale: "en-u-kf-lower",
29+
caseFirst: "lower",
30+
resolved: {
31+
locale: "en-u-kf-lower",
32+
caseFirst: "lower",
33+
}
34+
},
35+
];
36+
37+
for (var {locale, caseFirst, resolved} of tests) {
38+
var coll = new Intl.Collator(locale, {caseFirst});
39+
var resolvedOptions = coll.resolvedOptions();
40+
41+
// Skip if this implementation doesn't support the optional "kf" extension key.
42+
if (!resolvedOptions.hasOwnProperty("caseFirst")) {
43+
continue;
44+
}
45+
46+
assert.sameValue(
47+
resolvedOptions.locale,
48+
resolved.locale,
49+
`Resolved locale for locale=${locale} with caseFirst=${caseFirst}`
50+
);
51+
assert.sameValue(
52+
resolvedOptions.caseFirst,
53+
resolved.caseFirst,
54+
`Resolved numeric for locale=${locale} with caseFirst=${caseFirst}`
55+
);
56+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.collator.prototype.resolvedoptions
6+
description: >
7+
Resolved collation when using Unicode extension values and options.
8+
locale: [en, de]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Options value present,
13+
// but unsupported. Unicode extension value is used and reflected in the
14+
// resolved locale.
15+
{
16+
locale: "de-u-co-phonebk",
17+
collation: "pinyin",
18+
resolved: {
19+
locale: "de-u-co-phonebk",
20+
collation: "phonebk",
21+
},
22+
},
23+
24+
// Unicode extension value is present, but unsupported. Options value present,
25+
// but also unsupported. Default collation is used.
26+
{
27+
locale: "en-u-co-phonebk",
28+
collation: "pinyin",
29+
resolved: {
30+
locale: "en",
31+
collation: "default",
32+
},
33+
},
34+
35+
// Unicode extension value is present and supported. Different options value
36+
// present and supported. Unicode extension value is ignored and not reflected
37+
// in the resolved locale.
38+
{
39+
locale: "de-u-co-phonebk",
40+
collation: "eor",
41+
resolved: {
42+
locale: "de",
43+
collation: "eor",
44+
}
45+
},
46+
47+
// Unicode extension value is present and supported. Options value present and
48+
// supported. Unicode extension value is equal to options value. Unicode
49+
// extension value is reflected in the resolved locale.
50+
{
51+
locale: "de-u-co-phonebk",
52+
collation: "phonebk",
53+
resolved: {
54+
locale: "de-u-co-phonebk",
55+
collation: "phonebk",
56+
}
57+
},
58+
];
59+
60+
for (var {locale, collation, resolved} of tests) {
61+
var coll = new Intl.Collator(locale, {collation});
62+
var resolvedOptions = coll.resolvedOptions();
63+
64+
assert.sameValue(
65+
resolvedOptions.locale,
66+
resolved.locale,
67+
`Resolved locale for locale=${locale} with collation=${collation}`
68+
);
69+
assert.sameValue(
70+
resolvedOptions.collation,
71+
resolved.collation,
72+
`Resolved collation for locale=${locale} with collation=${collation}`
73+
);
74+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.collator.prototype.resolvedoptions
6+
description: >
7+
Resolved numeric when using Unicode extension values and options.
8+
locale: [en]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Different options value
13+
// present and supported. Unicode extension value is ignored and not reflected
14+
// in the resolved locale.
15+
{
16+
locale: "en-u-kn-false",
17+
numeric: true,
18+
resolved: {
19+
locale: "en",
20+
numeric: true,
21+
}
22+
},
23+
24+
// Unicode extension value is present and supported. Options value present and
25+
// supported. Unicode extension value is equal to options value. Unicode
26+
// extension value is reflected in the resolved locale.
27+
{
28+
locale: "en-u-kn-true",
29+
numeric: true,
30+
resolved: {
31+
locale: "en-u-kn",
32+
numeric: true,
33+
}
34+
},
35+
];
36+
37+
for (var {locale, numeric, resolved} of tests) {
38+
var coll = new Intl.Collator(locale, {numeric});
39+
var resolvedOptions = coll.resolvedOptions();
40+
41+
// Skip if this implementation doesn't support the optional "kn" extension key.
42+
if (!resolvedOptions.hasOwnProperty("numeric")) {
43+
continue;
44+
}
45+
46+
assert.sameValue(
47+
resolvedOptions.locale,
48+
resolved.locale,
49+
`Resolved locale for locale=${locale} with numeric=${numeric}`
50+
);
51+
assert.sameValue(
52+
resolvedOptions.numeric,
53+
resolved.numeric,
54+
`Resolved numeric for locale=${locale} with numeric=${numeric}`
55+
);
56+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.datetimeformat.prototype.resolvedoptions
6+
description: >
7+
Resolved calendar when using Unicode extension values and options.
8+
locale: [en]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Options value present,
13+
// but unsupported. Unicode extension value is used and reflected in the
14+
// resolved locale.
15+
{
16+
locale: "en-u-ca-iso8601",
17+
calendar: "invalid",
18+
resolved: {
19+
locale: "en-u-ca-iso8601",
20+
calendar: "iso8601",
21+
},
22+
},
23+
24+
// Unicode extension value is present, but unsupported. Options value present,
25+
// but also unsupported. Default calendar is used.
26+
{
27+
locale: "en-u-ca-invalid",
28+
calendar: "invalid2",
29+
resolved: {
30+
locale: "en",
31+
calendar: "gregory",
32+
},
33+
},
34+
35+
// Unicode extension value is present and supported. Different options value
36+
// present and supported. Unicode extension value is ignored and not reflected
37+
// in the resolved locale.
38+
{
39+
locale: "en-u-ca-gregory",
40+
calendar: "iso8601",
41+
resolved: {
42+
locale: "en",
43+
calendar: "iso8601",
44+
}
45+
},
46+
47+
// Unicode extension value is present and supported. Options value present and
48+
// supported. Unicode extension value is equal to options value. Unicode
49+
// extension value is reflected in the resolved locale.
50+
{
51+
locale: "en-u-ca-iso8601",
52+
calendar: "iso8601",
53+
resolved: {
54+
locale: "en-u-ca-iso8601",
55+
calendar: "iso8601",
56+
}
57+
},
58+
];
59+
60+
for (var {locale, calendar, resolved} of tests) {
61+
var dtf = new Intl.DateTimeFormat(locale, {calendar});
62+
var resolvedOptions = dtf.resolvedOptions();
63+
64+
assert.sameValue(
65+
resolvedOptions.locale,
66+
resolved.locale,
67+
`Resolved locale for locale=${locale} with calendar=${calendar}`
68+
);
69+
assert.sameValue(
70+
resolvedOptions.calendar,
71+
resolved.calendar,
72+
`Resolved calendar for locale=${locale} with calendar=${calendar}`
73+
);
74+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.datetimeformat.prototype.resolvedoptions
6+
description: >
7+
Resolved hour-cycle when using Unicode extension values and options.
8+
locale: [en]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Different options value
13+
// present and supported. Unicode extension value is ignored and not reflected
14+
// in the resolved locale.
15+
{
16+
locale: "en-u-hc-h23",
17+
hourCycle: "h11",
18+
resolved: {
19+
locale: "en",
20+
hourCycle: "h11",
21+
}
22+
},
23+
24+
// Unicode extension value is present and supported. Options value present and
25+
// supported. Unicode extension value is equal to options value. Unicode
26+
// extension value is reflected in the resolved locale.
27+
{
28+
locale: "en-u-hc-h23",
29+
hourCycle: "h23",
30+
resolved: {
31+
locale: "en-u-hc-h23",
32+
hourCycle: "h23",
33+
}
34+
},
35+
];
36+
37+
for (var {locale, hourCycle, resolved} of tests) {
38+
var dtf = new Intl.DateTimeFormat(locale, {hour: "numeric", hourCycle});
39+
var resolvedOptions = dtf.resolvedOptions();
40+
41+
assert.sameValue(
42+
resolvedOptions.locale,
43+
resolved.locale,
44+
`Resolved locale for locale=${locale} with hourCycle=${hourCycle}`
45+
);
46+
assert.sameValue(
47+
resolvedOptions.hourCycle,
48+
resolved.hourCycle,
49+
`Resolved hourCycle for locale=${locale} with hourCycle=${hourCycle}`
50+
);
51+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
// Copyright 2025 André Bargull. All rights reserved.
2+
// This code is governed by the BSD license found in the LICENSE file.
3+
4+
/*---
5+
esid: sec-intl.datetimeformat.prototype.resolvedoptions
6+
description: >
7+
Resolved numbering system when using Unicode extension values and options.
8+
locale: [en]
9+
---*/
10+
11+
var tests = [
12+
// Unicode extension value is present and supported. Options value present,
13+
// but unsupported. Unicode extension value is used and reflected in the
14+
// resolved locale.
15+
{
16+
locale: "en-u-nu-arab",
17+
numberingSystem: "invalid",
18+
resolved: {
19+
locale: "en-u-nu-arab",
20+
numberingSystem: "arab",
21+
},
22+
},
23+
24+
// Unicode extension value is present, but unsupported. Options value present,
25+
// but also unsupported. Default numbering system is used.
26+
{
27+
locale: "en-u-nu-invalid",
28+
numberingSystem: "invalid2",
29+
resolved: {
30+
locale: "en",
31+
numberingSystem: "latn",
32+
},
33+
},
34+
35+
// Unicode extension value is present and supported. Different options value
36+
// present and supported. Unicode extension value is ignored and not reflected
37+
// in the resolved locale.
38+
{
39+
locale: "en-u-nu-latn",
40+
numberingSystem: "arab",
41+
resolved: {
42+
locale: "en",
43+
numberingSystem: "arab",
44+
}
45+
},
46+
47+
// Unicode extension value is present and supported. Options value present and
48+
// supported. Unicode extension value is equal to options value. Unicode
49+
// extension value is reflected in the resolved locale.
50+
{
51+
locale: "en-u-nu-arab",
52+
numberingSystem: "arab",
53+
resolved: {
54+
locale: "en-u-nu-arab",
55+
numberingSystem: "arab",
56+
}
57+
},
58+
];
59+
60+
for (var {locale, numberingSystem, resolved} of tests) {
61+
var dtf = new Intl.DateTimeFormat(locale, {numberingSystem});
62+
var resolvedOptions = dtf.resolvedOptions();
63+
64+
assert.sameValue(
65+
resolvedOptions.locale,
66+
resolved.locale,
67+
`Resolved locale for locale=${locale} with numberingSystem=${numberingSystem}`
68+
);
69+
assert.sameValue(
70+
resolvedOptions.numberingSystem,
71+
resolved.numberingSystem,
72+
`Resolved numberingSystem for locale=${locale} with numberingSystem=${numberingSystem}`
73+
);
74+
}

0 commit comments

Comments
 (0)