Skip to content

Commit

Permalink
created type-language-invalid.js for DisplayNames.prototype.of()
Browse files Browse the repository at this point in the history
Co-authored-by: Richard Gibson <[email protected]>
  • Loading branch information
ben-allen authored and ptomato committed Oct 2, 2023
1 parent 9f5938b commit 63456ad
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions test/intl402/DisplayNames/prototype/of/type-language-invalid.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// 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)');

0 comments on commit 63456ad

Please sign in to comment.