mirror of https://github.com/tc39/test262.git
Add tests for Intl.DisplayNames#resolvedOptions (#2405)
This commit is contained in:
parent
8f8b3374c2
commit
aa9ba4b58f
80
test/intl402/DisplayNames/prototype/resolvedOptions/default-option-values.js
vendored
Normal file
80
test/intl402/DisplayNames/prototype/resolvedOptions/default-option-values.js
vendored
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Default values for each option
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
3. Let options be ! ObjectCreate(%ObjectPrototype%).
|
||||||
|
4. For each row of Table 6, except the header row, in table order, do
|
||||||
|
a. Let p be the Property value of the current row.
|
||||||
|
b. Let v be the value of pr's internal slot whose name is the Internal Slot value of the current row.
|
||||||
|
c. If v is not undefined, then
|
||||||
|
i. Perform ! CreateDataPropertyOrThrow(options, p, v).
|
||||||
|
6. Return options.
|
||||||
|
|
||||||
|
Table 6: Resolved Options of DisplayNames Instances
|
||||||
|
|
||||||
|
[[Locale]]: "locale"
|
||||||
|
[[Style]]: "style"
|
||||||
|
[[Type]]: "type"
|
||||||
|
[[Fallback]]: "fallback"
|
||||||
|
|
||||||
|
Intl.DisplayNames ([ locales [ , options ]])
|
||||||
|
|
||||||
|
...
|
||||||
|
8. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
|
||||||
|
...
|
||||||
|
10. Let r be ResolveLocale(%DisplayNames%.[[AvailableLocales]], requestedLocales, opt,
|
||||||
|
%DisplayNames%.[[RelevantExtensionKeys]]).
|
||||||
|
11. Let style be ? GetOption(options, "style", "string", « "narrow", "short", "long" », "long").
|
||||||
|
...
|
||||||
|
13. Let type be ? GetOption(options, "type", "string", « "language", "region", "script", "currency",
|
||||||
|
"weekday", "month", "quarter", "dayPeriod", "dateTimeField" », "language").
|
||||||
|
...
|
||||||
|
15. Let fallback be ? GetOption(options, "fallback", "string", « "code", "none" », "code").
|
||||||
|
...
|
||||||
|
17. Set displayNames.[[Locale]] to the value of r.[[Locale]].
|
||||||
|
...
|
||||||
|
|
||||||
|
CreateDataProperty ( O, P, V )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. Let newDesc be the PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
...
|
||||||
|
locale: [en-US]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var dn = new Intl.DisplayNames('en-US');
|
||||||
|
|
||||||
|
var options = dn.resolvedOptions();
|
||||||
|
|
||||||
|
verifyProperty(options, 'style', {
|
||||||
|
value: 'long',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'type', {
|
||||||
|
value: 'language',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'fallback', {
|
||||||
|
value: 'code',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions.length is 0.
|
||||||
|
info: |
|
||||||
|
ECMAScript Standard Built-in Objects:
|
||||||
|
|
||||||
|
Every built-in function object, including constructors, has a length
|
||||||
|
property whose value is an integer. Unless otherwise specified, this
|
||||||
|
value is equal to the largest number of named arguments shown in the
|
||||||
|
subclause headings for the function description. Optional parameters
|
||||||
|
(which are indicated with brackets: [ ]) or rest parameters (which
|
||||||
|
are shown using the form «...name») are not included in the default
|
||||||
|
argument count.
|
||||||
|
|
||||||
|
Unless otherwise specified, the length property of a built-in function
|
||||||
|
object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
verifyProperty(Intl.DisplayNames.prototype.resolvedOptions, "length", {
|
||||||
|
value: 0,
|
||||||
|
enumerable: false,
|
||||||
|
writable: false,
|
||||||
|
configurable: true,
|
||||||
|
});
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions.name is "resolvedOptions".
|
||||||
|
info: |
|
||||||
|
17 ECMAScript Standard Built-in Objects:
|
||||||
|
|
||||||
|
Every built-in Function object, including constructors, that is not
|
||||||
|
identified as an anonymous function has a name property whose value is a
|
||||||
|
String.
|
||||||
|
|
||||||
|
Unless otherwise specified, the name property of a built-in Function object,
|
||||||
|
if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]:
|
||||||
|
false, [[Configurable]]: true }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
verifyProperty(Intl.DisplayNames.prototype.resolvedOptions, "name", {
|
||||||
|
value: "resolvedOptions",
|
||||||
|
writable: false,
|
||||||
|
enumerable: false,
|
||||||
|
configurable: true,
|
||||||
|
});
|
|
@ -0,0 +1,83 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Values for the fallback option
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
3. Let options be ! ObjectCreate(%ObjectPrototype%).
|
||||||
|
4. For each row of Table 6, except the header row, in table order, do
|
||||||
|
a. Let p be the Property value of the current row.
|
||||||
|
b. Let v be the value of pr's internal slot whose name is the Internal Slot value of the current row.
|
||||||
|
c. If v is not undefined, then
|
||||||
|
i. Perform ! CreateDataPropertyOrThrow(options, p, v).
|
||||||
|
6. Return options.
|
||||||
|
|
||||||
|
Table 6: Resolved Options of DisplayNames Instances
|
||||||
|
|
||||||
|
[[Locale]]: "locale"
|
||||||
|
[[Style]]: "style"
|
||||||
|
[[Type]]: "type"
|
||||||
|
[[Fallback]]: "fallback"
|
||||||
|
|
||||||
|
Intl.DisplayNames ([ locales [ , options ]])
|
||||||
|
|
||||||
|
...
|
||||||
|
8. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
|
||||||
|
...
|
||||||
|
10. Let r be ResolveLocale(%DisplayNames%.[[AvailableLocales]], requestedLocales, opt,
|
||||||
|
%DisplayNames%.[[RelevantExtensionKeys]]).
|
||||||
|
11. Let style be ? GetOption(options, "style", "string", « "narrow", "short", "long" », "long").
|
||||||
|
...
|
||||||
|
13. Let type be ? GetOption(options, "type", "string", « "language", "region", "script", "currency",
|
||||||
|
"weekday", "month", "quarter", "dayPeriod", "dateTimeField" », "language").
|
||||||
|
...
|
||||||
|
15. Let fallback be ? GetOption(options, "fallback", "string", « "code", "none" », "code").
|
||||||
|
...
|
||||||
|
17. Set displayNames.[[Locale]] to the value of r.[[Locale]].
|
||||||
|
...
|
||||||
|
|
||||||
|
CreateDataProperty ( O, P, V )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. Let newDesc be the PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
...
|
||||||
|
locale: [en-US]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var fallbacks = ['code', 'none'];
|
||||||
|
|
||||||
|
fallbacks.forEach(fallback => {
|
||||||
|
var dn = new Intl.DisplayNames('en-US', { fallback });
|
||||||
|
var options = dn.resolvedOptions();
|
||||||
|
|
||||||
|
verifyProperty(options, 'fallback', {
|
||||||
|
value: fallback,
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'type', {
|
||||||
|
value: 'language',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'style', {
|
||||||
|
value: 'long',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,83 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Values for the style option
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
3. Let options be ! ObjectCreate(%ObjectPrototype%).
|
||||||
|
4. For each row of Table 6, except the header row, in table order, do
|
||||||
|
a. Let p be the Property value of the current row.
|
||||||
|
b. Let v be the value of pr's internal slot whose name is the Internal Slot value of the current row.
|
||||||
|
c. If v is not undefined, then
|
||||||
|
i. Perform ! CreateDataPropertyOrThrow(options, p, v).
|
||||||
|
6. Return options.
|
||||||
|
|
||||||
|
Table 6: Resolved Options of DisplayNames Instances
|
||||||
|
|
||||||
|
[[Locale]]: "locale"
|
||||||
|
[[Style]]: "style"
|
||||||
|
[[Type]]: "type"
|
||||||
|
[[Fallback]]: "fallback"
|
||||||
|
|
||||||
|
Intl.DisplayNames ([ locales [ , options ]])
|
||||||
|
|
||||||
|
...
|
||||||
|
8. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
|
||||||
|
...
|
||||||
|
10. Let r be ResolveLocale(%DisplayNames%.[[AvailableLocales]], requestedLocales, opt,
|
||||||
|
%DisplayNames%.[[RelevantExtensionKeys]]).
|
||||||
|
11. Let style be ? GetOption(options, "style", "string", « "narrow", "short", "long" », "long").
|
||||||
|
...
|
||||||
|
13. Let type be ? GetOption(options, "type", "string", « "language", "region", "script", "currency",
|
||||||
|
"weekday", "month", "quarter", "dayPeriod", "dateTimeField" », "language").
|
||||||
|
...
|
||||||
|
15. Let fallback be ? GetOption(options, "fallback", "string", « "code", "none" », "code").
|
||||||
|
...
|
||||||
|
17. Set displayNames.[[Locale]] to the value of r.[[Locale]].
|
||||||
|
...
|
||||||
|
|
||||||
|
CreateDataProperty ( O, P, V )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. Let newDesc be the PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
...
|
||||||
|
locale: [en-US]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var styles = ['narrow', 'short', 'long'];
|
||||||
|
|
||||||
|
styles.forEach(style => {
|
||||||
|
var dn = new Intl.DisplayNames('en-US', { style });
|
||||||
|
var options = dn.resolvedOptions();
|
||||||
|
|
||||||
|
verifyProperty(options, 'style', {
|
||||||
|
value: style,
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'type', {
|
||||||
|
value: 'language',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'fallback', {
|
||||||
|
value: 'code',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,83 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Values for the type option
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
3. Let options be ! ObjectCreate(%ObjectPrototype%).
|
||||||
|
4. For each row of Table 6, except the header row, in table order, do
|
||||||
|
a. Let p be the Property value of the current row.
|
||||||
|
b. Let v be the value of pr's internal slot whose name is the Internal Slot value of the current row.
|
||||||
|
c. If v is not undefined, then
|
||||||
|
i. Perform ! CreateDataPropertyOrThrow(options, p, v).
|
||||||
|
6. Return options.
|
||||||
|
|
||||||
|
Table 6: Resolved Options of DisplayNames Instances
|
||||||
|
|
||||||
|
[[Locale]]: "locale"
|
||||||
|
[[Style]]: "style"
|
||||||
|
[[Type]]: "type"
|
||||||
|
[[Fallback]]: "fallback"
|
||||||
|
|
||||||
|
Intl.DisplayNames ([ locales [ , options ]])
|
||||||
|
|
||||||
|
...
|
||||||
|
8. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
|
||||||
|
...
|
||||||
|
10. Let r be ResolveLocale(%DisplayNames%.[[AvailableLocales]], requestedLocales, opt,
|
||||||
|
%DisplayNames%.[[RelevantExtensionKeys]]).
|
||||||
|
11. Let style be ? GetOption(options, "style", "string", « "narrow", "short", "long" », "long").
|
||||||
|
...
|
||||||
|
13. Let type be ? GetOption(options, "type", "string", « "language", "region", "script", "currency",
|
||||||
|
"weekday", "month", "quarter", "dayPeriod", "dateTimeField" », "language").
|
||||||
|
...
|
||||||
|
15. Let fallback be ? GetOption(options, "fallback", "string", « "code", "none" », "code").
|
||||||
|
...
|
||||||
|
17. Set displayNames.[[Locale]] to the value of r.[[Locale]].
|
||||||
|
...
|
||||||
|
|
||||||
|
CreateDataProperty ( O, P, V )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. Let newDesc be the PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
...
|
||||||
|
locale: [en-US]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var types = ['language', 'region', 'script', 'currency', 'weekday', 'month', 'quarter', 'dayPeriod', 'dateTimeField'];
|
||||||
|
|
||||||
|
types.forEach(type => {
|
||||||
|
var dn = new Intl.DisplayNames('en-US', { type });
|
||||||
|
var options = dn.resolvedOptions();
|
||||||
|
|
||||||
|
verifyProperty(options, 'type', {
|
||||||
|
value: type,
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'fallback', {
|
||||||
|
value: 'code',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
verifyProperty(options, 'style', {
|
||||||
|
value: 'long',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Property descriptor of Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
info: |
|
||||||
|
17 ECMAScript Standard Built-in Objects:
|
||||||
|
|
||||||
|
Every other data property described in clauses 18 through 26 and in Annex B.2
|
||||||
|
has the attributes { [[Writable]]: true, [[Enumerable]]: false,
|
||||||
|
[[Configurable]]: true } unless otherwise specified.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
typeof Intl.DisplayNames.prototype.resolvedOptions,
|
||||||
|
"function",
|
||||||
|
"`typeof Intl.DisplayNames.prototype.resolvedOptions` is `'function'`"
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyProperty(Intl.DisplayNames.prototype, "resolvedOptions", {
|
||||||
|
writable: true,
|
||||||
|
enumerable: false,
|
||||||
|
configurable: true,
|
||||||
|
});
|
|
@ -0,0 +1,95 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Returns a new ordinary object on each call, with data properties containing values from internals
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
3. Let options be ! ObjectCreate(%ObjectPrototype%).
|
||||||
|
4. For each row of Table 6, except the header row, in table order, do
|
||||||
|
a. Let p be the Property value of the current row.
|
||||||
|
b. Let v be the value of pr's internal slot whose name is the Internal Slot value of the current row.
|
||||||
|
c. If v is not undefined, then
|
||||||
|
i. Perform ! CreateDataPropertyOrThrow(options, p, v).
|
||||||
|
6. Return options.
|
||||||
|
|
||||||
|
Table 6: Resolved Options of DisplayNames Instances
|
||||||
|
|
||||||
|
[[Locale]]: "locale"
|
||||||
|
[[Style]]: "style"
|
||||||
|
[[Type]]: "type"
|
||||||
|
[[Fallback]]: "fallback"
|
||||||
|
|
||||||
|
Intl.DisplayNames ([ locales [ , options ]])
|
||||||
|
|
||||||
|
...
|
||||||
|
8. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
|
||||||
|
...
|
||||||
|
10. Let r be ResolveLocale(%DisplayNames%.[[AvailableLocales]], requestedLocales, opt,
|
||||||
|
%DisplayNames%.[[RelevantExtensionKeys]]).
|
||||||
|
11. Let style be ? GetOption(options, "style", "string", « "narrow", "short", "long" », "long").
|
||||||
|
...
|
||||||
|
13. Let type be ? GetOption(options, "type", "string", « "language", "region", "script", "currency",
|
||||||
|
"weekday", "month", "quarter", "dayPeriod", "dateTimeField" », "language").
|
||||||
|
...
|
||||||
|
15. Let fallback be ? GetOption(options, "fallback", "string", « "code", "none" », "code").
|
||||||
|
...
|
||||||
|
17. Set displayNames.[[Locale]] to the value of r.[[Locale]].
|
||||||
|
...
|
||||||
|
|
||||||
|
CreateDataProperty ( O, P, V )
|
||||||
|
|
||||||
|
...
|
||||||
|
3. Let newDesc be the PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true,
|
||||||
|
[[Configurable]]: true }.
|
||||||
|
...
|
||||||
|
locale: [en-US]
|
||||||
|
features: [Intl.DisplayNames, Reflect]
|
||||||
|
includes: [propertyHelper.js, compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var dn = new Intl.DisplayNames('en-US');
|
||||||
|
|
||||||
|
var options = dn.resolvedOptions();
|
||||||
|
var other = dn.resolvedOptions();
|
||||||
|
|
||||||
|
assert.notSameValue(options, other, 'each call returns a new object');
|
||||||
|
|
||||||
|
assert.sameValue(Object.getPrototypeOf(options), Object.prototype, 'ordinary object #1');
|
||||||
|
assert.sameValue(Object.getPrototypeOf(other), Object.prototype, 'ordinary object #2');
|
||||||
|
|
||||||
|
assert.compareArray(
|
||||||
|
Reflect.ownKeys(options),
|
||||||
|
['locale', 'style', 'type', 'fallback'],
|
||||||
|
'all the data properties set to this object, in order of creation'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyProperty(options, 'locale', {
|
||||||
|
value: 'en-US',
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
var explicit = new Intl.DisplayNames('en', { localeMatcher: 'lookup' }).resolvedOptions();
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
explicit.hasOwnProperty('localeMatcher'),
|
||||||
|
false,
|
||||||
|
'the localeMatcher option is not set, option was explicitly set'
|
||||||
|
);
|
||||||
|
|
||||||
|
var extra = new Intl.DisplayNames('en', { chaos: 'yes', random: 'sure', '0': 42 }).resolvedOptions();
|
||||||
|
|
||||||
|
assert.compareArray(
|
||||||
|
Reflect.ownKeys(extra),
|
||||||
|
['locale', 'style', 'type', 'fallback'],
|
||||||
|
'extra properties are not reflected in the resolvedOptions'
|
||||||
|
);
|
||||||
|
|
47
test/intl402/DisplayNames/prototype/resolvedOptions/this-not-object-throws.js
vendored
Normal file
47
test/intl402/DisplayNames/prototype/resolvedOptions/this-not-object-throws.js
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Throws a TypeError if this is not Object.
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
...
|
||||||
|
features: [Intl.DisplayNames, Symbol]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var resolvedOptions = Intl.DisplayNames.prototype.resolvedOptions;
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions();
|
||||||
|
}, 'direct call');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call('en');
|
||||||
|
}, 'string');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(1);
|
||||||
|
}, 'number');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(null);
|
||||||
|
}, 'null');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(true);
|
||||||
|
}, 'true');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(false);
|
||||||
|
}, 'false');
|
||||||
|
|
||||||
|
var symbol = Symbol();
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(symbol);
|
||||||
|
}, 'symbol');
|
41
test/intl402/DisplayNames/prototype/resolvedOptions/this-object-lacks-internal-throws.js
vendored
Normal file
41
test/intl402/DisplayNames/prototype/resolvedOptions/this-object-lacks-internal-throws.js
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
// Copyright (C) 2019 Leo Balter. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
|
||||||
|
/*---
|
||||||
|
esid: sec-Intl.DisplayNames.prototype.resolvedOptions
|
||||||
|
description: >
|
||||||
|
Throws a TypeError if this does not have an [[InitializedDisplayNames]] internal slot.
|
||||||
|
info: |
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions ()
|
||||||
|
|
||||||
|
1. Let pr be the this value.
|
||||||
|
2. If Type(pr) is not Object or pr does not have an [[InitializedDisplayNames]] internal slot,
|
||||||
|
throw a TypeError exception.
|
||||||
|
...
|
||||||
|
features: [Intl.DisplayNames]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var resolvedOptions = Intl.DisplayNames.prototype.resolvedOptions;
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
Intl.DisplayNames.prototype.resolvedOptions();
|
||||||
|
}, 'Intl.DisplayNames.prototype does not have the internal slot');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call({});
|
||||||
|
}, 'ordinary object');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(Intl.DisplayNames);
|
||||||
|
}, 'Intl.DisplayNames does not have the internal slot');
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(Intl);
|
||||||
|
}, 'Intl does not have the internal slot');
|
||||||
|
|
||||||
|
// Not DisplayNames!!!
|
||||||
|
var dtf = new Intl.DateTimeFormat();
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
resolvedOptions.call(dtf);
|
||||||
|
}, 'resolvedOptions cannot be used with instances from different Intl ctors');
|
Loading…
Reference in New Issue