summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js')
-rw-r--r--js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js b/js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js
new file mode 100644
index 0000000000..cb6025388f
--- /dev/null
+++ b/js/src/tests/test262/intl402/Locale/reject-duplicate-variants.js
@@ -0,0 +1,46 @@
+// Copyright 2020 Jeff Walden, Mozilla Corporation. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-isstructurallyvalidlanguagetag
+description: >
+ Verifies that duplicate variants in a tag ("en-emodeng-emodeng") make the tag
+ structurally invalid.
+info: |
+ the `unicode_language_id` within _locale_ contains no duplicate
+ `unicode_variant_subtag` subtags
+features: [Intl.Locale]
+---*/
+
+assert.sameValue(typeof Intl.Locale, "function");
+
+function mustReject(tag) {
+ assert.throws(RangeError, () => {
+ // Direct matches are rejected.
+ new Intl.Locale(tag);
+ }, `tag "${tag}" must be considered structurally invalid`);
+}
+
+// BCP47 since forever, and ECMA-402 as consequence, do not consider tags that
+// contain duplicate variants to be structurally valid.
+
+// Direct matches are rejected.
+mustReject("en-emodeng-emodeng");
+// Case-insensitive matches are also rejected.
+mustReject("en-Emodeng-emodeng");
+// ...and in either order.
+mustReject("en-emodeng-Emodeng");
+
+// Repeat the above tests with additional variants interspersed at each point
+// for completeness.
+mustReject("en-variant-emodeng-emodeng");
+mustReject("en-variant-Emodeng-emodeng");
+mustReject("en-variant-emodeng-Emodeng");
+mustReject("en-emodeng-variant-emodeng");
+mustReject("en-Emodeng-variant-emodeng");
+mustReject("en-emodeng-variant-Emodeng");
+mustReject("en-emodeng-emodeng-variant");
+mustReject("en-Emodeng-emodeng-variant");
+mustReject("en-emodeng-Emodeng-variant");
+
+reportCompare(0, 0);