1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// Copyright (C) 2023 Igalia S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-Intl.DisplayNames.prototype.of
description: Throws a RangeError for invalid `language` codes
info: |
12.3.3 Intl.DisplayNames.prototype.of ( code )
1. If type is "language", then
a. If code cannot be matched by the unicode_language_id Unicode locale nonterminal, throw a RangeError exception.
b. If IsStructurallyValidLanguageTag(code) is false, throw a RangeError exception.
c. Return CanonicalizeUnicodeLocaleId(code).
features: [Intl.DisplayNames-v2]
---*/
var displayNames = new Intl.DisplayNames(undefined, {type: 'language'});
assert.throws(RangeError, function() {
displayNames.of('');
}, 'invalid language subtag - empty string');
assert.throws(RangeError, function() {
displayNames.of('a');
}, 'invalid language subtag - only one character');
assert.throws(RangeError, function() {
displayNames.of('abcdefghi');
}, 'invalid language subtag - greater than 8 characters');
assert.throws(RangeError, function() {
displayNames.of('en-u-hebrew');
}, 'singleton subtag');
assert.throws(RangeError, function() {
displayNames.of('aa-aaaa-bbbb');
}, 'multiple script subtags');
assert.throws(RangeError, function() {
displayNames.of('aa-aaaaa-aaaaa');
}, 'duplicate variant subtag');
assert.throws(RangeError, function() {
displayNames.of('aa-bb-cc');
}, 'multiple region subtags');
assert.throws(RangeError, function() {
displayNames.of('1a');
}, 'invalid language subtag - leading digit');
assert.throws(RangeError, function() {
displayNames.of('aa-1a');
}, 'leading-digit subtag of length 2');
assert.throws(RangeError, function() {
displayNames.of('aa-1aa');
}, 'leading-digit non-numeric subtag of length 3');
assert.throws(RangeError, function() {
displayNames.of('@#$%@#$');
}, 'invalid characters');
assert.throws(RangeError, function() {
displayNames.of('en-US-');
}, 'separator not followed by subtag');
assert.throws(RangeError, function() {
displayNames.of('-en');
}, 'separator at start');
assert.throws(RangeError, function() {
displayNames.of('en--GB');
}, 'missing subtag between separators');
assert.throws(RangeError, function() {
displayNames.of('root');
}, 'BCP 47-incompatible CLDR syntax ("root" instead of "und")');
assert.throws(RangeError, function(){
displayNames.of('abcd-GB');
}, 'BCP 47-incompatible CLDR syntax (script subtag without a language subtag)');
assert.throws(RangeError, function(){
displayNames.of('abcd');
}, 'BCP 47-incompatible CLDR syntax (bare script subtag)');
assert.throws(RangeError, function(){
displayNames.of('en_GB');
}, 'BCP 47-incompatible CLDR syntax (_ as separator)');
reportCompare(0, 0);
|