mirror of https://github.com/tc39/test262.git
Add tests for Intl.getCanonicalLocales
This commit is contained in:
parent
07dcff3e27
commit
aeb88953f0
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests the getCanonicalLocales function for duplicate locales scenario.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
assert(compareArray(
|
||||
Intl.getCanonicalLocales(
|
||||
['ab-cd', 'ff', 'de-rt', 'ab-Cd']), ['ab-CD', 'ff', 'de-RT']));
|
||||
|
||||
var locales = Intl.getCanonicalLocales(["en-US", "en-US"]);
|
||||
assert(compareArray(locales, ['en-US']), 'en-US');
|
|
@ -0,0 +1,46 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests the getCanonicalLocales function for error tags.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
var rangeErrorCases =
|
||||
[
|
||||
"en-us-",
|
||||
"-en-us",
|
||||
"en-us-en-us",
|
||||
"--",
|
||||
"-",
|
||||
"",
|
||||
"-e-"
|
||||
];
|
||||
|
||||
rangeErrorCases.forEach(function(re) {
|
||||
assert.throws(RangeError, function() {
|
||||
Intl.getCanonicalLocales(re);
|
||||
});
|
||||
});
|
||||
|
||||
var typeErrorCases =
|
||||
[
|
||||
null,
|
||||
[null],
|
||||
[true],
|
||||
[NaN],
|
||||
[2],
|
||||
[Symbol('foo')]
|
||||
];
|
||||
|
||||
typeErrorCases.forEach(function(te) {
|
||||
assert.throws(TypeError, function() {
|
||||
Intl.getCanonicalLocales(te);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Test Intl.getCanonicalLocales for step 7.c.i.
|
||||
info: |
|
||||
9.2.1 CanonicalizeLocaleList (locales)
|
||||
7. Repeat, while k < len.
|
||||
c. If kPresent is true, then
|
||||
i. Let kValue be ? Get(O, Pk).
|
||||
---*/
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
length: 2
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "1", {
|
||||
get: function() { throw new Test262Error() }
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
Intl.getCanonicalLocales(locales);
|
||||
});
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Property type and descriptor.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Intl.getCanonicalLocales,
|
||||
'function',
|
||||
'`typeof Intl.getCanonicalLocales` is `function`'
|
||||
);
|
||||
|
||||
verifyNotEnumerable(Intl, 'getCanonicalLocales');
|
||||
verifyWritable(Intl, 'getCanonicalLocales');
|
||||
verifyConfigurable(Intl, 'getCanonicalLocales');
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Test Intl.getCanonicalLocales.name for step 7.b.
|
||||
info: |
|
||||
9.2.1 CanonicalizeLocaleList (locales)
|
||||
7. Repeat, while k < len.
|
||||
b. Let kPresent be HasProperty(O, Pk).
|
||||
features: [Proxy]
|
||||
---*/
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
'1': 'pt-BR',
|
||||
length: 2
|
||||
};
|
||||
|
||||
var p = new Proxy(locales, {
|
||||
has: function(_, prop) {
|
||||
if (prop === '0') {
|
||||
throw new Test262Error();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
Intl.getCanonicalLocales(p);
|
||||
});
|
|
@ -0,0 +1,18 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Intl.getCanonicalLocales.length.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Intl.getCanonicalLocales.length, 1);
|
||||
|
||||
verifyNotEnumerable(Intl.getCanonicalLocales, "length");
|
||||
verifyNotWritable(Intl.getCanonicalLocales, "length");
|
||||
verifyConfigurable(Intl.getCanonicalLocales, "length");
|
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests for scenario where locales is not a string
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
var gCL = Intl.getCanonicalLocales;
|
||||
|
||||
function assertArray(l, r) {
|
||||
assert(compareArray(l, r), r);
|
||||
}
|
||||
|
||||
assertArray(gCL(), []);
|
||||
assertArray(gCL(false), []);
|
||||
assertArray(gCL(true), []);
|
||||
assertArray(gCL(Symbol("foo")), []);
|
||||
assertArray(gCL(NaN), []);
|
||||
assertArray(gCL(1), []);
|
||||
|
||||
Number.prototype[0] = "en-US";
|
||||
Number.prototype.length = 1;
|
||||
assertArray(gCL(NaN), ["en-US"]);
|
|
@ -0,0 +1,34 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests for existance and behavior of Intl.getCanonicalLocales
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
var gCL = Intl.getCanonicalLocales;
|
||||
|
||||
function assertArray(l, r) {
|
||||
assert(compareArray(l, r), r);
|
||||
}
|
||||
|
||||
assertArray(gCL(), []);
|
||||
|
||||
assertArray(gCL('ab-cd'), ['ab-CD']);
|
||||
|
||||
assertArray(gCL(['ab-cd']), ['ab-CD']);
|
||||
|
||||
assertArray(gCL(['ab-cd', 'FF']), ['ab-CD', 'ff']);
|
||||
|
||||
assertArray(gCL({'a': 0}), []);
|
||||
|
||||
assertArray(gCL({}), []);
|
||||
|
||||
assertArray(gCL(['ar-ma-u-ca-islamicc']), ['ar-MA-u-ca-islamicc']);
|
||||
|
||||
assertArray(gCL(['th-th-u-nu-thai']), ['th-TH-u-nu-thai']);
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Intl.getCanonicalLocales.name value and descriptor.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Intl.getCanonicalLocales.name, 'getCanonicalLocales',
|
||||
'The value of `Intl.getCanonicalLocales.name` is `"getCanonicalLocales"`'
|
||||
);
|
||||
|
||||
verifyNotEnumerable(Intl.getCanonicalLocales, 'name');
|
||||
verifyNotWritable(Intl.getCanonicalLocales, 'name');
|
||||
verifyConfigurable(Intl.getCanonicalLocales, 'name');
|
|
@ -0,0 +1,89 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Test Intl.getCanonicalLocales for step 5.
|
||||
info: |
|
||||
9.2.1 CanonicalizeLocaleList (locales)
|
||||
5. Let len be ? ToLength(? Get(O, "length")).
|
||||
includes: [compareArray.js]
|
||||
features: [Symbol]
|
||||
---*/
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "length", {
|
||||
get: function() { throw new Test262Error() }
|
||||
});
|
||||
|
||||
assert.throws(Test262Error, function() {
|
||||
Intl.getCanonicalLocales(locales);
|
||||
}, "should throw if locales.length throws");
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
'1': 'pt-BR',
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "length", {
|
||||
get: function() { return "1" }
|
||||
});
|
||||
|
||||
assert(compareArray(Intl.getCanonicalLocales(locales), ['en-US']),
|
||||
"should return one element if locales.length is '1'");
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
'1': 'pt-BR',
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "length", {
|
||||
get: function() { return 1.3 }
|
||||
});
|
||||
|
||||
assert(compareArray(Intl.getCanonicalLocales(locales), ['en-US']),
|
||||
"should return one element if locales.length is 1.3");
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
'1': 'pt-BR',
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "length", {
|
||||
get: function() { return Symbol("1.8") }
|
||||
});
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
Intl.getCanonicalLocales(locales);
|
||||
}, "should throw if locales.length is a Symbol");
|
||||
|
||||
var locales = {
|
||||
'0': 'en-US',
|
||||
'1': 'pt-BR',
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "length", {
|
||||
get: function() { return -Infinity }
|
||||
});
|
||||
|
||||
assert(compareArray(Intl.getCanonicalLocales(locales), []),
|
||||
"should return empty array if locales.length is -Infinity");
|
||||
|
||||
var locales = {
|
||||
length: -Math.pow(2, 32) + 1
|
||||
};
|
||||
|
||||
Object.defineProperty(locales, "0", {
|
||||
get: function() { throw new Error("must not be gotten!"); }
|
||||
})
|
||||
|
||||
assert(compareArray(Intl.getCanonicalLocales(locales), []),
|
||||
"should return empty array if locales.length is a negative value");
|
||||
|
||||
var count = 0;
|
||||
var locs = { get length() { if (count++ > 0) throw 42; return 0; } };
|
||||
var locales = Intl.getCanonicalLocales(locs); // shouldn't throw 42
|
||||
assert.sameValue(locales.length, 0);
|
|
@ -0,0 +1,19 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests the getCanonicalLocales function for overridden Array.push().
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
Array.prototype.push = function() { throw 42; };
|
||||
|
||||
// must not throw 42, might if push is used
|
||||
var arr = Intl.getCanonicalLocales(["en-US"]);
|
||||
|
||||
assert(compareArray(arr, ["en-US"]));
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests that the value returned by getCanonicalLocales is an Array.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
var locales = ['en-US'];
|
||||
var result = Intl.getCanonicalLocales(['en-US']);
|
||||
|
||||
assert.notSameValue(result, locales, "result is a new array instance");
|
||||
assert.sameValue(result.length, 1, "result.length");
|
||||
assert(result.hasOwnProperty("0"), "result an own property `0`");
|
||||
assert.sameValue(result[0], "en-US", "result[0]");
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Test Intl.getCanonicalLocales.name for step 7.c.iii
|
||||
info: |
|
||||
9.2.1 CanonicalizeLocaleList (locales)
|
||||
7. Repeat, while k < len.
|
||||
c. If kPresent is true, then
|
||||
iii. Let tag be ? ToString(kValue).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
var locales = {
|
||||
'0': { toString: function() { locales[1] = 'pt-BR'; return 'en-US'; }},
|
||||
length: 2
|
||||
};
|
||||
|
||||
assert(compareArray(Intl.getCanonicalLocales(locales), [ "en-US", "pt-BR" ]));
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2016 Mozilla Corporation. All rights reserved.
|
||||
// This code is governed by the license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-intl.getcanonicallocales
|
||||
description: Tests the getCanonicalLocales function for weird tags.
|
||||
info: |
|
||||
8.2.1 Intl.getCanonicalLocales (locales)
|
||||
1. Let ll be ? CanonicalizeLocaleList(locales).
|
||||
2. Return CreateArrayFromList(ll).
|
||||
includes: [compareArray.js]
|
||||
---*/
|
||||
|
||||
var weirdCases =
|
||||
[
|
||||
"x-u-foo",
|
||||
"en-x-u-foo",
|
||||
"en-a-bar-x-u-foo",
|
||||
"en-x-u-foo-a-bar",
|
||||
"en-a-bar-u-baz-x-u-foo",
|
||||
];
|
||||
|
||||
weirdCases.forEach(function (weird) {
|
||||
assert(compareArray(Intl.getCanonicalLocales(weird), [weird]));
|
||||
});
|
Loading…
Reference in New Issue