summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/DisplayNames/prototype/of/type-language-invalid.js
blob: e00ed3f1f588f44c9869340138f429ed72633182 (plain)
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);