| // Copyright 2012 Mozilla Corporation. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| es5id: 9.2.1_3 |
| description: > |
| Tests that a single string instead of a locale list is treated as |
| the locale list containing that string. |
| author: Norbert Lindenberg |
| includes: [testIntl.js] |
| ---*/ |
| |
| var validAndInvalidLanguageTags = [ |
| "de", // ISO 639 language code |
| "de-DE", // + ISO 3166-1 country code |
| "DE-de", // tags are case-insensitive |
| "cmn", // ISO 639 language code |
| "cmn-Hans", // + script code |
| "CMN-hANS", // tags are case-insensitive |
| "cmn-hans-cn", // + ISO 3166-1 country code |
| "es-419", // + UN M.49 region code |
| "es-419-u-nu-latn-cu-bob", // + Unicode locale extension sequence |
| "i-klingon", // grandfathered tag |
| "cmn-hans-cn-t-ca-u-ca-x-t-u", // singleton subtags can also be used as private use subtags |
| "de-gregory-u-ca-gregory", // variant and extension subtags may be the same |
| "de_DE", |
| "DE_de", |
| "cmn_Hans", |
| "cmn-hans_cn", |
| "es_419", |
| "es-419-u-nu-latn-cu_bob", |
| "i_klingon", |
| "cmn-hans-cn-t-ca-u-ca-x_t-u", |
| "enochian_enochian", |
| "de-gregory_u-ca-gregory", |
| "i", // singleton alone |
| "x", // private use without subtag |
| "u", // extension singleton in first place |
| "419", // region code in first place |
| "u-nu-latn-cu-bob", // extension sequence without language |
| "hans-cmn-cn", // "hans" could theoretically be a 4-letter language code, |
| // but those can't be followed by extlang codes. |
| "cmn-hans-cn-u-u", // duplicate singleton |
| "cmn-hans-cn-t-u-ca-u", // duplicate singleton |
| "de-gregory-gregory" // duplicate variant |
| ]; |
| |
| testWithIntlConstructors(function (Constructor) { |
| validAndInvalidLanguageTags.forEach(function (locale) { |
| var obj1, obj2, locale1, locale2, error1, error2; |
| try { |
| obj1 = new Constructor(locale); |
| locale1 = obj1.resolvedOptions().locale; |
| } catch (e) { |
| error1 = e; |
| } |
| try { |
| obj2 = new Constructor([locale]); |
| locale2 = obj2.resolvedOptions().locale; |
| } catch (e) { |
| error2 = e; |
| } |
| |
| assert.sameValue((error1 === undefined), (error2 === undefined), "Single locale string " + locale + " was " + (error1 === undefined ? "accepted" : "rejected") + ", but locale list containing that string wasn't."); |
| if (error1 === undefined) { |
| assert.sameValue(locale1, locale2, "Single locale string " + locale + " results in " + locale1 + ", but locale list [" + locale + "] results in " + locale2 + "."); |
| } else { |
| assert.sameValue(error1.name, error2.name, "Single locale string " + locale + " results in error " + error1.name + ", but locale list [" + locale + "] results in error " + error2.name + "."); |
| } |
| }); |
| }); |