blob: 0beeed2f2307532aa188c6a25b45431627a8fa3e [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
var passed = true;
function testCollatorOptions(option, value, str1, str2, expected) {
try {
var options = {};
options[option] = value;
var collator = new Intl.Collator("en-US", options);
var actual = collator.compare(str1, str2);
if (actual !== expected) {
passed = false;
WScript.Echo("ERROR: Comparing '" + str1 + "' and '" + str2 + "' with option '" + option + ": " + value + "' resulted in '" + actual + "'; expected '" + expected + "'!");
}
} catch (ex) {
passed = false;
WScript.Echo("Error testCollatorOptions: " + ex.message);
}
}
function arrayEqual(arr1, arr2) {
if (arr1.length !== arr2.length) return false;
for (var i = 0; i < arr1.length; i++) {
if (arr1[i] !== arr2[i]) return false;
}
return true;
}
function testSupportedLocales(locales, expectedResult) {
try {
var actual = Intl.Collator.supportedLocalesOf(locales, { localeMatcher: "best fit" });
if (!arrayEqual(actual, expectedResult)) {
throw new Error("Calling SupportedLocalesOf on '[" + locales.join(",") + "]' doesn't match expected result '[" + expectedResult.join(",") + "]' when using best fit. Actual:[" + actual.join(",") + "]");
}
actual = Intl.Collator.supportedLocalesOf(locales, { localeMatcher: "best fit" });
if (!arrayEqual(actual, expectedResult)) {
throw new Error("Calling SupportedLocalesOf on '[" + locales.join(",") + "]' doesn't match expected result '[" + expectedResult.join(",") + "]' when using lookup. Actual: [" + actual.join(",") + "]");
}
}
catch (ex) {
passed = false;
WScript.Echo("Error testSupportedLocales: " + ex.message);
}
}
testCollatorOptions("sensitivity", "base", "A", "a", 0);
testCollatorOptions("sensitivity", "base", "A", "B", -1);
testCollatorOptions("sensitivity", "base", "a", "\u00E2", 0);
testCollatorOptions("sensitivity", "accent", "A", "a", 0);
testCollatorOptions("sensitivity", "accent", "A", "B", -1);
testCollatorOptions("sensitivity", "accent", "a", "\u00E2", -1);
testCollatorOptions("sensitivity", "case", "A", "a", 1);
testCollatorOptions("sensitivity", "case", "A", "B", -1);
testCollatorOptions("sensitivity", "case", "a", "\u00E2", 0);
testCollatorOptions("sensitivity", "variant", "A", "a", 1);
testCollatorOptions("sensitivity", "variant", "A", "B", -1);
testCollatorOptions("sensitivity", "variant", "a", "\u00E2", -1);
testCollatorOptions("ignorePunctuation", true, ".a", "a", 0);
testCollatorOptions("ignorePunctuation", false, ".a", "a", -1);
testCollatorOptions("numeric", true, "10", "9", 1);
testCollatorOptions("numeric", false, "10", "9", -1);
testSupportedLocales(undefined, []);
testSupportedLocales(["en-US"], ["en-US"]);
testSupportedLocales([], []);
testSupportedLocales(["xxx"], []);
if (new Intl.Collator("es", { collation: "trad" }).resolvedOptions().collation !== "default") {
WScript.Echo("Error: Collation option passed through option affects the value.");
passed = false;
}
if (passed === true) {
WScript.Echo("Pass");
}