From 1af24250750e0a4318ec8efb467245fa0e86c215 Mon Sep 17 00:00:00 2001 From: Norbert Lindenberg Date: Sun, 26 Aug 2012 20:49:25 -0700 Subject: =?UTF-8?q?Added=20new=20tests=20for=20chapters=206=20and=209=20of?= =?UTF-8?q?=20ECMAScript=20Internationalization=20API=20Specification.=20-?= =?UTF-8?q?=20Removed=20a=20few=20old=20test=20cases=20that=20were=20redun?= =?UTF-8?q?dant=20with=20new,=20more=20comprehensive=20ones.=20-=20Added?= =?UTF-8?q?=20testIntl.js=20as=20standard=20include=20for=20all=20console?= =?UTF-8?q?=20tests=20in=20test262.py=20=E2=80=93=20see=20related=20bug=20?= =?UTF-8?q?574.=20-=20Added=20.jshintrc=20file=20for=20settings=20for=20th?= =?UTF-8?q?e=20JSHint=20tool.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .jshintrc | 3 + console/harness/testIntl.js | 658 +++++++++++++++++++++++++ test/harness/testIntl.js | 658 +++++++++++++++++++++++++ test/suite/intl402/ch06/6.2/6.2.2_a.js | 34 ++ test/suite/intl402/ch06/6.2/6.2.2_b.js | 41 ++ test/suite/intl402/ch06/6.2/6.2.2_c.js | 45 ++ test/suite/intl402/ch06/6.2/6.2.3.js | 68 +++ test/suite/intl402/ch06/6.2/6.2.4.js | 19 + test/suite/intl402/ch06/6.3/6.3.1_a.js | 25 + test/suite/intl402/ch06/6.3/6.3.1_b.js | 34 ++ test/suite/intl402/ch06/6.4/6.4_a.js | 22 + test/suite/intl402/ch06/6.4/6.4_b.js | 34 ++ test/suite/intl402/ch06/6.4/6.4_c.js | 36 ++ test/suite/intl402/ch09/9.1/9.1_a.js | 18 + test/suite/intl402/ch09/9.1/9.1_b.js | 32 ++ test/suite/intl402/ch09/9.2/9.2.1_1.js | 23 + test/suite/intl402/ch09/9.2/9.2.1_2.js | 21 + test/suite/intl402/ch09/9.2/9.2.1_3.js | 87 ++++ test/suite/intl402/ch09/9.2/9.2.1_4.js | 46 ++ test/suite/intl402/ch09/9.2/9.2.1_8_c_ii.js | 30 ++ test/suite/intl402/ch09/9.2/9.2.1_8_c_vi.js | 18 + test/suite/intl402/ch09/9.2/9.2.2.js | 45 ++ test/suite/intl402/ch09/9.2/9.2.3_5.js | 22 + test/suite/intl402/ch09/9.2/9.2.5_11_g_ii_2.js | 26 + test/suite/intl402/ch09/9.2/9.2.5_6.js | 22 + test/suite/intl402/ch09/9.2/9.2.6_2.js | 27 + test/suite/intl402/ch09/9.2/9.2.6_4.js | 23 + test/suite/intl402/ch09/9.2/9.2.6_4_b.js | 47 ++ test/suite/intl402/ch09/9.2/9.2.6_4_c.js | 32 ++ test/suite/intl402/ch09/9.2/9.2.8_1_c.js | 36 ++ test/suite/intl402/ch09/9.2/9.2.8_4.js | 35 ++ test/suite/intl402/ch10/10.2/10.2.3.js | 18 - test/suite/intl402/ch11/11.2/11.2.3.js | 19 - test/suite/intl402/ch12/12.2/12.2.3.js | 19 - tools/packaging/test262.py | 1 + website/harness/testIntl.js | 658 +++++++++++++++++++++++++ website/json/intl402.json | 2 +- website/json/testcases_intl402.json | 2 +- 38 files changed, 2928 insertions(+), 58 deletions(-) create mode 100644 .jshintrc create mode 100644 console/harness/testIntl.js create mode 100644 test/harness/testIntl.js create mode 100644 test/suite/intl402/ch06/6.2/6.2.2_a.js create mode 100644 test/suite/intl402/ch06/6.2/6.2.2_b.js create mode 100644 test/suite/intl402/ch06/6.2/6.2.2_c.js create mode 100644 test/suite/intl402/ch06/6.2/6.2.3.js create mode 100644 test/suite/intl402/ch06/6.2/6.2.4.js create mode 100644 test/suite/intl402/ch06/6.3/6.3.1_a.js create mode 100644 test/suite/intl402/ch06/6.3/6.3.1_b.js create mode 100644 test/suite/intl402/ch06/6.4/6.4_a.js create mode 100644 test/suite/intl402/ch06/6.4/6.4_b.js create mode 100644 test/suite/intl402/ch06/6.4/6.4_c.js create mode 100644 test/suite/intl402/ch09/9.1/9.1_a.js create mode 100644 test/suite/intl402/ch09/9.1/9.1_b.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_1.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_2.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_3.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_4.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_8_c_ii.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.1_8_c_vi.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.2.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.3_5.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.5_11_g_ii_2.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.5_6.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.6_2.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.6_4.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.6_4_b.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.6_4_c.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.8_1_c.js create mode 100644 test/suite/intl402/ch09/9.2/9.2.8_4.js delete mode 100644 test/suite/intl402/ch10/10.2/10.2.3.js delete mode 100644 test/suite/intl402/ch11/11.2/11.2.3.js delete mode 100644 test/suite/intl402/ch12/12.2/12.2.3.js create mode 100644 website/harness/testIntl.js diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 000000000..4caae16d6 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,3 @@ +{ + "predef": ["$ERROR", "Intl"] +} diff --git a/console/harness/testIntl.js b/console/harness/testIntl.js new file mode 100644 index 000000000..251f0a2ca --- /dev/null +++ b/console/harness/testIntl.js @@ -0,0 +1,658 @@ +// Copyright 2011-2012 Norbert Lindenberg. All rights reserved. +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * This file contains shared functions for the tests in the conformance test + * suite for the ECMAScript Internationalization API. + * @author Norbert Lindenberg + */ + + +/** + * @description Calls the provided function for every service constructor in + * the Intl object, until f returns a falsy value. It returns the result of the + * last call to f, mapped to a boolean. + * @param {Function} f the function to call for each service constructor in + * the Intl object. + * @param {Function} Constructor the constructor object to test with. + * @result {Boolean} whether the test succeeded. + */ +function testWithIntlConstructors(f) { + var constructors = ["Collator", "NumberFormat", "DateTimeFormat"]; + return constructors.every(function (constructor) { + var Constructor = Intl[constructor]; + var result; + try { + result = f(Constructor); + } catch (e) { + e.message += " (Testing with " + constructor + ".)"; + throw e; + } + return result; + }); +} + + +/** + * Returns the name of the given constructor object, which must be one of + * Intl.Collator, Intl.NumberFormat, or Intl.DateTimeFormat. + * @param {object} Constructor a constructor + * @return {string} the name of the constructor + */ +function getConstructorName(Constructor) { + switch (Constructor) { + case Intl.Collator: + return "Collator"; + case Intl.NumberFormat: + return "NumberFormat"; + case Intl.DateTimeFormat: + return "DateTimeFormat"; + default: + $ERROR("test internal error: unknown Constructor"); + } +} + + +/** + * Taints a named data property of the given object by installing + * a setter that throws an exception. + * @param {object} obj the object whose data property to taint + * @param {string} property the property to taint + */ +function taintDataProperty(obj, property) { + Object.defineProperty(obj, property, { + set: function(value) { + $ERROR("Client code can adversely affect behavior: setter for " + property + "."); + }, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints a named method of the given object by replacing it with a function + * that throws an exception. + * @param {object} obj the object whose method to taint + * @param {string} property the name of the method to taint + */ +function taintMethod(obj, property) { + Object.defineProperty(obj, property, { + value: function() { + $ERROR("Client code can adversely affect behavior: method " + property + "."); + }, + writable: true, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints the given properties (and similarly named properties) by installing + * setters on Object.prototype that throw exceptions. + * @param {Array} properties an array of property names to taint + */ +function taintProperties(properties) { + properties.forEach(function (property) { + var adaptedProperties = [property, "__" + property, "_" + property, property + "_", property + "__"]; + adaptedProperties.forEach(function (property) { + taintDataProperty(Object.prototype, property); + }); + }); +} + + +/** + * Taints the Array object by creating a setter for the property "0" and + * replacing some key methods with functions that throw exceptions. + */ +function taintArray() { + taintDataProperty(Array.prototype, "0"); + taintMethod(Array.prototype, "indexOf"); + taintMethod(Array.prototype, "join"); + taintMethod(Array.prototype, "push"); + taintMethod(Array.prototype, "slice"); + taintMethod(Array.prototype, "sort"); +} + + +// auxiliary data for getLocaleSupportInfo +var languages = ["zh", "es", "en", "hi", "ur", "ar", "ja", "pa"]; +var scripts = ["Latn", "Hans", "Deva", "Arab", "Jpan", "Hant"]; +var countries = ["CN", "IN", "US", "PK", "JP", "TW", "HK", "SG"]; +var localeSupportInfo = {}; + + +/** + * Gets locale support info for the given constructor object, which must be one + * of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat. + * @param {object} Constructor the constructor for which to get locale support info + * @return {object} locale support info with the following properties: + * supported: array of fully supported language tags + * byFallback: array of language tags that are supported through fallbacks + * unsupported: array of unsupported language tags + */ +function getLocaleSupportInfo(Constructor) { + var constructorName = getConstructorName(Constructor); + if (localeSupportInfo[constructorName] !== undefined) { + return localeSupportInfo[constructorName]; + } + + var allTags = []; + var i, j, k; + var language, script, country; + for (i = 0; i < languages.length; i++) { + language = languages[i]; + allTags.push(language); + for (j = 0; j < scripts.length; j++) { + script = scripts[j]; + allTags.push(language + "-" + script); + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + script + "-" + country); + } + } + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + country); + } + } + + var supported = []; + var byFallback = []; + var unsupported = []; + for (i = 0; i < allTags.length; i++) { + var request = allTags[i]; + var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale; + if (request === result) { + supported.push(request); + } else if (request.indexOf(result) === 0) { + byFallback.push(request); + } else { + unsupported.push(request); + } + } + + localeSupportInfo[constructorName] = { + supported: supported, + byFallback: byFallback, + unsupported: unsupported + }; + + return localeSupportInfo[constructorName]; +} + + +/** + * @description Tests whether locale is a String value representing a + * structurally valid and canonicalized BCP 47 language tag, as defined in + * sections 6.2.2 and 6.2.3 of the ECMAScript Internationalization API + * Specification. + * @param {String} locale the string to be tested. + * @result {Boolean} whether the test succeeded. + */ +function isCanonicalizedStructurallyValidLanguageTag(locale) { + + /** + * Regular expression defining BCP 47 language tags. + * + * Spec: RFC 5646 section 2.1. + */ + var alpha = "[a-zA-Z]", + digit = "[0-9]", + alphanum = "(" + alpha + "|" + digit + ")", + regular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)", + irregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)", + grandfathered = "(" + irregular + "|" + regular + ")", + privateuse = "(x(-[a-z0-9]{1,8})+)", + singleton = "(" + digit + "|[A-WY-Za-wy-z])", + extension = "(" + singleton + "(-" + alphanum + "{2,8})+)", + variant = "(" + alphanum + "{5,8}|(" + digit + alphanum + "{3}))", + region = "(" + alpha + "{2}|" + digit + "{3})", + script = "(" + alpha + "{4})", + extlang = "(" + alpha + "{3}(-" + alpha + "{3}){0,2})", + language = "(" + alpha + "{2,3}(-" + extlang + ")?|" + alpha + "{4}|" + alpha + "{5,8})", + langtag = language + "(-" + script + ")?(-" + region + ")?(-" + variant + ")*(-" + extension + ")*(-" + privateuse + ")?", + languageTag = "^(" + langtag + "|" + privateuse + "|" + grandfathered + ")$", + languageTagRE = new RegExp(languageTag, "i"); + var duplicateSingleton = "-" + singleton + "-(.*-)?\\1(?!" + alphanum + ")", + duplicateSingletonRE = new RegExp(duplicateSingleton, "i"), + duplicateVariant = "(" + alphanum + "{2,8}-)+" + variant + "-(" + alphanum + "{2,8}-)*\\3(?!" + alphanum + ")", + duplicateVariantRE = new RegExp(duplicateVariant, "i"); + + + /** + * Verifies that the given string is a well-formed BCP 47 language tag + * with no duplicate variant or singleton subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.2. + */ + function isStructurallyValidLanguageTag(locale) { + if (!languageTagRE.test(locale)) { + return false; + } + locale = locale.split(/-x-/)[0]; + return !duplicateSingletonRE.test(locale) && !duplicateVariantRE.test(locale); + } + + + /** + * Mappings from complete tags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __tagMappings = { + // property names must be in lower case; values in canonical form + + // grandfathered tags from IANA language subtag registry, file date 2011-08-25 + "art-lojban": "jbo", + "cel-gaulish": "cel-gaulish", + "en-gb-oed": "en-GB-oed", + "i-ami": "ami", + "i-bnn": "bnn", + "i-default": "i-default", + "i-enochian": "i-enochian", + "i-hak": "hak", + "i-klingon": "tlh", + "i-lux": "lb", + "i-mingo": "i-mingo", + "i-navajo": "nv", + "i-pwn": "pwn", + "i-tao": "tao", + "i-tay": "tay", + "i-tsu": "tsu", + "no-bok": "nb", + "no-nyn": "nn", + "sgn-be-fr": "sfb", + "sgn-be-nl": "vgt", + "sgn-ch-de": "sgg", + "zh-guoyu": "cmn", + "zh-hakka": "hak", + "zh-min": "zh-min", + "zh-min-nan": "nan", + "zh-xiang": "hsn", + // deprecated redundant tags from IANA language subtag registry, file date 2011-08-25 + "sgn-br": "bzs", + "sgn-co": "csn", + "sgn-de": "gsg", + "sgn-dk": "dsl", + "sgn-es": "ssp", + "sgn-fr": "fsl", + "sgn-gb": "bfi", + "sgn-gr": "gss", + "sgn-ie": "isg", + "sgn-it": "ise", + "sgn-jp": "jsl", + "sgn-mx": "mfs", + "sgn-ni": "ncs", + "sgn-nl": "dse", + "sgn-no": "nsl", + "sgn-pt": "psr", + "sgn-se": "swl", + "sgn-us": "ase", + "sgn-za": "sfs", + "zh-cmn": "cmn", + "zh-cmn-hans": "cmn-Hans", + "zh-cmn-hant": "cmn-Hant", + "zh-gan": "gan", + "zh-wuu": "wuu", + "zh-yue": "yue", + // deprecated variant with prefix from IANA language subtag registry, file date 2011-08-25 + "ja-latn-hepburn-heploc": "ja-Latn-alalc97" + }; + + + /** + * Mappings from non-extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __subtagMappings = { + // property names and values must be in canonical case + // language subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "in": "id", + "iw": "he", + "ji": "yi", + "jw": "jv", + "mo": "ro", + "ayx": "nun", + "cjr": "mom", + "cmk": "xch", + "drh": "khk", + "drw": "prs", + "gav": "dev", + "mst": "mry", + "myt": "mry", + "tie": "ras", + "tkk": "twm", + "tnf": "prs", + // region subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "BU": "MM", + "DD": "DE", + "FX": "FR", + "TP": "TL", + "YD": "YE", + "ZR": "CD" + }; + + + /** + * Mappings from extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __extlangMappings = { + // extlang subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + // values are arrays with [0] the replacement value, [1] (if present) the prefix to be removed + "aao": ["aao", "ar"], + "abh": ["abh", "ar"], + "abv": ["abv", "ar"], + "acm": ["acm", "ar"], + "acq": ["acq", "ar"], + "acw": ["acw", "ar"], + "acx": ["acx", "ar"], + "acy": ["acy", "ar"], + "adf": ["adf", "ar"], + "ads": ["ads", "sgn"], + "aeb": ["aeb", "ar"], + "aec": ["aec", "ar"], + "aed": ["aed", "sgn"], + "aen": ["aen", "sgn"], + "afb": ["afb", "ar"], + "afg": ["afg", "sgn"], + "ajp": ["ajp", "ar"], + "apc": ["apc", "ar"], + "apd": ["apd", "ar"], + "arb": ["arb", "ar"], + "arq": ["arq", "ar"], + "ars": ["ars", "ar"], + "ary": ["ary", "ar"], + "arz": ["arz", "ar"], + "ase": ["ase", "sgn"], + "asf": ["asf", "sgn"], + "asp": ["asp", "sgn"], + "asq": ["asq", "sgn"], + "asw": ["asw", "sgn"], + "auz": ["auz", "ar"], + "avl": ["avl", "ar"], + "ayh": ["ayh", "ar"], + "ayl": ["ayl", "ar"], + "ayn": ["ayn", "ar"], + "ayp": ["ayp", "ar"], + "bbz": ["bbz", "ar"], + "bfi": ["bfi", "sgn"], + "bfk": ["bfk", "sgn"], + "bjn": ["bjn", "ms"], + "bog": ["bog", "sgn"], + "bqn": ["bqn", "sgn"], + "bqy": ["bqy", "sgn"], + "btj": ["btj", "ms"], + "bve": ["bve", "ms"], + "bvl": ["bvl", "sgn"], + "bvu": ["bvu", "ms"], + "bzs": ["bzs", "sgn"], + "cdo": ["cdo", "zh"], + "cds": ["cds", "sgn"], + "cjy": ["cjy", "zh"], + "cmn": ["cmn", "zh"], + "coa": ["coa", "ms"], + "cpx": ["cpx", "zh"], + "csc": ["csc", "sgn"], + "csd": ["csd", "sgn"], + "cse": ["cse", "sgn"], + "csf": ["csf", "sgn"], + "csg": ["csg", "sgn"], + "csl": ["csl", "sgn"], + "csn": ["csn", "sgn"], + "csq": ["csq", "sgn"], + "csr": ["csr", "sgn"], + "czh": ["czh", "zh"], + "czo": ["czo", "zh"], + "doq": ["doq", "sgn"], + "dse": ["dse", "sgn"], + "dsl": ["dsl", "sgn"], + "dup": ["dup", "ms"], + "ecs": ["ecs", "sgn"], + "esl": ["esl", "sgn"], + "esn": ["esn", "sgn"], + "eso": ["eso", "sgn"], + "eth": ["eth", "sgn"], + "fcs": ["fcs", "sgn"], + "fse": ["fse", "sgn"], + "fsl": ["fsl", "sgn"], + "fss": ["fss", "sgn"], + "gan": ["gan", "zh"], + "gom": ["gom", "kok"], + "gse": ["gse", "sgn"], + "gsg": ["gsg", "sgn"], + "gsm": ["gsm", "sgn"], + "gss": ["gss", "sgn"], + "gus": ["gus", "sgn"], + "hab": ["hab", "sgn"], + "haf": ["haf", "sgn"], + "hak": ["hak", "zh"], + "hds": ["hds", "sgn"], + "hji": ["hji", "ms"], + "hks": ["hks", "sgn"], + "hos": ["hos", "sgn"], + "hps": ["hps", "sgn"], + "hsh": ["hsh", "sgn"], + "hsl": ["hsl", "sgn"], + "hsn": ["hsn", "zh"], + "icl": ["icl", "sgn"], + "ils": ["ils", "sgn"], + "inl": ["inl", "sgn"], + "ins": ["ins", "sgn"], + "ise": ["ise", "sgn"], + "isg": ["isg", "sgn"], + "isr": ["isr", "sgn"], + "jak": ["jak", "ms"], + "jax": ["jax", "ms"], + "jcs": ["jcs", "sgn"], + "jhs": ["jhs", "sgn"], + "jls": ["jls", "sgn"], + "jos": ["jos", "sgn"], + "jsl": ["jsl", "sgn"], + "jus": ["jus", "sgn"], + "kgi": ["kgi", "sgn"], + "knn": ["knn", "kok"], + "kvb": ["kvb", "ms"], + "kvk": ["kvk", "sgn"], + "kvr": ["kvr", "ms"], + "kxd": ["kxd", "ms"], + "lbs": ["lbs", "sgn"], + "lce": ["lce", "ms"], + "lcf": ["lcf", "ms"], + "liw": ["liw", "ms"], + "lls": ["lls", "sgn"], + "lsg": ["lsg", "sgn"], + "lsl": ["lsl", "sgn"], + "lso": ["lso", "sgn"], + "lsp": ["lsp", "sgn"], + "lst": ["lst", "sgn"], + "lsy": ["lsy", "sgn"], + "ltg": ["ltg", "lv"], + "lvs": ["lvs", "lv"], + "lzh": ["lzh", "zh"], + "max": ["max", "ms"], + "mdl": ["mdl", "sgn"], + "meo": ["meo", "ms"], + "mfa": ["mfa", "ms"], + "mfb": ["mfb", "ms"], + "mfs": ["mfs", "sgn"], + "min": ["min", "ms"], + "mnp": ["mnp", "zh"], + "mqg": ["mqg", "ms"], + "mre": ["mre", "sgn"], + "msd": ["msd", "sgn"], + "msi": ["msi", "ms"], + "msr": ["msr", "sgn"], + "mui": ["mui", "ms"], + "mzc": ["mzc", "sgn"], + "mzg": ["mzg", "sgn"], + "mzy": ["mzy", "sgn"], + "nan": ["nan", "zh"], + "nbs": ["nbs", "sgn"], + "ncs": ["ncs", "sgn"], + "nsi": ["nsi", "sgn"], + "nsl": ["nsl", "sgn"], + "nsp": ["nsp", "sgn"], + "nsr": ["nsr", "sgn"], + "nzs": ["nzs", "sgn"], + "okl": ["okl", "sgn"], + "orn": ["orn", "ms"], + "ors": ["ors", "ms"], + "pel": ["pel", "ms"], + "pga": ["pga", "ar"], + "pks": ["pks", "sgn"], + "prl": ["prl", "sgn"], + "prz": ["prz", "sgn"], + "psc": ["psc", "sgn"], + "psd": ["psd", "sgn"], + "pse": ["pse", "ms"], + "psg": ["psg", "sgn"], + "psl": ["psl", "sgn"], + "pso": ["pso", "sgn"], + "psp": ["psp", "sgn"], + "psr": ["psr", "sgn"], + "pys": ["pys", "sgn"], + "rms": ["rms", "sgn"], + "rsi": ["rsi", "sgn"], + "rsl": ["rsl", "sgn"], + "sdl": ["sdl", "sgn"], + "sfb": ["sfb", "sgn"], + "sfs": ["sfs", "sgn"], + "sgg": ["sgg", "sgn"], + "sgx": ["sgx", "sgn"], + "shu": ["shu", "ar"], + "slf": ["slf", "sgn"], + "sls": ["sls", "sgn"], + "sqs": ["sqs", "sgn"], + "ssh": ["ssh", "ar"], + "ssp": ["ssp", "sgn"], + "ssr": ["ssr", "sgn"], + "svk": ["svk", "sgn"], + "swc": ["swc", "sw"], + "swh": ["swh", "sw"], + "swl": ["swl", "sgn"], + "syy": ["syy", "sgn"], + "tmw": ["tmw", "ms"], + "tse": ["tse", "sgn"], + "tsm": ["tsm", "sgn"], + "tsq": ["tsq", "sgn"], + "tss": ["tss", "sgn"], + "tsy": ["tsy", "sgn"], + "tza": ["tza", "sgn"], + "ugn": ["ugn", "sgn"], + "ugy": ["ugy", "sgn"], + "ukl": ["ukl", "sgn"], + "uks": ["uks", "sgn"], + "urk": ["urk", "ms"], + "uzn": ["uzn", "uz"], + "uzs": ["uzs", "uz"], + "vgt": ["vgt", "sgn"], + "vkk": ["vkk", "ms"], + "vkt": ["vkt", "ms"], + "vsi": ["vsi", "sgn"], + "vsl": ["vsl", "sgn"], + "vsv": ["vsv", "sgn"], + "wuu": ["wuu", "zh"], + "xki": ["xki", "sgn"], + "xml": ["xml", "sgn"], + "xmm": ["xmm", "ms"], + "xms": ["xms", "sgn"], + "yds": ["yds", "sgn"], + "ysl": ["ysl", "sgn"], + "yue": ["yue", "zh"], + "zib": ["zib", "sgn"], + "zlm": ["zlm", "ms"], + "zmi": ["zmi", "ms"], + "zsl": ["zsl", "sgn"], + "zsm": ["zsm", "ms"] + }; + + + /** + * Canonicalizes the given well-formed BCP 47 language tag, including regularized case of subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.3. + * Spec: RFC 5646, section 4.5. + */ + function canonicalizeLanguageTag(locale) { + + // start with lower case for easier processing, and because most subtags will need to be lower case anyway + locale = locale.toLowerCase(); + + // handle mappings for complete tags + if (__tagMappings.hasOwnProperty(locale)) { + return __tagMappings[locale]; + } + + var subtags = locale.split("-"); + var i = 0; + + // handle standard part: all subtags before first singleton or "x" + while (i < subtags.length) { + var subtag = subtags[i]; + if (subtag.length === 1 && (i > 0 || subtag === "x")) { + break; + } else if (i !== 0 && subtag.length === 2) { + subtag = subtag.toUpperCase(); + } else if (subtag.length === 4) { + subtag = subtag[0].toUpperCase() + subtag.substring(1).toLowerCase(); + } + if (__subtagMappings.hasOwnProperty(subtag)) { + subtag = __subtagMappings[subtag]; + } else if (__extlangMappings.hasOwnProperty(subtag)) { + subtag = __extlangMappings[subtag][0]; + if (i === 1 && __extlangMappings[subtag][1] === subtags[0]) { + subtags.shift(); + i--; + } + } + subtags[i] = subtag; + i++; + } + var normal = subtags.slice(0, i).join("-"); + + // handle extensions + var extensions = []; + while (i < subtags.length && subtags[i] !== "x") { + var extensionStart = i; + i++; + while (i < subtags.length && subtags[i].length > 1) { + i++; + } + var extension = subtags.slice(extensionStart, i).join("-"); + extensions.push(extension); + } + extensions.sort(); + + // handle private use + var privateUse; + if (i < subtags.length) { + privateUse = subtags.slice(i).join("-"); + } + + // put everything back together + var canonical = normal; + if (extensions.length > 0) { + canonical += "-" + extensions.join("-"); + } + if (privateUse !== undefined) { + if (canonical.length > 0) { + canonical += "-" + privateUse; + } else { + canonical = privateUse; + } + } + + return canonical; + } + + return typeof locale === "string" && isStructurallyValidLanguageTag(locale) && + canonicalizeLanguageTag(locale) === locale; +} + diff --git a/test/harness/testIntl.js b/test/harness/testIntl.js new file mode 100644 index 000000000..251f0a2ca --- /dev/null +++ b/test/harness/testIntl.js @@ -0,0 +1,658 @@ +// Copyright 2011-2012 Norbert Lindenberg. All rights reserved. +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * This file contains shared functions for the tests in the conformance test + * suite for the ECMAScript Internationalization API. + * @author Norbert Lindenberg + */ + + +/** + * @description Calls the provided function for every service constructor in + * the Intl object, until f returns a falsy value. It returns the result of the + * last call to f, mapped to a boolean. + * @param {Function} f the function to call for each service constructor in + * the Intl object. + * @param {Function} Constructor the constructor object to test with. + * @result {Boolean} whether the test succeeded. + */ +function testWithIntlConstructors(f) { + var constructors = ["Collator", "NumberFormat", "DateTimeFormat"]; + return constructors.every(function (constructor) { + var Constructor = Intl[constructor]; + var result; + try { + result = f(Constructor); + } catch (e) { + e.message += " (Testing with " + constructor + ".)"; + throw e; + } + return result; + }); +} + + +/** + * Returns the name of the given constructor object, which must be one of + * Intl.Collator, Intl.NumberFormat, or Intl.DateTimeFormat. + * @param {object} Constructor a constructor + * @return {string} the name of the constructor + */ +function getConstructorName(Constructor) { + switch (Constructor) { + case Intl.Collator: + return "Collator"; + case Intl.NumberFormat: + return "NumberFormat"; + case Intl.DateTimeFormat: + return "DateTimeFormat"; + default: + $ERROR("test internal error: unknown Constructor"); + } +} + + +/** + * Taints a named data property of the given object by installing + * a setter that throws an exception. + * @param {object} obj the object whose data property to taint + * @param {string} property the property to taint + */ +function taintDataProperty(obj, property) { + Object.defineProperty(obj, property, { + set: function(value) { + $ERROR("Client code can adversely affect behavior: setter for " + property + "."); + }, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints a named method of the given object by replacing it with a function + * that throws an exception. + * @param {object} obj the object whose method to taint + * @param {string} property the name of the method to taint + */ +function taintMethod(obj, property) { + Object.defineProperty(obj, property, { + value: function() { + $ERROR("Client code can adversely affect behavior: method " + property + "."); + }, + writable: true, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints the given properties (and similarly named properties) by installing + * setters on Object.prototype that throw exceptions. + * @param {Array} properties an array of property names to taint + */ +function taintProperties(properties) { + properties.forEach(function (property) { + var adaptedProperties = [property, "__" + property, "_" + property, property + "_", property + "__"]; + adaptedProperties.forEach(function (property) { + taintDataProperty(Object.prototype, property); + }); + }); +} + + +/** + * Taints the Array object by creating a setter for the property "0" and + * replacing some key methods with functions that throw exceptions. + */ +function taintArray() { + taintDataProperty(Array.prototype, "0"); + taintMethod(Array.prototype, "indexOf"); + taintMethod(Array.prototype, "join"); + taintMethod(Array.prototype, "push"); + taintMethod(Array.prototype, "slice"); + taintMethod(Array.prototype, "sort"); +} + + +// auxiliary data for getLocaleSupportInfo +var languages = ["zh", "es", "en", "hi", "ur", "ar", "ja", "pa"]; +var scripts = ["Latn", "Hans", "Deva", "Arab", "Jpan", "Hant"]; +var countries = ["CN", "IN", "US", "PK", "JP", "TW", "HK", "SG"]; +var localeSupportInfo = {}; + + +/** + * Gets locale support info for the given constructor object, which must be one + * of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat. + * @param {object} Constructor the constructor for which to get locale support info + * @return {object} locale support info with the following properties: + * supported: array of fully supported language tags + * byFallback: array of language tags that are supported through fallbacks + * unsupported: array of unsupported language tags + */ +function getLocaleSupportInfo(Constructor) { + var constructorName = getConstructorName(Constructor); + if (localeSupportInfo[constructorName] !== undefined) { + return localeSupportInfo[constructorName]; + } + + var allTags = []; + var i, j, k; + var language, script, country; + for (i = 0; i < languages.length; i++) { + language = languages[i]; + allTags.push(language); + for (j = 0; j < scripts.length; j++) { + script = scripts[j]; + allTags.push(language + "-" + script); + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + script + "-" + country); + } + } + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + country); + } + } + + var supported = []; + var byFallback = []; + var unsupported = []; + for (i = 0; i < allTags.length; i++) { + var request = allTags[i]; + var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale; + if (request === result) { + supported.push(request); + } else if (request.indexOf(result) === 0) { + byFallback.push(request); + } else { + unsupported.push(request); + } + } + + localeSupportInfo[constructorName] = { + supported: supported, + byFallback: byFallback, + unsupported: unsupported + }; + + return localeSupportInfo[constructorName]; +} + + +/** + * @description Tests whether locale is a String value representing a + * structurally valid and canonicalized BCP 47 language tag, as defined in + * sections 6.2.2 and 6.2.3 of the ECMAScript Internationalization API + * Specification. + * @param {String} locale the string to be tested. + * @result {Boolean} whether the test succeeded. + */ +function isCanonicalizedStructurallyValidLanguageTag(locale) { + + /** + * Regular expression defining BCP 47 language tags. + * + * Spec: RFC 5646 section 2.1. + */ + var alpha = "[a-zA-Z]", + digit = "[0-9]", + alphanum = "(" + alpha + "|" + digit + ")", + regular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)", + irregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)", + grandfathered = "(" + irregular + "|" + regular + ")", + privateuse = "(x(-[a-z0-9]{1,8})+)", + singleton = "(" + digit + "|[A-WY-Za-wy-z])", + extension = "(" + singleton + "(-" + alphanum + "{2,8})+)", + variant = "(" + alphanum + "{5,8}|(" + digit + alphanum + "{3}))", + region = "(" + alpha + "{2}|" + digit + "{3})", + script = "(" + alpha + "{4})", + extlang = "(" + alpha + "{3}(-" + alpha + "{3}){0,2})", + language = "(" + alpha + "{2,3}(-" + extlang + ")?|" + alpha + "{4}|" + alpha + "{5,8})", + langtag = language + "(-" + script + ")?(-" + region + ")?(-" + variant + ")*(-" + extension + ")*(-" + privateuse + ")?", + languageTag = "^(" + langtag + "|" + privateuse + "|" + grandfathered + ")$", + languageTagRE = new RegExp(languageTag, "i"); + var duplicateSingleton = "-" + singleton + "-(.*-)?\\1(?!" + alphanum + ")", + duplicateSingletonRE = new RegExp(duplicateSingleton, "i"), + duplicateVariant = "(" + alphanum + "{2,8}-)+" + variant + "-(" + alphanum + "{2,8}-)*\\3(?!" + alphanum + ")", + duplicateVariantRE = new RegExp(duplicateVariant, "i"); + + + /** + * Verifies that the given string is a well-formed BCP 47 language tag + * with no duplicate variant or singleton subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.2. + */ + function isStructurallyValidLanguageTag(locale) { + if (!languageTagRE.test(locale)) { + return false; + } + locale = locale.split(/-x-/)[0]; + return !duplicateSingletonRE.test(locale) && !duplicateVariantRE.test(locale); + } + + + /** + * Mappings from complete tags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __tagMappings = { + // property names must be in lower case; values in canonical form + + // grandfathered tags from IANA language subtag registry, file date 2011-08-25 + "art-lojban": "jbo", + "cel-gaulish": "cel-gaulish", + "en-gb-oed": "en-GB-oed", + "i-ami": "ami", + "i-bnn": "bnn", + "i-default": "i-default", + "i-enochian": "i-enochian", + "i-hak": "hak", + "i-klingon": "tlh", + "i-lux": "lb", + "i-mingo": "i-mingo", + "i-navajo": "nv", + "i-pwn": "pwn", + "i-tao": "tao", + "i-tay": "tay", + "i-tsu": "tsu", + "no-bok": "nb", + "no-nyn": "nn", + "sgn-be-fr": "sfb", + "sgn-be-nl": "vgt", + "sgn-ch-de": "sgg", + "zh-guoyu": "cmn", + "zh-hakka": "hak", + "zh-min": "zh-min", + "zh-min-nan": "nan", + "zh-xiang": "hsn", + // deprecated redundant tags from IANA language subtag registry, file date 2011-08-25 + "sgn-br": "bzs", + "sgn-co": "csn", + "sgn-de": "gsg", + "sgn-dk": "dsl", + "sgn-es": "ssp", + "sgn-fr": "fsl", + "sgn-gb": "bfi", + "sgn-gr": "gss", + "sgn-ie": "isg", + "sgn-it": "ise", + "sgn-jp": "jsl", + "sgn-mx": "mfs", + "sgn-ni": "ncs", + "sgn-nl": "dse", + "sgn-no": "nsl", + "sgn-pt": "psr", + "sgn-se": "swl", + "sgn-us": "ase", + "sgn-za": "sfs", + "zh-cmn": "cmn", + "zh-cmn-hans": "cmn-Hans", + "zh-cmn-hant": "cmn-Hant", + "zh-gan": "gan", + "zh-wuu": "wuu", + "zh-yue": "yue", + // deprecated variant with prefix from IANA language subtag registry, file date 2011-08-25 + "ja-latn-hepburn-heploc": "ja-Latn-alalc97" + }; + + + /** + * Mappings from non-extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __subtagMappings = { + // property names and values must be in canonical case + // language subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "in": "id", + "iw": "he", + "ji": "yi", + "jw": "jv", + "mo": "ro", + "ayx": "nun", + "cjr": "mom", + "cmk": "xch", + "drh": "khk", + "drw": "prs", + "gav": "dev", + "mst": "mry", + "myt": "mry", + "tie": "ras", + "tkk": "twm", + "tnf": "prs", + // region subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "BU": "MM", + "DD": "DE", + "FX": "FR", + "TP": "TL", + "YD": "YE", + "ZR": "CD" + }; + + + /** + * Mappings from extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __extlangMappings = { + // extlang subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + // values are arrays with [0] the replacement value, [1] (if present) the prefix to be removed + "aao": ["aao", "ar"], + "abh": ["abh", "ar"], + "abv": ["abv", "ar"], + "acm": ["acm", "ar"], + "acq": ["acq", "ar"], + "acw": ["acw", "ar"], + "acx": ["acx", "ar"], + "acy": ["acy", "ar"], + "adf": ["adf", "ar"], + "ads": ["ads", "sgn"], + "aeb": ["aeb", "ar"], + "aec": ["aec", "ar"], + "aed": ["aed", "sgn"], + "aen": ["aen", "sgn"], + "afb": ["afb", "ar"], + "afg": ["afg", "sgn"], + "ajp": ["ajp", "ar"], + "apc": ["apc", "ar"], + "apd": ["apd", "ar"], + "arb": ["arb", "ar"], + "arq": ["arq", "ar"], + "ars": ["ars", "ar"], + "ary": ["ary", "ar"], + "arz": ["arz", "ar"], + "ase": ["ase", "sgn"], + "asf": ["asf", "sgn"], + "asp": ["asp", "sgn"], + "asq": ["asq", "sgn"], + "asw": ["asw", "sgn"], + "auz": ["auz", "ar"], + "avl": ["avl", "ar"], + "ayh": ["ayh", "ar"], + "ayl": ["ayl", "ar"], + "ayn": ["ayn", "ar"], + "ayp": ["ayp", "ar"], + "bbz": ["bbz", "ar"], + "bfi": ["bfi", "sgn"], + "bfk": ["bfk", "sgn"], + "bjn": ["bjn", "ms"], + "bog": ["bog", "sgn"], + "bqn": ["bqn", "sgn"], + "bqy": ["bqy", "sgn"], + "btj": ["btj", "ms"], + "bve": ["bve", "ms"], + "bvl": ["bvl", "sgn"], + "bvu": ["bvu", "ms"], + "bzs": ["bzs", "sgn"], + "cdo": ["cdo", "zh"], + "cds": ["cds", "sgn"], + "cjy": ["cjy", "zh"], + "cmn": ["cmn", "zh"], + "coa": ["coa", "ms"], + "cpx": ["cpx", "zh"], + "csc": ["csc", "sgn"], + "csd": ["csd", "sgn"], + "cse": ["cse", "sgn"], + "csf": ["csf", "sgn"], + "csg": ["csg", "sgn"], + "csl": ["csl", "sgn"], + "csn": ["csn", "sgn"], + "csq": ["csq", "sgn"], + "csr": ["csr", "sgn"], + "czh": ["czh", "zh"], + "czo": ["czo", "zh"], + "doq": ["doq", "sgn"], + "dse": ["dse", "sgn"], + "dsl": ["dsl", "sgn"], + "dup": ["dup", "ms"], + "ecs": ["ecs", "sgn"], + "esl": ["esl", "sgn"], + "esn": ["esn", "sgn"], + "eso": ["eso", "sgn"], + "eth": ["eth", "sgn"], + "fcs": ["fcs", "sgn"], + "fse": ["fse", "sgn"], + "fsl": ["fsl", "sgn"], + "fss": ["fss", "sgn"], + "gan": ["gan", "zh"], + "gom": ["gom", "kok"], + "gse": ["gse", "sgn"], + "gsg": ["gsg", "sgn"], + "gsm": ["gsm", "sgn"], + "gss": ["gss", "sgn"], + "gus": ["gus", "sgn"], + "hab": ["hab", "sgn"], + "haf": ["haf", "sgn"], + "hak": ["hak", "zh"], + "hds": ["hds", "sgn"], + "hji": ["hji", "ms"], + "hks": ["hks", "sgn"], + "hos": ["hos", "sgn"], + "hps": ["hps", "sgn"], + "hsh": ["hsh", "sgn"], + "hsl": ["hsl", "sgn"], + "hsn": ["hsn", "zh"], + "icl": ["icl", "sgn"], + "ils": ["ils", "sgn"], + "inl": ["inl", "sgn"], + "ins": ["ins", "sgn"], + "ise": ["ise", "sgn"], + "isg": ["isg", "sgn"], + "isr": ["isr", "sgn"], + "jak": ["jak", "ms"], + "jax": ["jax", "ms"], + "jcs": ["jcs", "sgn"], + "jhs": ["jhs", "sgn"], + "jls": ["jls", "sgn"], + "jos": ["jos", "sgn"], + "jsl": ["jsl", "sgn"], + "jus": ["jus", "sgn"], + "kgi": ["kgi", "sgn"], + "knn": ["knn", "kok"], + "kvb": ["kvb", "ms"], + "kvk": ["kvk", "sgn"], + "kvr": ["kvr", "ms"], + "kxd": ["kxd", "ms"], + "lbs": ["lbs", "sgn"], + "lce": ["lce", "ms"], + "lcf": ["lcf", "ms"], + "liw": ["liw", "ms"], + "lls": ["lls", "sgn"], + "lsg": ["lsg", "sgn"], + "lsl": ["lsl", "sgn"], + "lso": ["lso", "sgn"], + "lsp": ["lsp", "sgn"], + "lst": ["lst", "sgn"], + "lsy": ["lsy", "sgn"], + "ltg": ["ltg", "lv"], + "lvs": ["lvs", "lv"], + "lzh": ["lzh", "zh"], + "max": ["max", "ms"], + "mdl": ["mdl", "sgn"], + "meo": ["meo", "ms"], + "mfa": ["mfa", "ms"], + "mfb": ["mfb", "ms"], + "mfs": ["mfs", "sgn"], + "min": ["min", "ms"], + "mnp": ["mnp", "zh"], + "mqg": ["mqg", "ms"], + "mre": ["mre", "sgn"], + "msd": ["msd", "sgn"], + "msi": ["msi", "ms"], + "msr": ["msr", "sgn"], + "mui": ["mui", "ms"], + "mzc": ["mzc", "sgn"], + "mzg": ["mzg", "sgn"], + "mzy": ["mzy", "sgn"], + "nan": ["nan", "zh"], + "nbs": ["nbs", "sgn"], + "ncs": ["ncs", "sgn"], + "nsi": ["nsi", "sgn"], + "nsl": ["nsl", "sgn"], + "nsp": ["nsp", "sgn"], + "nsr": ["nsr", "sgn"], + "nzs": ["nzs", "sgn"], + "okl": ["okl", "sgn"], + "orn": ["orn", "ms"], + "ors": ["ors", "ms"], + "pel": ["pel", "ms"], + "pga": ["pga", "ar"], + "pks": ["pks", "sgn"], + "prl": ["prl", "sgn"], + "prz": ["prz", "sgn"], + "psc": ["psc", "sgn"], + "psd": ["psd", "sgn"], + "pse": ["pse", "ms"], + "psg": ["psg", "sgn"], + "psl": ["psl", "sgn"], + "pso": ["pso", "sgn"], + "psp": ["psp", "sgn"], + "psr": ["psr", "sgn"], + "pys": ["pys", "sgn"], + "rms": ["rms", "sgn"], + "rsi": ["rsi", "sgn"], + "rsl": ["rsl", "sgn"], + "sdl": ["sdl", "sgn"], + "sfb": ["sfb", "sgn"], + "sfs": ["sfs", "sgn"], + "sgg": ["sgg", "sgn"], + "sgx": ["sgx", "sgn"], + "shu": ["shu", "ar"], + "slf": ["slf", "sgn"], + "sls": ["sls", "sgn"], + "sqs": ["sqs", "sgn"], + "ssh": ["ssh", "ar"], + "ssp": ["ssp", "sgn"], + "ssr": ["ssr", "sgn"], + "svk": ["svk", "sgn"], + "swc": ["swc", "sw"], + "swh": ["swh", "sw"], + "swl": ["swl", "sgn"], + "syy": ["syy", "sgn"], + "tmw": ["tmw", "ms"], + "tse": ["tse", "sgn"], + "tsm": ["tsm", "sgn"], + "tsq": ["tsq", "sgn"], + "tss": ["tss", "sgn"], + "tsy": ["tsy", "sgn"], + "tza": ["tza", "sgn"], + "ugn": ["ugn", "sgn"], + "ugy": ["ugy", "sgn"], + "ukl": ["ukl", "sgn"], + "uks": ["uks", "sgn"], + "urk": ["urk", "ms"], + "uzn": ["uzn", "uz"], + "uzs": ["uzs", "uz"], + "vgt": ["vgt", "sgn"], + "vkk": ["vkk", "ms"], + "vkt": ["vkt", "ms"], + "vsi": ["vsi", "sgn"], + "vsl": ["vsl", "sgn"], + "vsv": ["vsv", "sgn"], + "wuu": ["wuu", "zh"], + "xki": ["xki", "sgn"], + "xml": ["xml", "sgn"], + "xmm": ["xmm", "ms"], + "xms": ["xms", "sgn"], + "yds": ["yds", "sgn"], + "ysl": ["ysl", "sgn"], + "yue": ["yue", "zh"], + "zib": ["zib", "sgn"], + "zlm": ["zlm", "ms"], + "zmi": ["zmi", "ms"], + "zsl": ["zsl", "sgn"], + "zsm": ["zsm", "ms"] + }; + + + /** + * Canonicalizes the given well-formed BCP 47 language tag, including regularized case of subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.3. + * Spec: RFC 5646, section 4.5. + */ + function canonicalizeLanguageTag(locale) { + + // start with lower case for easier processing, and because most subtags will need to be lower case anyway + locale = locale.toLowerCase(); + + // handle mappings for complete tags + if (__tagMappings.hasOwnProperty(locale)) { + return __tagMappings[locale]; + } + + var subtags = locale.split("-"); + var i = 0; + + // handle standard part: all subtags before first singleton or "x" + while (i < subtags.length) { + var subtag = subtags[i]; + if (subtag.length === 1 && (i > 0 || subtag === "x")) { + break; + } else if (i !== 0 && subtag.length === 2) { + subtag = subtag.toUpperCase(); + } else if (subtag.length === 4) { + subtag = subtag[0].toUpperCase() + subtag.substring(1).toLowerCase(); + } + if (__subtagMappings.hasOwnProperty(subtag)) { + subtag = __subtagMappings[subtag]; + } else if (__extlangMappings.hasOwnProperty(subtag)) { + subtag = __extlangMappings[subtag][0]; + if (i === 1 && __extlangMappings[subtag][1] === subtags[0]) { + subtags.shift(); + i--; + } + } + subtags[i] = subtag; + i++; + } + var normal = subtags.slice(0, i).join("-"); + + // handle extensions + var extensions = []; + while (i < subtags.length && subtags[i] !== "x") { + var extensionStart = i; + i++; + while (i < subtags.length && subtags[i].length > 1) { + i++; + } + var extension = subtags.slice(extensionStart, i).join("-"); + extensions.push(extension); + } + extensions.sort(); + + // handle private use + var privateUse; + if (i < subtags.length) { + privateUse = subtags.slice(i).join("-"); + } + + // put everything back together + var canonical = normal; + if (extensions.length > 0) { + canonical += "-" + extensions.join("-"); + } + if (privateUse !== undefined) { + if (canonical.length > 0) { + canonical += "-" + privateUse; + } else { + canonical = privateUse; + } + } + + return canonical; + } + + return typeof locale === "string" && isStructurallyValidLanguageTag(locale) && + canonicalizeLanguageTag(locale) === locale; +} + diff --git a/test/suite/intl402/ch06/6.2/6.2.2_a.js b/test/suite/intl402/ch06/6.2/6.2.2_a.js new file mode 100644 index 000000000..144a1e7c9 --- /dev/null +++ b/test/suite/intl402/ch06/6.2/6.2.2_a.js @@ -0,0 +1,34 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that structurally valid language tags are accepted. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +var validLanguageTags = [ + "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 + "enochian-enochian", // language and variant subtags may be the same + "de-gregory-u-ca-gregory" // variant and extension subtags may be the same +]; + +testWithIntlConstructors(function (Constructor) { + validLanguageTags.forEach(function (tag) { + // this must not throw an exception for a valid language tag + var obj = new Constructor([tag]); + }); + return true; +}); + diff --git a/test/suite/intl402/ch06/6.2/6.2.2_b.js b/test/suite/intl402/ch06/6.2/6.2.2_b.js new file mode 100644 index 000000000..42d69e7c2 --- /dev/null +++ b/test/suite/intl402/ch06/6.2/6.2.2_b.js @@ -0,0 +1,41 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that language tags with "_" are not accepted. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +var invalidLanguageTags = [ + "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" +]; + +testWithIntlConstructors(function (Constructor) { + invalidLanguageTags.forEach(function (tag) { + var error; + try { + // this must throw an exception for an invalid language tag + var obj = new Constructor([tag]); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid language tag " + tag + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid language tag " + tag + " was rejected with wrong error " + error.name + "."); + } + }); + return true; +}); + diff --git a/test/suite/intl402/ch06/6.2/6.2.2_c.js b/test/suite/intl402/ch06/6.2/6.2.2_c.js new file mode 100644 index 000000000..ff2f9ae95 --- /dev/null +++ b/test/suite/intl402/ch06/6.2/6.2.2_c.js @@ -0,0 +1,45 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that language tags with invalid subtag sequences are not accepted. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +var invalidLanguageTags = [ + "", // empty tag + "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 + "中文", // non-ASCII letters + "en-ß", // non-ASCII letters + "ıd" // non-ASCII letters +]; + +testWithIntlConstructors(function (Constructor) { + invalidLanguageTags.forEach(function (tag) { + var error; + try { + // this must throw an exception for an invalid language tag + var obj = new Constructor([tag]); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid language tag " + tag + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid language tag " + tag + " was rejected with wrong error " + error.name + "."); + } + }); + return true; +}); + diff --git a/test/suite/intl402/ch06/6.2/6.2.3.js b/test/suite/intl402/ch06/6.2/6.2.3.js new file mode 100644 index 000000000..ce273e198 --- /dev/null +++ b/test/suite/intl402/ch06/6.2/6.2.3.js @@ -0,0 +1,68 @@ +// Copyright 2011-2012 Norbert Lindenberg. All rights reserved. +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that language tags are canonicalized in return values. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +var canonicalizedTags = { + "de": ["de"], + "de-DE": ["de-DE", "de"], + "DE-de": ["de-DE", "de"], + "cmn": ["cmn"], + "CMN-hANS": ["cmn-Hans", "cmn"], + "cmn-hans-cn": ["cmn-Hans-CN", "cmn-Hans", "cmn"], + "es-419": ["es-419", "es"], + "es-419-u-nu-latn": ["es-419-u-nu-latn", "es-419", "es", "es-u-nu-latn"], + // -u-ca is incomplete, so it will not show up in resolvedOptions().locale + "cmn-hans-cn-u-ca-t-ca-x-t-u": ["cmn-Hans-CN-t-ca-u-ca-x-t-u", "cmn-Hans-CN-t-ca-x-t-u", "cmn-Hans-CN-t-ca-x-t", "cmn-Hans-CN-t-ca", "cmn-Hans-CN", "cmn-Hans", "cmn"], + "enochian-enochian": ["enochian-enochian", "enochian"], + "de-gregory-u-ca-gregory": ["de-gregory-u-ca-gregory", "de-gregory", "de-u-ca-gregory", "de"], + "no-nyn": ["nn"], + "i-klingon": ["tlh"], + "sgn-GR": ["gss"], + "ji": ["yi"], + "de-DD": ["de-DE", "de"], + "zh-hak-CN": ["hak-CN", "hak"], + "sgn-ils": ["ils"], + "in": ["id"] +}; + +// make sure the data above is correct +Object.getOwnPropertyNames(canonicalizedTags).forEach(function (tag) { + canonicalizedTags[tag].forEach(function (canonicalTag) { + if (!isCanonicalizedStructurallyValidLanguageTag(canonicalTag)) { + $ERROR("Test data \"" + canonicalTag + "\" is not canonicalized and structurally valid language tag."); + } + }); +}); + +// now the actual test +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + Object.getOwnPropertyNames(canonicalizedTags).forEach(function (tag) { + // use lookup locale matcher to keep the set of possible return values predictable + + // Variant 1: construct an object and see whether its locale is canonicalized. + // In this variant, shortened forms or the default locale may be returned + var object = new Constructor([tag], {localeMatcher: "lookup"}); + var locale = object.resolvedOptions().locale; + if (canonicalizedTags[tag].indexOf(locale) === -1 && locale !== defaultLocale) { + $ERROR("For " + tag + " got " + locale + "; expected one of " + + canonicalizedTags[tag].join(", ") + "."); + } + + // Variant 2: get the supported locales. If the tag is supported, it should be returned canonicalized but unshortened + var supported = Constructor.supportedLocalesOf([tag]); + if (supported.length > 0 && supported[0] !== canonicalizedTags[tag][0]) { + $ERROR("For " + tag + " got " + supported[0] + "; expected " + + canonicalizedTags[tag][0] + "."); + } + }); + return true; +}); + diff --git a/test/suite/intl402/ch06/6.2/6.2.4.js b/test/suite/intl402/ch06/6.2/6.2.4.js new file mode 100644 index 000000000..6ca47af14 --- /dev/null +++ b/test/suite/intl402/ch06/6.2/6.2.4.js @@ -0,0 +1,19 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the default locale is a String value representing the + * structurally valid and canonicalized BCP 47 language tag. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + if (!isCanonicalizedStructurallyValidLanguageTag(defaultLocale)) { + $ERROR("Default locale \"" + defaultLocale + "\" is not canonicalized and structurally valid language tag."); + } + return true; +}); + diff --git a/test/suite/intl402/ch06/6.3/6.3.1_a.js b/test/suite/intl402/ch06/6.3/6.3.1_a.js new file mode 100644 index 000000000..01cc18b03 --- /dev/null +++ b/test/suite/intl402/ch06/6.3/6.3.1_a.js @@ -0,0 +1,25 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that well-formed currency codes are accepted. + * @author Norbert Lindenberg + */ + +var wellFormedCurrencyCodes = [ + "BOB", + "EUR", + "usd", // currency codes are case-insensitive + "XdR", + "xTs" +]; + +wellFormedCurrencyCodes.forEach(function (code) { + // this must not throw an exception for a valid currency code + var format = new Intl.NumberFormat(["de-de"], {style: "currency", currency: code}); + if (format.resolvedOptions().currency !== code.toUpperCase()) { + $ERROR("Currency " + code + " was not correctly accepted; turned into " + + format.resolvedOptions().currency + "."); + } +}); + diff --git a/test/suite/intl402/ch06/6.3/6.3.1_b.js b/test/suite/intl402/ch06/6.3/6.3.1_b.js new file mode 100644 index 000000000..90051b343 --- /dev/null +++ b/test/suite/intl402/ch06/6.3/6.3.1_b.js @@ -0,0 +1,34 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that invalid currency codes are not accepted. + * @author Norbert Lindenberg + */ + +var invalidCurrencyCodes = [ + "€", + "$", + "SFr.", + "DM", + "KR₩", + "702", + "ßP", + "ınr" +]; + +invalidCurrencyCodes.forEach(function (code) { + var error; + try { + // this must throw an exception for an invalid currency code + var format = new Intl.NumberFormat(["de-de"], {style: "currency", currency: code}); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid currency code " + code + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid currency code " + code + " was rejected with wrong error " + error.name + "."); + } +}); + diff --git a/test/suite/intl402/ch06/6.4/6.4_a.js b/test/suite/intl402/ch06/6.4/6.4_a.js new file mode 100644 index 000000000..05202353c --- /dev/null +++ b/test/suite/intl402/ch06/6.4/6.4_a.js @@ -0,0 +1,22 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that valid time zone names are accepted. + * @author Norbert Lindenberg + */ + +var validTimeZoneNames = [ + "UTC", + "utc" // time zone names are case-insensitive +]; + +validTimeZoneNames.forEach(function (name) { + // this must not throw an exception for a valid time zone name + var format = new Intl.DateTimeFormat(["de-de"], {timeZone: name}); + if (format.resolvedOptions().timeZone !== name.toUpperCase()) { + $ERROR("Time zone name " + name + " was not correctly accepted; turned into " + + format.resolvedOptions().timeZone + "."); + } +}); + diff --git a/test/suite/intl402/ch06/6.4/6.4_b.js b/test/suite/intl402/ch06/6.4/6.4_b.js new file mode 100644 index 000000000..847d804e3 --- /dev/null +++ b/test/suite/intl402/ch06/6.4/6.4_b.js @@ -0,0 +1,34 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that invalid time zone names are not accepted. + * @author Norbert Lindenberg + */ + +var invalidTimeZoneNames = [ + "", + "MEZ", // localized abbreviation + "Pacific Time", // localized long form + "cnsha", // BCP 47 time zone code + "invalid", // as the name says + "Europe/İstanbul", // non-ASCII letter + "asıa/baku", // non-ASCII letter + "europe/brußels" // non-ASCII letter +]; + +invalidTimeZoneNames.forEach(function (name) { + var error; + try { + // this must throw an exception for an invalid time zone name + var format = new Intl.DateTimeFormat(["de-de"], {timeZone: name}); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid time zone name " + name + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid time zone name " + name + " was rejected with wrong error " + error.name + "."); + } +}); + diff --git a/test/suite/intl402/ch06/6.4/6.4_c.js b/test/suite/intl402/ch06/6.4/6.4_c.js new file mode 100644 index 000000000..75bcdbd80 --- /dev/null +++ b/test/suite/intl402/ch06/6.4/6.4_c.js @@ -0,0 +1,36 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that additional time zone names, if accepted, are handled correctly. + * @author Norbert Lindenberg + */ + +// canonicalization specified in conformance clause +var additionalTimeZoneNames = { + "Etc/GMT": "UTC", + "Greenwich": "UTC", + "PRC": "Asia/Shanghai", + "AmErIcA/LoS_aNgElEs": "America/Los_Angeles", + "etc/gmt+7": "Etc/GMT+7" +}; + +Object.getOwnPropertyNames(additionalTimeZoneNames).forEach(function (name) { + var format, error; + try { + format = new Intl.DateTimeFormat([], {timeZone: name}); + } catch (e) { + error = e; + } + if (error === undefined) { + var actual = format.resolvedOptions().timeZone; + var expected = additionalTimeZoneNames.name; + if (actual !== expected) { + $ERROR("Time zone name " + name + " was accepted, but incorrectly canonicalized to " + + actual + "; expected " + expected + "."); + } + } else if (error.name !== "RangeError") { + $ERROR("Time zone name " + name + " was rejected with wrong error " + error.name + "."); + } +}); + diff --git a/test/suite/intl402/ch09/9.1/9.1_a.js b/test/suite/intl402/ch09/9.1/9.1_a.js new file mode 100644 index 000000000..b7358304b --- /dev/null +++ b/test/suite/intl402/ch09/9.1/9.1_a.js @@ -0,0 +1,18 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that default locale is available. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var supportedLocales = Constructor.supportedLocalesOf([defaultLocale]); + if (supportedLocales.indexOf(defaultLocale) === -1) { + $ERROR("Default locale is not reported as available."); + } +}); + diff --git a/test/suite/intl402/ch09/9.1/9.1_b.js b/test/suite/intl402/ch09/9.1/9.1_b.js new file mode 100644 index 000000000..a0abc7fc1 --- /dev/null +++ b/test/suite/intl402/ch09/9.1/9.1_b.js @@ -0,0 +1,32 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that appropriate fallback locales are provided for + * supported locales. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var info = getLocaleSupportInfo(Constructor); + var fallback; + info.supported.forEach(function (locale) { + var pos = locale.lastIndexOf("-"); + if (pos !== -1) { + fallback = locale.substring(0, pos); + if (info.supported.indexOf(fallback) === -1) { + $ERROR("Locale " + locale + " is supported, but fallback " + fallback + " isn't."); + } + } + var match = /([a-z]{2,3})(-[A-Z][a-z]{3})(-[A-Z]{2})/.exec(locale); + if (match !== null) { + fallback = match[1] + match[3]; + if (info.supported.indexOf(fallback) === -1) { + $ERROR("Locale " + locale + " is supported, but fallback " + fallback + " isn't."); + } + } + }); +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_1.js b/test/suite/intl402/ch09/9.2/9.2.1_1.js new file mode 100644 index 000000000..7386fdeda --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_1.js @@ -0,0 +1,23 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that canonicalization of locale lists treats undefined and empty lists the same. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var supportedForUndefined = Constructor.supportedLocalesOf(undefined); + var supportedForEmptyList = Constructor.supportedLocalesOf([]); + if (supportedForUndefined.length !== supportedForEmptyList.length) { + $ERROR("Supported locales differ between undefined and empty list input."); + } + // we don't compare the elements because length should be 0 - let's just verify that + if (supportedForUndefined.length !== 0) { + $ERROR("Internal test error: Assumption about length being 0 is invalid."); + } + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_2.js b/test/suite/intl402/ch09/9.2/9.2.1_2.js new file mode 100644 index 000000000..e4fb3756d --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_2.js @@ -0,0 +1,21 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the behavior of a List is not affected by adversarial + * changes to Array.prototype. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +taintArray(); + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale]); + if (canonicalized.length > 1) { + $ERROR("Canonicalization didn't remove duplicate language tags from locale list."); + } +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_3.js b/test/suite/intl402/ch09/9.2/9.2.1_3.js new file mode 100644 index 000000000..e403b1765 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_3.js @@ -0,0 +1,87 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that a single string instead of a locale list is treated + * as the locale list containing that string. + * @author Norbert Lindenberg + */ + +$INCLUDE("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 + "enochian-enochian", // language and variant subtags may be the same + "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; + } + + if ((error1 === undefined) !== (error2 === undefined)) { + if (error1 === undefined) { + $ERROR("Single locale string " + locale + + " was accepted, but locale list containing that string wasn't."); + } else { + $ERROR("Single locale string " + locale + + " was rejected, but locale list containing that string wasn't."); + } + } else if (error1 === undefined) { + if (locale1 !== locale2) { + $ERROR("Single locale string " + locale + " results in " + locale1 + + ", but locale list [" + locale + "] results in " + locale2 + "."); + } + } else { + if (error1.name !== error2.name) { + $ERROR("Single locale string " + locale + " results in error " + error1.name + + ", but locale list [" + locale + "] results in error " + error2.name + "."); + } + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_4.js b/test/suite/intl402/ch09/9.2/9.2.1_4.js new file mode 100644 index 000000000..b9bb9db79 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_4.js @@ -0,0 +1,46 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that non-objects are converted to objects before canonicalization. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + // undefined is handled separately + + // null should result in a TypeError + var error; + try { + var supportedForNull = Constructor.supportedLocalesOf(null); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Null as locale list was not rejected."); + } else if (error.name !== "TypeError") { + $ERROR("Null as locale list was rejected with wrong error " + error.name + "."); + } + + // let's use an empty list for comparison + var supportedForEmptyList = Constructor.supportedLocalesOf([]); + // we don't compare the elements because length should be 0 - let's just verify that + if (supportedForEmptyList.length !== 0) { + $ERROR("Internal test error: Assumption about length being 0 is invalid."); + } + + // most non-objects will be interpreted as empty lists because a missing length property is interpreted as 0 + var supportedForNumber = Constructor.supportedLocalesOf(5); + if (supportedForNumber.length !== supportedForEmptyList.length) { + $ERROR("Supported locales differ between numeric and empty list input."); + } + var supportedForBoolean = Constructor.supportedLocalesOf(true); + if (supportedForBoolean.length !== supportedForEmptyList.length) { + $ERROR("Supported locales differ between boolean and empty list input."); + } + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_8_c_ii.js b/test/suite/intl402/ch09/9.2/9.2.1_8_c_ii.js new file mode 100644 index 000000000..8dfb9b7b3 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_8_c_ii.js @@ -0,0 +1,30 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that values other than strings are not accepted as locales. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +var notStringOrObject = [undefined, null, true, false, 0, 5, -5, NaN]; + +testWithIntlConstructors(function (Constructor) { + notStringOrObject.forEach(function (value) { + var error; + try { + var supported = Constructor.supportedLocalesOf([value]); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("" + value + " as locale was not rejected."); + } else if (error.name !== "TypeError") { + $ERROR("" + value + " as locale was rejected with wrong error " + error.name + "."); + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.1_8_c_vi.js b/test/suite/intl402/ch09/9.2/9.2.1_8_c_vi.js new file mode 100644 index 000000000..ef78fa97b --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.1_8_c_vi.js @@ -0,0 +1,18 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that canonicalization of locale lists removes duplicate language tags. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale]); + if (canonicalized.length > 1) { + $ERROR("Canonicalization didn't remove duplicate language tags from locale list."); + } +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.2.js b/test/suite/intl402/ch09/9.2/9.2.2.js new file mode 100644 index 000000000..cb74eaad2 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.2.js @@ -0,0 +1,45 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that locales that are reported by resolvedOptions + * are also reported by supportedLocalesOf. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var info = getLocaleSupportInfo(Constructor); + // this test should work equally for both matching algorithms + ["lookup", "best fit"].forEach(function (matcher) { + var supportedByConstructor = info.supported.concat(info.byFallback); + var supported = Constructor.supportedLocalesOf(supportedByConstructor, + {localeMatcher: matcher}); + // we could check the length first, but it's probably more interesting which locales are missing + var i = 0; + var limit = Math.min(supportedByConstructor.length, supported.length); + while (i < limit && supportedByConstructor[i] === supported[i]) { + i++; + } + if (i < supportedByConstructor.length) { + $ERROR("Locale " + supportedByConstructor[i] + + " is returned by resolvedOptions but not by supportedLocalesOf."); + } else if (i < supported.length) { + $ERROR("Locale " + supported[i] + + " is returned by supportedLocalesOf but not by resolvedOptions."); + } + }); + + // this test is only valid for lookup - best fit may find additional locales supported + var unsupportedByConstructor = info.unsupported; + var supported = Constructor.supportedLocalesOf(unsupportedByConstructor, + {localeMatcher: "lookup"}); + if (supported.length > 0) { + $ERROR("Locale " + supported[0] + + " is returned by supportedLocalesOf but not by resolvedOptions."); + } + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.3_5.js b/test/suite/intl402/ch09/9.2/9.2.3_5.js new file mode 100644 index 000000000..8ae8a216b --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.3_5.js @@ -0,0 +1,22 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the behavior of a Record is not affected by adversarial + * changes to Object.prototype. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +taintProperties(["locale", "extension", "extensionIndex"]); + +testWithIntlConstructors(function (Constructor) { + var locale = new Constructor(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale; + if (!isCanonicalizedStructurallyValidLanguageTag(locale)) { + $ERROR("Constructor returns invalid locale " + locale + "."); + } + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.5_11_g_ii_2.js b/test/suite/intl402/ch09/9.2/9.2.5_11_g_ii_2.js new file mode 100644 index 000000000..d4213d2da --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.5_11_g_ii_2.js @@ -0,0 +1,26 @@ +// Copyright 2011-2012 Norbert Lindenberg. All rights reserved. +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that missing Unicode extension values default to true for + * boolean keys. + * @author Norbert Lindenberg + */ + +var extensions = ["-u-co-phonebk-kn", "-u-kn-co-phonebk"]; +extensions.forEach(function (extension) { + var defaultLocale = new Intl.Collator().resolvedOptions().locale; + var collator = new Intl.Collator([defaultLocale + extension], {usage: "sort"}); + var locale = collator.resolvedOptions().locale; + var numeric = collator.resolvedOptions().numeric; + if (numeric !== undefined) { + if (numeric !== true) { + $ERROR("Default value for \"kn\" should be true, but is " + numeric + "."); + } + if (locale.indexOf("-kn") !== -1) { + $ERROR("\"kn\" is returned in locale, but shouldn't be."); + } + } +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.5_6.js b/test/suite/intl402/ch09/9.2/9.2.5_6.js new file mode 100644 index 000000000..4bc904ee1 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.5_6.js @@ -0,0 +1,22 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the behavior of a Record is not affected by adversarial + * changes to Object.prototype. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +taintProperties(["dataLocale", "nu", "ca", "co", "locale"]); + +testWithIntlConstructors(function (Constructor) { + var locale = new Constructor(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale; + if (!isCanonicalizedStructurallyValidLanguageTag(locale)) { + $ERROR("Constructor returns invalid locale " + locale + "."); + } + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.6_2.js b/test/suite/intl402/ch09/9.2/9.2.6_2.js new file mode 100644 index 000000000..8d4f7efa9 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.6_2.js @@ -0,0 +1,27 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the behavior of a List is not affected by adversarial + * changes to Array.prototype. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +taintArray(); + +testWithIntlConstructors(function (Constructor) { + // this test should work equally for both matching algorithms + ["lookup", "best fit"].forEach(function (matcher) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var canonicalized = Constructor.supportedLocalesOf([defaultLocale, defaultLocale], + {localeMatcher: matcher}); + if (canonicalized.length > 1) { + $ERROR("Canonicalization with matcher " + matcher + " didn't remove duplicate language tags from locale list."); + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.6_4.js b/test/suite/intl402/ch09/9.2/9.2.6_4.js new file mode 100644 index 000000000..7c053a381 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.6_4.js @@ -0,0 +1,23 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that LookupSupportedLocales returns an empty list when + * given an empty list. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + // this test should work equally for both matching algorithms + ["lookup", "best fit"].forEach(function (matcher) { + var supported = Constructor.supportedLocalesOf([], {localeMatcher: matcher}); + if (supported.length !== 0) { + $ERROR("SupportedLocales with matcher " + matcher + " returned a non-empty list for an empty list."); + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.6_4_b.js b/test/suite/intl402/ch09/9.2/9.2.6_4_b.js new file mode 100644 index 000000000..5b9a43157 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.6_4_b.js @@ -0,0 +1,47 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that Unicode locale extension sequences do not affect + * whether a locale is considered supported, but are reported back. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + // this test should work equally for both matching algorithms + ["lookup", "best fit"].forEach(function (matcher) { + var info = getLocaleSupportInfo(Constructor); + var allLocales = info.supported.concat(info.byFallback, info.unsupported); + allLocales.forEach(function (locale) { + var validExtension = "-u-co-phonebk-nu-latn"; + var invalidExtension = "-u-nu-invalid"; + var supported1 = Constructor.supportedLocalesOf([locale], + {localeMatcher: matcher}); + var supported2 = Constructor.supportedLocalesOf([locale + validExtension], + {localeMatcher: matcher}); + var supported3 = Constructor.supportedLocalesOf([locale + invalidExtension], + {localeMatcher: matcher}); + if (supported1.length === 1) { + if (supported2.length !== 1 || supported3.length !== 1) { + $ERROR("Presence of Unicode locale extension sequence affects whether locale " + + locale + " is considered supported with matcher " + matcher + "."); + } + if (supported2[0] !== locale + validExtension || supported3[0] !== locale + invalidExtension) { + alert(locale + "; " + supported2[0] + "; " + supported3[0]); + $ERROR("Unicode locale extension sequence is not correctly returned for locale " + + locale + " with matcher " + matcher + "."); + } + } else { + if (supported2.length !== 0 || supported3.length !== 0) { + $ERROR("Presence of Unicode locale extension sequence affects whether locale " + + locale + " is considered supported with matcher " + matcher + "."); + } + } + }); + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.6_4_c.js b/test/suite/intl402/ch09/9.2/9.2.6_4_c.js new file mode 100644 index 000000000..de68a9b66 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.6_4_c.js @@ -0,0 +1,32 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that LookupSupportedLocales includes the default locale + * and doesn't include the "no linguistic content" locale. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + // this test should work equally for both matching algorithms + ["lookup", "best fit"].forEach(function (matcher) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var noLinguisticContent = "zxx"; + var supported = Constructor.supportedLocalesOf([defaultLocale, noLinguisticContent], + {localeMatcher: matcher}); + if (supported.indexOf(defaultLocale) === -1) { + $ERROR("SupportedLocales didn't return default locale with matcher " + matcher + "."); + } + if (supported.indexOf(noLinguisticContent) !== -1) { + $ERROR("SupportedLocales returned the \"no linguistic content\" locale with matcher " + matcher + "."); + } + if (supported.length > 1) { + $ERROR("SupportedLocales returned stray locales: " + supported.join(", ") + " with matcher " + matcher + "."); + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.8_1_c.js b/test/suite/intl402/ch09/9.2/9.2.8_1_c.js new file mode 100644 index 000000000..724db1edd --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.8_1_c.js @@ -0,0 +1,36 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the option localeMatcher is processed correctly. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + + var validValues = [undefined, "lookup", "best fit", {toString: function () { return "lookup"; }}]; + validValues.forEach(function (value) { + var supported = Constructor.supportedLocalesOf([defaultLocale], {localeMatcher: value}); + }); + + var invalidValues = [null, 0, 5, NaN, true, false, "invalid"]; + invalidValues.forEach(function (value) { + var error; + try { + var supported = Constructor.supportedLocalesOf([defaultLocale], {localeMatcher: value}); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid localeMatcher value " + value + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid localeMatcher value " + value + " was rejected with wrong error " + error.name + "."); + } + }); + + return true; +}); + diff --git a/test/suite/intl402/ch09/9.2/9.2.8_4.js b/test/suite/intl402/ch09/9.2/9.2.8_4.js new file mode 100644 index 000000000..79c362f62 --- /dev/null +++ b/test/suite/intl402/ch09/9.2/9.2.8_4.js @@ -0,0 +1,35 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the array returned by SupportedLocales is extensible, + * but its properties are non-writable/non-configurable. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +function testFrozenProperty(obj, property) { + var desc = Object.getOwnPropertyDescriptor(obj, property); + if (desc.writable) { + $ERROR("Property " + property + " of object returned by SupportedLocales is writable."); + } + if (desc.configurable) { + $ERROR("Property " + property + " of object returned by SupportedLocales is configurable."); + } +} + +testWithIntlConstructors(function (Constructor) { + var defaultLocale = new Constructor().resolvedOptions().locale; + var supported = Constructor.supportedLocalesOf([defaultLocale]); + if (!Object.isExtensible(supported)) { + $ERROR("Object returned by SupportedLocales is not extensible."); + } + for (var i = 0; i < supported.length; i++) { + testFrozenProperty(supported, i); + } + testFrozenProperty(supported, "length"); + + return true; +}); + diff --git a/test/suite/intl402/ch10/10.2/10.2.3.js b/test/suite/intl402/ch10/10.2/10.2.3.js deleted file mode 100644 index c281491a0..000000000 --- a/test/suite/intl402/ch10/10.2/10.2.3.js +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2012 Google Inc. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @description Tests the internal properties of Intl.Collator. - */ - -var defaultLocale = new Intl.Collator([]).resolvedOptions().locale; -var supportedLocales = Intl.Collator.supportedLocalesOf([defaultLocale]); - -if (supportedLocales.length < 1 || supportedLocales[0] !== defaultLocale) { - $ERROR('The default locale is not supported by Intl.Collator'); -} - -// FIXME: Find a way to check [[relevantExtensionKeys]] - -// FIXME: Find a way to check specified properties of [[localeData]] - diff --git a/test/suite/intl402/ch11/11.2/11.2.3.js b/test/suite/intl402/ch11/11.2/11.2.3.js deleted file mode 100644 index b0f30e495..000000000 --- a/test/suite/intl402/ch11/11.2/11.2.3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2012 Google Inc. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @description Tests the internal properties of Intl.NumberFormat. - * @author: Roozbeh Pournader - */ - -var defaultLocale = new Intl.NumberFormat([]).resolvedOptions().locale; -var supportedLocales = Intl.NumberFormat.supportedLocalesOf([defaultLocale]); - -if (supportedLocales.length < 1 || supportedLocales[0] !== defaultLocale) { - $ERROR('The default locale is not supported by Intl.NumberFormat'); -} - -// FIXME: Find a way to check that [[relevantExtensionKeys]] === ['nu'] - -// FIXME: Find a way to check specified properties of [[localeData]] - diff --git a/test/suite/intl402/ch12/12.2/12.2.3.js b/test/suite/intl402/ch12/12.2/12.2.3.js deleted file mode 100644 index 333d97ae8..000000000 --- a/test/suite/intl402/ch12/12.2/12.2.3.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2012 Google Inc. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/** - * @description Tests the internal properties of Intl.DateTimeFormat. - * @author: Roozbeh Pournader - */ - -var defaultLocale = new Intl.DateTimeFormat([]).resolvedOptions().locale; -var supportedLocales = Intl.DateTimeFormat.supportedLocalesOf([defaultLocale]); - -if (supportedLocales.length < 1 || supportedLocales[0] !== defaultLocale) { - $ERROR('The default locale is not supported by Intl.DateTimeFormat'); -} - -// FIXME: Find a way to check that [[relevantExtensionKeys]] === ['ca', 'nu'] - -// FIXME: Find a way to check specified properties of [[localeData]] - diff --git a/tools/packaging/test262.py b/tools/packaging/test262.py index cff30baad..496f4cdfe 100755 --- a/tools/packaging/test262.py +++ b/tools/packaging/test262.py @@ -212,6 +212,7 @@ class TestCase(object): self.suite.GetInclude("sta.js") + \ self.suite.GetInclude("ed.js") + \ self.suite.GetInclude("testBuiltInObject.js") + \ + self.suite.GetInclude("testIntl.js") + \ self.test + '\n' if self.strict_mode: diff --git a/website/harness/testIntl.js b/website/harness/testIntl.js new file mode 100644 index 000000000..251f0a2ca --- /dev/null +++ b/website/harness/testIntl.js @@ -0,0 +1,658 @@ +// Copyright 2011-2012 Norbert Lindenberg. All rights reserved. +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * This file contains shared functions for the tests in the conformance test + * suite for the ECMAScript Internationalization API. + * @author Norbert Lindenberg + */ + + +/** + * @description Calls the provided function for every service constructor in + * the Intl object, until f returns a falsy value. It returns the result of the + * last call to f, mapped to a boolean. + * @param {Function} f the function to call for each service constructor in + * the Intl object. + * @param {Function} Constructor the constructor object to test with. + * @result {Boolean} whether the test succeeded. + */ +function testWithIntlConstructors(f) { + var constructors = ["Collator", "NumberFormat", "DateTimeFormat"]; + return constructors.every(function (constructor) { + var Constructor = Intl[constructor]; + var result; + try { + result = f(Constructor); + } catch (e) { + e.message += " (Testing with " + constructor + ".)"; + throw e; + } + return result; + }); +} + + +/** + * Returns the name of the given constructor object, which must be one of + * Intl.Collator, Intl.NumberFormat, or Intl.DateTimeFormat. + * @param {object} Constructor a constructor + * @return {string} the name of the constructor + */ +function getConstructorName(Constructor) { + switch (Constructor) { + case Intl.Collator: + return "Collator"; + case Intl.NumberFormat: + return "NumberFormat"; + case Intl.DateTimeFormat: + return "DateTimeFormat"; + default: + $ERROR("test internal error: unknown Constructor"); + } +} + + +/** + * Taints a named data property of the given object by installing + * a setter that throws an exception. + * @param {object} obj the object whose data property to taint + * @param {string} property the property to taint + */ +function taintDataProperty(obj, property) { + Object.defineProperty(obj, property, { + set: function(value) { + $ERROR("Client code can adversely affect behavior: setter for " + property + "."); + }, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints a named method of the given object by replacing it with a function + * that throws an exception. + * @param {object} obj the object whose method to taint + * @param {string} property the name of the method to taint + */ +function taintMethod(obj, property) { + Object.defineProperty(obj, property, { + value: function() { + $ERROR("Client code can adversely affect behavior: method " + property + "."); + }, + writable: true, + enumerable: false, + configurable: true + }); +} + + +/** + * Taints the given properties (and similarly named properties) by installing + * setters on Object.prototype that throw exceptions. + * @param {Array} properties an array of property names to taint + */ +function taintProperties(properties) { + properties.forEach(function (property) { + var adaptedProperties = [property, "__" + property, "_" + property, property + "_", property + "__"]; + adaptedProperties.forEach(function (property) { + taintDataProperty(Object.prototype, property); + }); + }); +} + + +/** + * Taints the Array object by creating a setter for the property "0" and + * replacing some key methods with functions that throw exceptions. + */ +function taintArray() { + taintDataProperty(Array.prototype, "0"); + taintMethod(Array.prototype, "indexOf"); + taintMethod(Array.prototype, "join"); + taintMethod(Array.prototype, "push"); + taintMethod(Array.prototype, "slice"); + taintMethod(Array.prototype, "sort"); +} + + +// auxiliary data for getLocaleSupportInfo +var languages = ["zh", "es", "en", "hi", "ur", "ar", "ja", "pa"]; +var scripts = ["Latn", "Hans", "Deva", "Arab", "Jpan", "Hant"]; +var countries = ["CN", "IN", "US", "PK", "JP", "TW", "HK", "SG"]; +var localeSupportInfo = {}; + + +/** + * Gets locale support info for the given constructor object, which must be one + * of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat. + * @param {object} Constructor the constructor for which to get locale support info + * @return {object} locale support info with the following properties: + * supported: array of fully supported language tags + * byFallback: array of language tags that are supported through fallbacks + * unsupported: array of unsupported language tags + */ +function getLocaleSupportInfo(Constructor) { + var constructorName = getConstructorName(Constructor); + if (localeSupportInfo[constructorName] !== undefined) { + return localeSupportInfo[constructorName]; + } + + var allTags = []; + var i, j, k; + var language, script, country; + for (i = 0; i < languages.length; i++) { + language = languages[i]; + allTags.push(language); + for (j = 0; j < scripts.length; j++) { + script = scripts[j]; + allTags.push(language + "-" + script); + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + script + "-" + country); + } + } + for (k = 0; k < countries.length; k++) { + country = countries[k]; + allTags.push(language + "-" + country); + } + } + + var supported = []; + var byFallback = []; + var unsupported = []; + for (i = 0; i < allTags.length; i++) { + var request = allTags[i]; + var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale; + if (request === result) { + supported.push(request); + } else if (request.indexOf(result) === 0) { + byFallback.push(request); + } else { + unsupported.push(request); + } + } + + localeSupportInfo[constructorName] = { + supported: supported, + byFallback: byFallback, + unsupported: unsupported + }; + + return localeSupportInfo[constructorName]; +} + + +/** + * @description Tests whether locale is a String value representing a + * structurally valid and canonicalized BCP 47 language tag, as defined in + * sections 6.2.2 and 6.2.3 of the ECMAScript Internationalization API + * Specification. + * @param {String} locale the string to be tested. + * @result {Boolean} whether the test succeeded. + */ +function isCanonicalizedStructurallyValidLanguageTag(locale) { + + /** + * Regular expression defining BCP 47 language tags. + * + * Spec: RFC 5646 section 2.1. + */ + var alpha = "[a-zA-Z]", + digit = "[0-9]", + alphanum = "(" + alpha + "|" + digit + ")", + regular = "(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)", + irregular = "(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)", + grandfathered = "(" + irregular + "|" + regular + ")", + privateuse = "(x(-[a-z0-9]{1,8})+)", + singleton = "(" + digit + "|[A-WY-Za-wy-z])", + extension = "(" + singleton + "(-" + alphanum + "{2,8})+)", + variant = "(" + alphanum + "{5,8}|(" + digit + alphanum + "{3}))", + region = "(" + alpha + "{2}|" + digit + "{3})", + script = "(" + alpha + "{4})", + extlang = "(" + alpha + "{3}(-" + alpha + "{3}){0,2})", + language = "(" + alpha + "{2,3}(-" + extlang + ")?|" + alpha + "{4}|" + alpha + "{5,8})", + langtag = language + "(-" + script + ")?(-" + region + ")?(-" + variant + ")*(-" + extension + ")*(-" + privateuse + ")?", + languageTag = "^(" + langtag + "|" + privateuse + "|" + grandfathered + ")$", + languageTagRE = new RegExp(languageTag, "i"); + var duplicateSingleton = "-" + singleton + "-(.*-)?\\1(?!" + alphanum + ")", + duplicateSingletonRE = new RegExp(duplicateSingleton, "i"), + duplicateVariant = "(" + alphanum + "{2,8}-)+" + variant + "-(" + alphanum + "{2,8}-)*\\3(?!" + alphanum + ")", + duplicateVariantRE = new RegExp(duplicateVariant, "i"); + + + /** + * Verifies that the given string is a well-formed BCP 47 language tag + * with no duplicate variant or singleton subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.2. + */ + function isStructurallyValidLanguageTag(locale) { + if (!languageTagRE.test(locale)) { + return false; + } + locale = locale.split(/-x-/)[0]; + return !duplicateSingletonRE.test(locale) && !duplicateVariantRE.test(locale); + } + + + /** + * Mappings from complete tags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __tagMappings = { + // property names must be in lower case; values in canonical form + + // grandfathered tags from IANA language subtag registry, file date 2011-08-25 + "art-lojban": "jbo", + "cel-gaulish": "cel-gaulish", + "en-gb-oed": "en-GB-oed", + "i-ami": "ami", + "i-bnn": "bnn", + "i-default": "i-default", + "i-enochian": "i-enochian", + "i-hak": "hak", + "i-klingon": "tlh", + "i-lux": "lb", + "i-mingo": "i-mingo", + "i-navajo": "nv", + "i-pwn": "pwn", + "i-tao": "tao", + "i-tay": "tay", + "i-tsu": "tsu", + "no-bok": "nb", + "no-nyn": "nn", + "sgn-be-fr": "sfb", + "sgn-be-nl": "vgt", + "sgn-ch-de": "sgg", + "zh-guoyu": "cmn", + "zh-hakka": "hak", + "zh-min": "zh-min", + "zh-min-nan": "nan", + "zh-xiang": "hsn", + // deprecated redundant tags from IANA language subtag registry, file date 2011-08-25 + "sgn-br": "bzs", + "sgn-co": "csn", + "sgn-de": "gsg", + "sgn-dk": "dsl", + "sgn-es": "ssp", + "sgn-fr": "fsl", + "sgn-gb": "bfi", + "sgn-gr": "gss", + "sgn-ie": "isg", + "sgn-it": "ise", + "sgn-jp": "jsl", + "sgn-mx": "mfs", + "sgn-ni": "ncs", + "sgn-nl": "dse", + "sgn-no": "nsl", + "sgn-pt": "psr", + "sgn-se": "swl", + "sgn-us": "ase", + "sgn-za": "sfs", + "zh-cmn": "cmn", + "zh-cmn-hans": "cmn-Hans", + "zh-cmn-hant": "cmn-Hant", + "zh-gan": "gan", + "zh-wuu": "wuu", + "zh-yue": "yue", + // deprecated variant with prefix from IANA language subtag registry, file date 2011-08-25 + "ja-latn-hepburn-heploc": "ja-Latn-alalc97" + }; + + + /** + * Mappings from non-extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __subtagMappings = { + // property names and values must be in canonical case + // language subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "in": "id", + "iw": "he", + "ji": "yi", + "jw": "jv", + "mo": "ro", + "ayx": "nun", + "cjr": "mom", + "cmk": "xch", + "drh": "khk", + "drw": "prs", + "gav": "dev", + "mst": "mry", + "myt": "mry", + "tie": "ras", + "tkk": "twm", + "tnf": "prs", + // region subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + "BU": "MM", + "DD": "DE", + "FX": "FR", + "TP": "TL", + "YD": "YE", + "ZR": "CD" + }; + + + /** + * Mappings from extlang subtags to preferred values. + * + * Spec: IANA Language Subtag Registry. + */ + var __extlangMappings = { + // extlang subtags with Preferred-Value mappings from IANA language subtag registry, file date 2011-08-25 + // values are arrays with [0] the replacement value, [1] (if present) the prefix to be removed + "aao": ["aao", "ar"], + "abh": ["abh", "ar"], + "abv": ["abv", "ar"], + "acm": ["acm", "ar"], + "acq": ["acq", "ar"], + "acw": ["acw", "ar"], + "acx": ["acx", "ar"], + "acy": ["acy", "ar"], + "adf": ["adf", "ar"], + "ads": ["ads", "sgn"], + "aeb": ["aeb", "ar"], + "aec": ["aec", "ar"], + "aed": ["aed", "sgn"], + "aen": ["aen", "sgn"], + "afb": ["afb", "ar"], + "afg": ["afg", "sgn"], + "ajp": ["ajp", "ar"], + "apc": ["apc", "ar"], + "apd": ["apd", "ar"], + "arb": ["arb", "ar"], + "arq": ["arq", "ar"], + "ars": ["ars", "ar"], + "ary": ["ary", "ar"], + "arz": ["arz", "ar"], + "ase": ["ase", "sgn"], + "asf": ["asf", "sgn"], + "asp": ["asp", "sgn"], + "asq": ["asq", "sgn"], + "asw": ["asw", "sgn"], + "auz": ["auz", "ar"], + "avl": ["avl", "ar"], + "ayh": ["ayh", "ar"], + "ayl": ["ayl", "ar"], + "ayn": ["ayn", "ar"], + "ayp": ["ayp", "ar"], + "bbz": ["bbz", "ar"], + "bfi": ["bfi", "sgn"], + "bfk": ["bfk", "sgn"], + "bjn": ["bjn", "ms"], + "bog": ["bog", "sgn"], + "bqn": ["bqn", "sgn"], + "bqy": ["bqy", "sgn"], + "btj": ["btj", "ms"], + "bve": ["bve", "ms"], + "bvl": ["bvl", "sgn"], + "bvu": ["bvu", "ms"], + "bzs": ["bzs", "sgn"], + "cdo": ["cdo", "zh"], + "cds": ["cds", "sgn"], + "cjy": ["cjy", "zh"], + "cmn": ["cmn", "zh"], + "coa": ["coa", "ms"], + "cpx": ["cpx", "zh"], + "csc": ["csc", "sgn"], + "csd": ["csd", "sgn"], + "cse": ["cse", "sgn"], + "csf": ["csf", "sgn"], + "csg": ["csg", "sgn"], + "csl": ["csl", "sgn"], + "csn": ["csn", "sgn"], + "csq": ["csq", "sgn"], + "csr": ["csr", "sgn"], + "czh": ["czh", "zh"], + "czo": ["czo", "zh"], + "doq": ["doq", "sgn"], + "dse": ["dse", "sgn"], + "dsl": ["dsl", "sgn"], + "dup": ["dup", "ms"], + "ecs": ["ecs", "sgn"], + "esl": ["esl", "sgn"], + "esn": ["esn", "sgn"], + "eso": ["eso", "sgn"], + "eth": ["eth", "sgn"], + "fcs": ["fcs", "sgn"], + "fse": ["fse", "sgn"], + "fsl": ["fsl", "sgn"], + "fss": ["fss", "sgn"], + "gan": ["gan", "zh"], + "gom": ["gom", "kok"], + "gse": ["gse", "sgn"], + "gsg": ["gsg", "sgn"], + "gsm": ["gsm", "sgn"], + "gss": ["gss", "sgn"], + "gus": ["gus", "sgn"], + "hab": ["hab", "sgn"], + "haf": ["haf", "sgn"], + "hak": ["hak", "zh"], + "hds": ["hds", "sgn"], + "hji": ["hji", "ms"], + "hks": ["hks", "sgn"], + "hos": ["hos", "sgn"], + "hps": ["hps", "sgn"], + "hsh": ["hsh", "sgn"], + "hsl": ["hsl", "sgn"], + "hsn": ["hsn", "zh"], + "icl": ["icl", "sgn"], + "ils": ["ils", "sgn"], + "inl": ["inl", "sgn"], + "ins": ["ins", "sgn"], + "ise": ["ise", "sgn"], + "isg": ["isg", "sgn"], + "isr": ["isr", "sgn"], + "jak": ["jak", "ms"], + "jax": ["jax", "ms"], + "jcs": ["jcs", "sgn"], + "jhs": ["jhs", "sgn"], + "jls": ["jls", "sgn"], + "jos": ["jos", "sgn"], + "jsl": ["jsl", "sgn"], + "jus": ["jus", "sgn"], + "kgi": ["kgi", "sgn"], + "knn": ["knn", "kok"], + "kvb": ["kvb", "ms"], + "kvk": ["kvk", "sgn"], + "kvr": ["kvr", "ms"], + "kxd": ["kxd", "ms"], + "lbs": ["lbs", "sgn"], + "lce": ["lce", "ms"], + "lcf": ["lcf", "ms"], + "liw": ["liw", "ms"], + "lls": ["lls", "sgn"], + "lsg": ["lsg", "sgn"], + "lsl": ["lsl", "sgn"], + "lso": ["lso", "sgn"], + "lsp": ["lsp", "sgn"], + "lst": ["lst", "sgn"], + "lsy": ["lsy", "sgn"], + "ltg": ["ltg", "lv"], + "lvs": ["lvs", "lv"], + "lzh": ["lzh", "zh"], + "max": ["max", "ms"], + "mdl": ["mdl", "sgn"], + "meo": ["meo", "ms"], + "mfa": ["mfa", "ms"], + "mfb": ["mfb", "ms"], + "mfs": ["mfs", "sgn"], + "min": ["min", "ms"], + "mnp": ["mnp", "zh"], + "mqg": ["mqg", "ms"], + "mre": ["mre", "sgn"], + "msd": ["msd", "sgn"], + "msi": ["msi", "ms"], + "msr": ["msr", "sgn"], + "mui": ["mui", "ms"], + "mzc": ["mzc", "sgn"], + "mzg": ["mzg", "sgn"], + "mzy": ["mzy", "sgn"], + "nan": ["nan", "zh"], + "nbs": ["nbs", "sgn"], + "ncs": ["ncs", "sgn"], + "nsi": ["nsi", "sgn"], + "nsl": ["nsl", "sgn"], + "nsp": ["nsp", "sgn"], + "nsr": ["nsr", "sgn"], + "nzs": ["nzs", "sgn"], + "okl": ["okl", "sgn"], + "orn": ["orn", "ms"], + "ors": ["ors", "ms"], + "pel": ["pel", "ms"], + "pga": ["pga", "ar"], + "pks": ["pks", "sgn"], + "prl": ["prl", "sgn"], + "prz": ["prz", "sgn"], + "psc": ["psc", "sgn"], + "psd": ["psd", "sgn"], + "pse": ["pse", "ms"], + "psg": ["psg", "sgn"], + "psl": ["psl", "sgn"], + "pso": ["pso", "sgn"], + "psp": ["psp", "sgn"], + "psr": ["psr", "sgn"], + "pys": ["pys", "sgn"], + "rms": ["rms", "sgn"], + "rsi": ["rsi", "sgn"], + "rsl": ["rsl", "sgn"], + "sdl": ["sdl", "sgn"], + "sfb": ["sfb", "sgn"], + "sfs": ["sfs", "sgn"], + "sgg": ["sgg", "sgn"], + "sgx": ["sgx", "sgn"], + "shu": ["shu", "ar"], + "slf": ["slf", "sgn"], + "sls": ["sls", "sgn"], + "sqs": ["sqs", "sgn"], + "ssh": ["ssh", "ar"], + "ssp": ["ssp", "sgn"], + "ssr": ["ssr", "sgn"], + "svk": ["svk", "sgn"], + "swc": ["swc", "sw"], + "swh": ["swh", "sw"], + "swl": ["swl", "sgn"], + "syy": ["syy", "sgn"], + "tmw": ["tmw", "ms"], + "tse": ["tse", "sgn"], + "tsm": ["tsm", "sgn"], + "tsq": ["tsq", "sgn"], + "tss": ["tss", "sgn"], + "tsy": ["tsy", "sgn"], + "tza": ["tza", "sgn"], + "ugn": ["ugn", "sgn"], + "ugy": ["ugy", "sgn"], + "ukl": ["ukl", "sgn"], + "uks": ["uks", "sgn"], + "urk": ["urk", "ms"], + "uzn": ["uzn", "uz"], + "uzs": ["uzs", "uz"], + "vgt": ["vgt", "sgn"], + "vkk": ["vkk", "ms"], + "vkt": ["vkt", "ms"], + "vsi": ["vsi", "sgn"], + "vsl": ["vsl", "sgn"], + "vsv": ["vsv", "sgn"], + "wuu": ["wuu", "zh"], + "xki": ["xki", "sgn"], + "xml": ["xml", "sgn"], + "xmm": ["xmm", "ms"], + "xms": ["xms", "sgn"], + "yds": ["yds", "sgn"], + "ysl": ["ysl", "sgn"], + "yue": ["yue", "zh"], + "zib": ["zib", "sgn"], + "zlm": ["zlm", "ms"], + "zmi": ["zmi", "ms"], + "zsl": ["zsl", "sgn"], + "zsm": ["zsm", "ms"] + }; + + + /** + * Canonicalizes the given well-formed BCP 47 language tag, including regularized case of subtags. + * + * Spec: ECMAScript Internationalization API Specification, draft, 6.2.3. + * Spec: RFC 5646, section 4.5. + */ + function canonicalizeLanguageTag(locale) { + + // start with lower case for easier processing, and because most subtags will need to be lower case anyway + locale = locale.toLowerCase(); + + // handle mappings for complete tags + if (__tagMappings.hasOwnProperty(locale)) { + return __tagMappings[locale]; + } + + var subtags = locale.split("-"); + var i = 0; + + // handle standard part: all subtags before first singleton or "x" + while (i < subtags.length) { + var subtag = subtags[i]; + if (subtag.length === 1 && (i > 0 || subtag === "x")) { + break; + } else if (i !== 0 && subtag.length === 2) { + subtag = subtag.toUpperCase(); + } else if (subtag.length === 4) { + subtag = subtag[0].toUpperCase() + subtag.substring(1).toLowerCase(); + } + if (__subtagMappings.hasOwnProperty(subtag)) { + subtag = __subtagMappings[subtag]; + } else if (__extlangMappings.hasOwnProperty(subtag)) { + subtag = __extlangMappings[subtag][0]; + if (i === 1 && __extlangMappings[subtag][1] === subtags[0]) { + subtags.shift(); + i--; + } + } + subtags[i] = subtag; + i++; + } + var normal = subtags.slice(0, i).join("-"); + + // handle extensions + var extensions = []; + while (i < subtags.length && subtags[i] !== "x") { + var extensionStart = i; + i++; + while (i < subtags.length && subtags[i].length > 1) { + i++; + } + var extension = subtags.slice(extensionStart, i).join("-"); + extensions.push(extension); + } + extensions.sort(); + + // handle private use + var privateUse; + if (i < subtags.length) { + privateUse = subtags.slice(i).join("-"); + } + + // put everything back together + var canonical = normal; + if (extensions.length > 0) { + canonical += "-" + extensions.join("-"); + } + if (privateUse !== undefined) { + if (canonical.length > 0) { + canonical += "-" + privateUse; + } else { + canonical = privateUse; + } + } + + return canonical; + } + + return typeof locale === "string" && isStructurallyValidLanguageTag(locale) && + canonicalizeLanguageTag(locale) === locale; +} + diff --git a/website/json/intl402.json b/website/json/intl402.json index 7f6d9f55d..abb678ed3 100644 --- a/website/json/intl402.json +++ b/website/json/intl402.json @@ -1 +1 @@ -{"testsCollection":{"name":"Chapter - intl402","numTests":"41","tests":[{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLCBmYWxzZSwgZmFsc2UsIFsiQ29sbGF0b3IiLCAiTnVtYmVyRm9ybWF0IiwgIkRhdGVUaW1lRm9ybWF0Il0pOwoK","commentary":"","description":"Tests that Intl\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch08/8.0/8.0_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLkNvbGxhdG9yLCB0cnVlLCB0cnVlLCBbInN1cHBvcnRlZExvY2FsZXNPZiJdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.Collator\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.1/10.1_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yIGhhcyBhIHN1cHBvcnRlZExvY2FsZXNPZgogKiBwcm9wZXJ0eSwgYW5kIGl0IHdvcmtzIGFzIHBsYW5uZWQuCiAqLwoKdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5Db2xsYXRvcigpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKdmFyIG5vdFN1cHBvcnRlZCA9ICd6eHgnOyAvLyAibm8gbGluZ3Vpc3RpYyBjb250ZW50Igp2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IFtkZWZhdWx0TG9jYWxlLCBub3RTdXBwb3J0ZWRdOwoKdmFyIHN1cHBvcnRlZExvY2FsZXM7CgppZiAoIUludGwuQ29sbGF0b3IuaGFzT3duUHJvcGVydHkoJ3N1cHBvcnRlZExvY2FsZXNPZicpKSB7CiAgICAkRVJST1IoIkludGwuQ29sbGF0b3IgZG9lc24ndCBoYXZlIGEgc3VwcG9ydGVkTG9jYWxlc09mIHByb3BlcnR5LiIpOwp9CgpzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YocmVxdWVzdGVkTG9jYWxlcyk7CmlmIChzdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCAhPT0gMSkgewogICAgJEVSUk9SKCdUaGUgbGVuZ3RoIG9mIHN1cHBvcnRlZCBsb2NhbGVzIGxpc3QgaXMgbm90IDEuJyk7Cn0KCmlmIChzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3QgcmV0dXJuZWQgaW4gdGhlIHN1cHBvcnRlZCBsaXN0LicpOwp9Cgo=","commentary":"","description":"Tests that Intl.Collator has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch10/10.2/10.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YsIHRydWUsIGZhbHNlLCBbXSwgMSk7Cgo=","commentary":"","description":"Tests that Intl.Collator.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.2/10.2.2_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhlIGludGVybmFsIHByb3BlcnRpZXMgb2YgSW50bC5Db2xsYXRvci4KICovCgp2YXIgZGVmYXVsdExvY2FsZSA9IG5ldyBJbnRsLkNvbGxhdG9yKFtdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CnZhciBzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGVdKTsKCmlmIChzdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA8IDEgfHwgc3VwcG9ydGVkTG9jYWxlc1swXSAhPT0gZGVmYXVsdExvY2FsZSkgewogICAgJEVSUk9SKCdUaGUgZGVmYXVsdCBsb2NhbGUgaXMgbm90IHN1cHBvcnRlZCBieSBJbnRsLkNvbGxhdG9yJyk7Cn0KCi8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNoZWNrIFtbcmVsZXZhbnRFeHRlbnNpb25LZXlzXV0KCi8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNoZWNrIHNwZWNpZmllZCBwcm9wZXJ0aWVzIG9mIFtbbG9jYWxlRGF0YV1dCgo=","commentary":"","description":"Tests the internal properties of Intl.Collator.","path":"TestCases/intl402/ch10/10.2/10.2.3.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyB0aGUKICogSW50bC5Db2xsYXRvci4KICovCgppZiAoSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuQ29sbGF0b3IpIHsKICAgICRFUlJPUigiSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgbm90IHRoZSBzYW1lIGFzICIgKwogICAgICAgICAgICJJbnRsLkNvbGxhdG9yIik7Cn0KCg==","commentary":"","description":"Tests that Intl.Collator.prototype.constructor is the\nIntl.Collator.","path":"TestCases/intl402/ch10/10.3/10.3.1.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb21wYXJlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QobmV3IEludGwuQ29sbGF0b3IoKS5jb21wYXJlLCB0cnVlLCBmYWxzZSwgW10sIDIpOwoK","commentary":"","description":"Tests that the function returned by Intl.Collator.prototype.compare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.2_1_a_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0b3IucHJvdG90eXBlLCAiY29tcGFyZSIpLmdldCAsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that the getter for Intl.Collator.prototype.compare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.Collator.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.3_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZSBpcyBhbiBvYmplY3QgdGhhdAogKiBoYXMgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBJbnRsLkNvbGxhdG9yLgogKi8KCi8vIHRlc3QgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd291bGQgZmFpbCBpZiAidGhpcyIgd2VyZSBub3QgYW4gb2JqZWN0Ci8vIGluaXRpYWxpemVkIGFzIGFuIEludGwuQ29sbGF0b3IKaWYgKEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUoImHQsOOBguyVhCIsICJh0LDjgYLslYQiKSAhPT0gMCkgewogICAgJEVSUk9SKCJJbnRsLkNvbGxhdG9yLnByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0IHRoYXQgaGFzIGJlZW4gIiArCiAgICAgICAgImluaXRpYWxpemVkIGFzIGFuIEludGwuQ29sbGF0b3IuIik7Cn0KCg==","commentary":"","description":"Tests that Intl.Collator.prototype is an object that\nhas been initialized as an Intl.Collator.","path":"TestCases/intl402/ch10/10.3/10.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IucHJvdG90eXBlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5Db2xsYXRvci5wcm90b3R5cGUsIGZhbHNlLCBmYWxzZSwgWyJjb25zdHJ1Y3RvciIsICJjb21wYXJlIiwgInJlc29sdmVkT3B0aW9ucyJdKTsKCg==","commentary":"","description":"Tests that Intl.Collator.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0CiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5OdW1iZXJGb3JtYXQsIHRydWUsIHRydWUsIFsic3VwcG9ydGVkTG9jYWxlc09mIl0sIDApOwoK","commentary":"","description":"Tests that Intl.NumberFormat\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.1/11.1_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdCBoYXMgYSBzdXBwb3J0ZWRMb2NhbGVzT2YKICogcHJvcGVydHksIGFuZCBpdCB3b3JrcyBhcyBwbGFubmVkLgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCnZhciBkZWZhdWx0TG9jYWxlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwp2YXIgbm90U3VwcG9ydGVkID0gJ3p4eCc7IC8vICJubyBsaW5ndWlzdGljIGNvbnRlbnQiCnZhciByZXF1ZXN0ZWRMb2NhbGVzID0gW2RlZmF1bHRMb2NhbGUsIG5vdFN1cHBvcnRlZF07CiAgICAKdmFyIHN1cHBvcnRlZExvY2FsZXM7CgppZiAoIUludGwuTnVtYmVyRm9ybWF0Lmhhc093blByb3BlcnR5KCdzdXBwb3J0ZWRMb2NhbGVzT2YnKSkgewogICAgJEVSUk9SKCJJbnRsLk51bWJlckZvcm1hdCBkb2Vzbid0IGhhdmUgYSBzdXBwb3J0ZWRMb2NhbGVzT2YgcHJvcGVydHkuIik7Cn0KICAgIApzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHJlcXVlc3RlZExvY2FsZXMpOwppZiAoc3VwcG9ydGVkTG9jYWxlcy5sZW5ndGggIT09IDEpIHsKICAgICRFUlJPUignVGhlIGxlbmd0aCBvZiBzdXBwb3J0ZWQgbG9jYWxlcyBsaXN0IGlzIG5vdCAxLicpOwp9CiAgICAKaWYgKHN1cHBvcnRlZExvY2FsZXNbMF0gIT09IGRlZmF1bHRMb2NhbGUpIHsKICAgICRFUlJPUignVGhlIGRlZmF1bHQgbG9jYWxlIGlzIG5vdCByZXR1cm5lZCBpbiB0aGUgc3VwcG9ydGVkIGxpc3QuJyk7Cn0KCg==","commentary":"","description":"Tests that Intl.NumberFormat has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch11/11.2/11.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZiwgdHJ1ZSwgZmFsc2UsIFtdLCAxKTsKCg==","commentary":"","description":"Tests that Intl.NumberFormat.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.2/11.2.2_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhlIGludGVybmFsIHByb3BlcnRpZXMgb2YgSW50bC5OdW1iZXJGb3JtYXQuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoW10pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKdmFyIHN1cHBvcnRlZExvY2FsZXMgPSBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGVdKTsKICAKaWYgKHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoIDwgMSB8fCBzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEludGwuTnVtYmVyRm9ybWF0Jyk7Cn0KCi8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNoZWNrIHRoYXQgW1tyZWxldmFudEV4dGVuc2lvbktleXNdXSA9PT0gWydudSddCiAgCi8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIGNoZWNrIHNwZWNpZmllZCBwcm9wZXJ0aWVzIG9mIFtbbG9jYWxlRGF0YV1dICAKCg==","commentary":"","description":"Tests the internal properties of Intl.NumberFormat.","path":"TestCases/intl402/ch11/11.2/11.2.3.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgdGhlCiAqIEludGwuTnVtYmVyRm9ybWF0LgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCmlmIChJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuTnVtYmVyRm9ybWF0KSB7CiAgICAkRVJST1IoIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBub3QgdGhlIHNhbWUgYXMgIiArCiAgICAgICAgICAiSW50bC5OdW1iZXJGb3JtYXQiKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.constructor is the\nIntl.NumberFormat.","path":"TestCases/intl402/ch11/11.3/11.3.1.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGNvbnZlcnRzIG90aGVyIHR5cGVzIHRvIG51bWJlcnMuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwp2YXIgdGVzdERhdGEgPSBbdW5kZWZpbmVkLCBudWxsLCB0cnVlLCAnMC42NjY2NjY2J107CnZhciBudW1iZXI7CnZhciBpLCBpbnB1dCwgY29ycmVjdFJlc3VsdCwgcmVzdWx0OwoKZm9yIChpIGluIHRlc3REYXRhKSB7CiAgICBpbnB1dCA9IHRlc3REYXRhW2ldOwogICAgbnVtYmVyID0gK2lucHV0OwogICAgY29ycmVjdFJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQobnVtYmVyKTsKICAgIAogICAgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdChpbnB1dCk7CiAgICBpZiAocmVzdWx0ICE9PSBjb3JyZWN0UmVzdWx0KSB7CiAgICAgICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBkb2VzIG5vdCBjb252ZXJ0IG90aGVyICcgKwogICAgICAgICAgICAndHlwZXMgdG8gbnVtYmVycy4gSW5wdXQ6ICInK2lucHV0KyciIE91dHB1dDogIicrcmVzdWx0KyciICcrCiAgICAgICAgICAgICdFeHBlY3RlZCBvdXRwdXQ6ICInK2NvcnJlY3RSZXN1bHQrJyInKTsKICAgIH0KfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nconverts other types to numbers.","path":"TestCases/intl402/ch11/11.3/11.3.2_1_a_ii.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QobmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0LCB0cnVlLCBmYWxzZSwgW10sIDEpOwoK","commentary":"","description":"Tests that the function returned by Intl.NumberFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.2_1_a_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGRvZXNuJ3QgdHJlYXQgYWxsIG51bWJlcnMgYXMgbmVnYXRpdmUuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwogIAppZiAoZm9ybWF0dGVyLmZvcm1hdCgxKSA9PT0gZm9ybWF0dGVyLmZvcm1hdCgtMSkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgaXMgZm9ybWF0dGluZyAxIGFuZCAtMSB0aGUgc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZXIuZm9ybWF0KC0wKSAhPT0gZm9ybWF0dGVyLmZvcm1hdCgwKSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBpcyBmb3JtYXR0aW5nIHNpZ25lZCB6ZXJvcyBkaWZmZXJlbnRseS4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\ndoesn't treat all numbers as negative.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_1.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGhhbmRsZXMgTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSBwcm9wZXJseS4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgovLyBGSVhNRTogV2UgYXJlIG9ubHkgbGlzdGluZyBOdW1lcmljX1R5cGU9RGVjaW1hbC4gTWF5IG5lZWQgdG8gYWRkIG1vcmUKLy8gd2hlbiB0aGUgc3BlYyBjbGFyaWZpZXMuIEN1cnJlbnQgYXMgb2YgVW5pY29kZSA2LjEuCnZhciBoYXNVbmljb2RlRGlnaXRzID0gbmV3IFJlZ0V4cCgnLiooWycgKwogICAgJzAtOVx1MDY2MC1cdTA2NjlcdTA2RjAtXHUwNkY5XHUwN0MwLVx1MDdDOVx1MDk2Ni1cdTA5NkYnICsKICAgICdcdTA5RTYtXHUwOUVGXHUwQTY2LVx1MEE2Rlx1MEFFNi1cdTBBRUZcdTBCNjYtXHUwQjZGXHUwQkU2LVx1MEJFRicgKwogICAgJ1x1MEM2Ni1cdTBDNkZcdTBDRTYtXHUwQ0VGXHUwRDY2LVx1MEQ2Rlx1MEU1MC1cdTBFNTlcdTBFRDAtXHUwRUQ5JyArCiAgICAnXHUwRjIwLVx1MEYyOVx1MTA0MC1cdTEwNDlcdTEwOTAtXHUxMDk5XHUxN0UwLVx1MTdFOVx1MTgxMC1cdTE4MTknICsKICAgICdcdTE5NDYtXHUxOTRGXHUxOUQwLVx1MTlEOVx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQjUwLVx1MUI1OScgKwogICAgJ1x1MUJCMC1cdTFCQjlcdTFDNDAtXHUxQzQ5XHUxQzUwLVx1MUM1OVx1QTYyMC1cdUE2MjlcdUE4RDAtXHVBOEQ5JyArCiAgICAnXHVBOTAwLVx1QTkwOVx1QTlEMC1cdUE5RDlcdUFBNTAtXHVBQTU5XHVBQkYwLVx1QUJGOVx1RkYxMC1cdUZGMTknICsKICAgICddfCcgKwogICAgJ1x1RDgwMVtcdURDQTAtXHVEQ0E5XXwnICsKICAgICdcdUQ4MDRbXHVEQzY2LVx1REM2Rlx1RENGMC1cdURDRjlcdUREMzYtXHVERDNGXHVEREQwLVx1REREOV18JyArCiAgICAnXHVEODA1W1x1REVDMC1cdURFQzldfCcgKwogICAgJ1x1RDgzNVtcdURGQ0UtXHVERkZGXSknKTsKCnZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKTsKdmFyIGZvcm1hdHRlZE5hTiA9IGZvcm1hdHRlci5mb3JtYXQoTmFOKTsKdmFyIGZvcm1hdHRlZEluZmluaXR5ID0gZm9ybWF0dGVyLmZvcm1hdChJbmZpbml0eSk7CnZhciBmb3JtYXR0ZWROZWdhdGl2ZUluZmluaXR5ID0gZm9ybWF0dGVyLmZvcm1hdCgtSW5maW5pdHkpOwoKaWYgKGZvcm1hdHRlZE5hTiA9PT0gZm9ybWF0dGVkSW5maW5pdHkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gYW5kIEluZmluaXR5IHRoZSAnICsKICAgICAgICAnc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZWROYU4gPT09IGZvcm1hdHRlZE5lZ2F0aXZlSW5maW5pdHkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gYW5kIG5lZ2F0aXZlICcgKwogICAgICAgICdJbmZpbml0eSB0aGUgc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZWRJbmZpbml0eSA9PT0gZm9ybWF0dGVkTmVnYXRpdmVJbmZpbml0eSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBmb3JtYXRzIEluZmluaXR5IGFuZCAnICsKICAgICAgICAnbmVnYXRpdmUgSW5maW5pdHkgdGhlIHNhbWUgd2F5LicpOwp9CgppZiAoaGFzVW5pY29kZURpZ2l0cy50ZXN0KGZvcm1hdHRlZE5hTikpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gdXNpbmcgYSBkaWdpdC4nKTsKfQoKaWYgKGhhc1VuaWNvZGVEaWdpdHMudGVzdChmb3JtYXR0ZWRJbmZpbml0eSkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBJbmZpbml0eSB1c2luZyBhICcgKwogICAgICAgICdkaWdpdC4nKTsKfQoKaWYgKGhhc1VuaWNvZGVEaWdpdHMudGVzdChmb3JtYXR0ZWROZWdhdGl2ZUluZmluaXR5KSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBmb3JtYXRzIG5lZ2F0aXZlIEluZmluaXR5ICcgKyAKICAgICAgICAndXNpbmcgYSBkaWdpdC4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nhandles NaN, Infinity, and -Infinity properly.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_2.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGZvcm1hdHMgcGVyY2VudCB2YWx1ZXMgcHJvcGVybHkuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIG51bWJlckZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwp2YXIgcGVyY2VudEZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh1bmRlZmluZWQsIHtzdHlsZTogJ3BlcmNlbnQnfSk7Cgp2YXIgZm9ybWF0dGVkVHdlbnR5ID0gbnVtYmVyRm9ybWF0dGVyLmZvcm1hdCgyMCk7CnZhciBmb3JtYXR0ZWRUd2VudHlQZXJjZW50ID0gcGVyY2VudEZvcm1hdHRlci5mb3JtYXQoMC4yMCk7CgovLyBGSVhNRTogTWF5IG5vdCB3b3JrIGZvciBzb21lIHRoZW9yZXRpY2FsIGxvY2FsZXMgd2hlcmUgcGVyY2VudHMgYW5kCi8vIG5vcm1hbCBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgZGlmZmVyZW50IG51bWJlcmluZyBzeXN0ZW1zLgppZiAoZm9ybWF0dGVkVHdlbnR5UGVyY2VudC5pbmRleE9mKGZvcm1hdHRlZFR3ZW50eSkgPT09IC0xKSB7CiAgICAkRVJST1IoIkludGwuTnVtYmVyRm9ybWF0J3MgZm9ybWF0dGluZyBvZiAyMCUgZG9lcyBub3QgaW5jbHVkZSBhICIgKwogICAgICAgICJmb3JtYXR0aW5nIG9mIDIwIGFzIGEgc3Vic3RyaW5nLiIpOwp9CgovLyBGSVhNRTogTW92ZSB0aGlzIHRvIHNvbWV3aGVyZSBhcHByb3ByaWF0ZQppZiAocGVyY2VudEZvcm1hdHRlci5mb3JtYXQoMC4wMTEpID09PSBwZXJjZW50Rm9ybWF0dGVyLmZvcm1hdCgwLjAyKSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBpcyBmb3JtYXR0aW5nIDEuMSUgYW5kIDIlIHRoZSBzYW1lIHdheS4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nformats percent values properly.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_3_b.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIHN1cHBvcnRzIGFsbCBhbHRlcm5hdGl2ZSBudW1iZXJpbmcgc3lzdGVtcy4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgp2YXIgbnVtYmVyaW5nU3lzdGVtcyA9IHsKICAgIGFyYWI6IDB4MDY2MCwKICAgIGFyYWJleHQ6IDB4MDZGMCwKICAgIGJlbmc6IDB4MDlFNiwKICAgIGRldmE6IDB4MDk2NiwKICAgIGZ1bGx3aWRlOiAweEZGMTAsCiAgICBndWpyOiAweDBBRTYsCiAgICBndXJ1OiAweDBBNjYsCiAgICBoYW5pZGVjOiBbMHgzMDA3LCAweDRFMDAsIDB4NEU4QywgMHg0RTA5LCAweDU2REIsCiAgICAgICAgICAgICAgMHg0RTk0LCAweDUxNkQsIDB4NEUwMywgMHg1MTZCLCAweDRFNURdLAogICAga2htcjogMHgxN0UwLAogICAga25kYTogMHgwQ0U2LAogICAgbGFvbzogMHgwRUQwLAogICAgbGF0bjogMHgwMDMwLAogICAgbWx5bTogMHgwRDY2LAogICAgbW9uZzogMHgxODEwLAogICAgbXltcjogMHgxMDQwLAogICAgb3J5YTogMHgwQjY2LAogICAgdGFtbGRlYzogMHgwQkU2LAogICAgdGVsdTogMHgwQzY2LAogICAgdGhhaTogMHgwRTUwLAogICAgdGlidDogMHgwRjIwCn07Cgp2YXIgb3B0aW9ucywgZm9ybWF0dGVyOwp2YXIgcywgemVyb0NvZGUsIGRpZ2l0TGlzdDsKCmZvciAocyBpbiBudW1iZXJpbmdTeXN0ZW1zKSB7CiAgICB6ZXJvQ29kZSA9IG51bWJlcmluZ1N5c3RlbXNbc107CiAgICBpZiAodHlwZW9mIHplcm9Db2RlID09PSAnbnVtYmVyJykgewogICAgICAgIGRpZ2l0TGlzdCA9IFt6ZXJvQ29kZSwgemVyb0NvZGUrMSwgemVyb0NvZGUrMiwgemVyb0NvZGUrMywgemVyb0NvZGUrNCwKICAgICAgICAgICAgICAgICAgIHplcm9Db2RlKzUsIHplcm9Db2RlKzYsIHplcm9Db2RlKzcsIHplcm9Db2RlKzgsIHplcm9Db2RlKzldOwogICAgICAgIG51bWJlcmluZ1N5c3RlbXNbc10gPSBkaWdpdExpc3Q7CiAgICB9Cn0KCi8vIEZJWE1FOiBVbmZpbmlzaGVkCgo=","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nsupports all alternative numbering systems.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_3_e.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZSwgImZvcm1hdCIpLmdldCAsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that the getter for Intl.NumberFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.3_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUgaXMgYW4gb2JqZWN0IHRoYXQKICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYXMgYW4gSW50bC5OdW1iZXJGb3JtYXQuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKLy8gdGVzdCBieSBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdCB3b3VsZCBmYWlsIGlmICJ0aGlzIiB3ZXJlIG5vdCBhbiBvYmplY3QKLy8gaW5pdGlhbGl6ZWQgYXMgYW4gSW50bC5OdW1iZXJGb3JtYXQKaWYgKHR5cGVvZiBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0KDApICE9PSAic3RyaW5nIikgewogICAgJEVSUk9SKCJJbnRsLk51bWJlckZvcm1hdCdzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0IHRoYXQgaGFzIGJlZW4gIiArCiAgICAgICAgImluaXRpYWxpemVkIGFzIGFuIEludGwuTnVtYmVyRm9ybWF0Iik7Cn0KCg==","commentary":"","description":"Tests that Intl.NumberFormat.prototype is an object that\nhas been initialized as an Intl.NumberFormat.","path":"TestCases/intl402/ch11/11.3/11.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZQogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZSwgZmFsc2UsIGZhbHNlLCBbImNvbnN0cnVjdG9yIiwgImZvcm1hdCIsICJyZXNvbHZlZE9wdGlvbnMiXSk7Cgo=","commentary":"","description":"Tests that Intl.NumberFormat.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLkRhdGVUaW1lRm9ybWF0LCB0cnVlLCB0cnVlLCBbInN1cHBvcnRlZExvY2FsZXNPZiJdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.DateTimeFormat\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.1/12.1_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0IGhhcyBhIHN1cHBvcnRlZExvY2FsZXNPZgogKiBwcm9wZXJ0eSwgYW5kIGl0IHdvcmtzIGFzIHBsYW5uZWQuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKdmFyIG5vdFN1cHBvcnRlZCA9ICd6eHgnOyAvLyAibm8gbGluZ3Vpc3RpYyBjb250ZW50Igp2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IFtkZWZhdWx0TG9jYWxlLCBub3RTdXBwb3J0ZWRdOwogICAgCnZhciBzdXBwb3J0ZWRMb2NhbGVzOwoKaWYgKCFJbnRsLkRhdGVUaW1lRm9ybWF0Lmhhc093blByb3BlcnR5KCdzdXBwb3J0ZWRMb2NhbGVzT2YnKSkgewogICAgJEVSUk9SKCJJbnRsLkRhdGVUaW1lRm9ybWF0IGRvZXNuJ3QgaGF2ZSBhIHN1cHBvcnRlZExvY2FsZXNPZiBwcm9wZXJ0eS4iKTsKfQogICAgCnN1cHBvcnRlZExvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihyZXF1ZXN0ZWRMb2NhbGVzKTsKaWYgKHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoICE9PSAxKSB7CiAgICAkRVJST1IoJ1RoZSBsZW5ndGggb2Ygc3VwcG9ydGVkIGxvY2FsZXMgbGlzdCBpcyBub3QgMS4nKTsKfQogICAgCmlmIChzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3QgcmV0dXJuZWQgaW4gdGhlIHN1cHBvcnRlZCBsaXN0LicpOwp9Cgo=","commentary":"","description":"Tests that Intl.DateTimeFormat has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch12/12.2/12.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YsIHRydWUsIGZhbHNlLCBbXSwgMSk7Cgo=","commentary":"","description":"Tests that Intl.DateTimeFormat.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.2/12.2.2_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhlIGludGVybmFsIHByb3BlcnRpZXMgb2YgSW50bC5EYXRlVGltZUZvcm1hdC4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgp2YXIgZGVmYXVsdExvY2FsZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CnZhciBzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGVdKTsKICAKaWYgKHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoIDwgMSB8fCBzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEludGwuRGF0ZVRpbWVGb3JtYXQnKTsKfQoKLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gY2hlY2sgdGhhdCBbW3JlbGV2YW50RXh0ZW5zaW9uS2V5c11dID09PSBbJ2NhJywgJ251J10KICAKLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gY2hlY2sgc3BlY2lmaWVkIHByb3BlcnRpZXMgb2YgW1tsb2NhbGVEYXRhXV0KCg==","commentary":"","description":"Tests the internal properties of Intl.DateTimeFormat.","path":"TestCases/intl402/ch12/12.2/12.2.3.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyB0aGUKICogSW50bC5EYXRlVGltZUZvcm1hdC4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgppZiAoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuRGF0ZVRpbWVGb3JtYXQpIHsKICAgICRFUlJPUigiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgbm90IHRoZSBzYW1lIGFzICIgKwogICAgICAgICAgIkludGwuRGF0ZVRpbWVGb3JtYXQiKTsKfQoK","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype.constructor is the\nIntl.DateTimeFormat.","path":"TestCases/intl402/ch12/12.3/12.3.1.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLmZvcm1hdCwgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that the function returned by Intl.DateTimeFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.2_1_a_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdAogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUsICJmb3JtYXQiKS5nZXQgLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that the getter for Intl.DateTimeFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.3_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZSBpcyBhbiBvYmplY3QgdGhhdAogKiBoYXMgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBJbnRsLkRhdGVUaW1lRm9ybWF0LgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCi8vIHRlc3QgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd291bGQgZmFpbCBpZiAidGhpcyIgd2VyZSBub3QgYW4gb2JqZWN0Ci8vIGluaXRpYWxpemVkIGFzIGFuIEludGwuRGF0ZVRpbWVGb3JtYXQKaWYgKHR5cGVvZiBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQoMCkgIT09ICJzdHJpbmciKSB7CiAgICAkRVJST1IoIkludGwuRGF0ZVRpbWVGb3JtYXQncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdCB0aGF0IGhhcyBiZWVuICIgKwogICAgICAgICJpbml0aWFsaXplZCBhcyBhbiBJbnRsLkRhdGVUaW1lRm9ybWF0Iik7Cn0KCg==","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype is an object that\nhas been initialized as an Intl.DateTimeFormat.","path":"TestCases/intl402/ch12/12.3/12.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUsIGZhbHNlLCBmYWxzZSwgWyJjb25zdHJ1Y3RvciIsICJmb3JtYXQiLCAicmVzb2x2ZWRPcHRpb25zIl0pOwoK","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZQogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSwgdHJ1ZSwgZmFsc2UsIFtdLCAxKTsKCg==","commentary":"","description":"Tests that String.prototype.localeCompare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.1/13.1.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IE51bWJlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChOdW1iZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that Number.prototype.toLocaleString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.2/13.2.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoRGF0ZS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that Date.prototype.toLocaleString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlRGF0ZVN0cmluZwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KERhdGUucHJvdG90eXBlLnRvTG9jYWxlRGF0ZVN0cmluZywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Date.prototype.toLocaleDateString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlVGltZVN0cmluZwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KERhdGUucHJvdG90eXBlLnRvTG9jYWxlVGltZVN0cmluZywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Date.prototype.toLocaleTimeString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.3_L15.js"}]}} \ No newline at end of file +{"testsCollection":{"name":"Chapter - intl402","numTests":"66","tests":[{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHN0cnVjdHVyYWxseSB2YWxpZCBsYW5ndWFnZSB0YWdzIGFyZSBhY2NlcHRlZC4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnZhciB2YWxpZExhbmd1YWdlVGFncyA9IFsKICAgICJkZSIsIC8vIElTTyA2MzkgbGFuZ3VhZ2UgY29kZQogICAgImRlLURFIiwgLy8gKyBJU08gMzE2Ni0xIGNvdW50cnkgY29kZQogICAgIkRFLWRlIiwgLy8gdGFncyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQogICAgImNtbiIsIC8vIElTTyA2MzkgbGFuZ3VhZ2UgY29kZQogICAgImNtbi1IYW5zIiwgLy8gKyBzY3JpcHQgY29kZQogICAgIkNNTi1oQU5TIiwgLy8gdGFncyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQogICAgImNtbi1oYW5zLWNuIiwgLy8gKyBJU08gMzE2Ni0xIGNvdW50cnkgY29kZQogICAgImVzLTQxOSIsIC8vICsgVU4gTS40OSByZWdpb24gY29kZQogICAgImVzLTQxOS11LW51LWxhdG4tY3UtYm9iIiwgLy8gKyBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gc2VxdWVuY2UKICAgICJpLWtsaW5nb24iLCAvLyBncmFuZGZhdGhlcmVkIHRhZwogICAgImNtbi1oYW5zLWNuLXQtY2EtdS1jYS14LXQtdSIsIC8vIHNpbmdsZXRvbiBzdWJ0YWdzIGNhbiBhbHNvIGJlIHVzZWQgYXMgcHJpdmF0ZSB1c2Ugc3VidGFncwogICAgImVub2NoaWFuLWVub2NoaWFuIiwgLy8gbGFuZ3VhZ2UgYW5kIHZhcmlhbnQgc3VidGFncyBtYXkgYmUgdGhlIHNhbWUKICAgICJkZS1ncmVnb3J5LXUtY2EtZ3JlZ29yeSIgLy8gdmFyaWFudCBhbmQgZXh0ZW5zaW9uIHN1YnRhZ3MgbWF5IGJlIHRoZSBzYW1lCl07Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICB2YWxpZExhbmd1YWdlVGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHsKICAgICAgICAvLyB0aGlzIG11c3Qgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgYSB2YWxpZCBsYW5ndWFnZSB0YWcKICAgICAgICB2YXIgb2JqID0gbmV3IENvbnN0cnVjdG9yKFt0YWddKTsKICAgIH0pOwogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that structurally valid language tags are accepted.","path":"TestCases/intl402/ch06/6.2/6.2.2_a.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGxhbmd1YWdlIHRhZ3Mgd2l0aCAiXyIgYXJlIG5vdCBhY2NlcHRlZC4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnZhciBpbnZhbGlkTGFuZ3VhZ2VUYWdzID0gWwogICAgImRlX0RFIiwKICAgICJERV9kZSIsCiAgICAiY21uX0hhbnMiLAogICAgImNtbi1oYW5zX2NuIiwKICAgICJlc180MTkiLAogICAgImVzLTQxOS11LW51LWxhdG4tY3VfYm9iIiwKICAgICJpX2tsaW5nb24iLAogICAgImNtbi1oYW5zLWNuLXQtY2EtdS1jYS14X3QtdSIsCiAgICAiZW5vY2hpYW5fZW5vY2hpYW4iLAogICAgImRlLWdyZWdvcnlfdS1jYS1ncmVnb3J5IgpdOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgaW52YWxpZExhbmd1YWdlVGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHsKICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gdGhpcyBtdXN0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgYW4gaW52YWxpZCBsYW5ndWFnZSB0YWcKICAgICAgICAgICAgdmFyIG9iaiA9IG5ldyBDb25zdHJ1Y3RvcihbdGFnXSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBlcnJvciA9IGU7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICRFUlJPUigiSW52YWxpZCBsYW5ndWFnZSB0YWcgIiArIHRhZyArICIgd2FzIG5vdCByZWplY3RlZC4iKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgIT09ICJSYW5nZUVycm9yIikgewogICAgICAgICAgICAkRVJST1IoIkludmFsaWQgbGFuZ3VhZ2UgdGFnICIgKyB0YWcgKyAiIHdhcyByZWplY3RlZCB3aXRoIHdyb25nIGVycm9yICIgKyBlcnJvci5uYW1lICsgIi4iKTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that language tags with \"_\" are not accepted.","path":"TestCases/intl402/ch06/6.2/6.2.2_b.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGxhbmd1YWdlIHRhZ3Mgd2l0aCBpbnZhbGlkIHN1YnRhZyBzZXF1ZW5jZXMgYXJlIG5vdCBhY2NlcHRlZC4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnZhciBpbnZhbGlkTGFuZ3VhZ2VUYWdzID0gWwogICAgIiIsIC8vIGVtcHR5IHRhZwogICAgImkiLCAvLyBzaW5nbGV0b24gYWxvbmUKICAgICJ4IiwgLy8gcHJpdmF0ZSB1c2Ugd2l0aG91dCBzdWJ0YWcKICAgICJ1IiwgLy8gZXh0ZW5zaW9uIHNpbmdsZXRvbiBpbiBmaXJzdCBwbGFjZQogICAgIjQxOSIsIC8vIHJlZ2lvbiBjb2RlIGluIGZpcnN0IHBsYWNlCiAgICAidS1udS1sYXRuLWN1LWJvYiIsIC8vIGV4dGVuc2lvbiBzZXF1ZW5jZSB3aXRob3V0IGxhbmd1YWdlCiAgICAiaGFucy1jbW4tY24iLCAvLyAiaGFucyIgY291bGQgdGhlb3JldGljYWxseSBiZSBhIDQtbGV0dGVyIGxhbmd1YWdlIGNvZGUsCiAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhvc2UgY2FuJ3QgYmUgZm9sbG93ZWQgYnkgZXh0bGFuZyBjb2Rlcy4KICAgICJjbW4taGFucy1jbi11LXUiLCAvLyBkdXBsaWNhdGUgc2luZ2xldG9uCiAgICAiY21uLWhhbnMtY24tdC11LWNhLXUiLCAvLyBkdXBsaWNhdGUgc2luZ2xldG9uCiAgICAiZGUtZ3JlZ29yeS1ncmVnb3J5IiwgLy8gZHVwbGljYXRlIHZhcmlhbnQKICAgICLkuK3mlociLCAvLyBub24tQVNDSUkgbGV0dGVycwogICAgImVuLcOfIiwgLy8gbm9uLUFTQ0lJIGxldHRlcnMKICAgICLEsWQiIC8vIG5vbi1BU0NJSSBsZXR0ZXJzCl07Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICBpbnZhbGlkTGFuZ3VhZ2VUYWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykgewogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyB0aGlzIG11c3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBhbiBpbnZhbGlkIGxhbmd1YWdlIHRhZwogICAgICAgICAgICB2YXIgb2JqID0gbmV3IENvbnN0cnVjdG9yKFt0YWddKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGVycm9yID0gZTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgJEVSUk9SKCJJbnZhbGlkIGxhbmd1YWdlIHRhZyAiICsgdGFnICsgIiB3YXMgbm90IHJlamVjdGVkLiIpOwogICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubmFtZSAhPT0gIlJhbmdlRXJyb3IiKSB7CiAgICAgICAgICAgICRFUlJPUigiSW52YWxpZCBsYW5ndWFnZSB0YWcgIiArIHRhZyArICIgd2FzIHJlamVjdGVkIHdpdGggd3JvbmcgZXJyb3IgIiArIGVycm9yLm5hbWUgKyAiLiIpOwogICAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that language tags with invalid subtag sequences are not accepted.","path":"TestCases/intl402/ch06/6.2/6.2.2_c.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTEtMjAxMiBOb3JiZXJ0IExpbmRlbmJlcmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBsYW5ndWFnZSB0YWdzIGFyZSBjYW5vbmljYWxpemVkIGluIHJldHVybiB2YWx1ZXMuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp2YXIgY2Fub25pY2FsaXplZFRhZ3MgPSB7CiAgICAiZGUiOiBbImRlIl0sCiAgICAiZGUtREUiOiBbImRlLURFIiwgImRlIl0sCiAgICAiREUtZGUiOiBbImRlLURFIiwgImRlIl0sCiAgICAiY21uIjogWyJjbW4iXSwKICAgICJDTU4taEFOUyI6IFsiY21uLUhhbnMiLCAiY21uIl0sCiAgICAiY21uLWhhbnMtY24iOiBbImNtbi1IYW5zLUNOIiwgImNtbi1IYW5zIiwgImNtbiJdLAogICAgImVzLTQxOSI6IFsiZXMtNDE5IiwgImVzIl0sCiAgICAiZXMtNDE5LXUtbnUtbGF0biI6IFsiZXMtNDE5LXUtbnUtbGF0biIsICJlcy00MTkiLCAiZXMiLCAiZXMtdS1udS1sYXRuIl0sCiAgICAvLyAtdS1jYSBpcyBpbmNvbXBsZXRlLCBzbyBpdCB3aWxsIG5vdCBzaG93IHVwIGluIHJlc29sdmVkT3B0aW9ucygpLmxvY2FsZQogICAgImNtbi1oYW5zLWNuLXUtY2EtdC1jYS14LXQtdSI6IFsiY21uLUhhbnMtQ04tdC1jYS11LWNhLXgtdC11IiwgImNtbi1IYW5zLUNOLXQtY2EteC10LXUiLCAiY21uLUhhbnMtQ04tdC1jYS14LXQiLCAiY21uLUhhbnMtQ04tdC1jYSIsICJjbW4tSGFucy1DTiIsICJjbW4tSGFucyIsICJjbW4iXSwKICAgICJlbm9jaGlhbi1lbm9jaGlhbiI6IFsiZW5vY2hpYW4tZW5vY2hpYW4iLCAiZW5vY2hpYW4iXSwKICAgICJkZS1ncmVnb3J5LXUtY2EtZ3JlZ29yeSI6IFsiZGUtZ3JlZ29yeS11LWNhLWdyZWdvcnkiLCAiZGUtZ3JlZ29yeSIsICJkZS11LWNhLWdyZWdvcnkiLCAiZGUiXSwKICAgICJuby1ueW4iOiBbIm5uIl0sCiAgICAiaS1rbGluZ29uIjogWyJ0bGgiXSwKICAgICJzZ24tR1IiOiBbImdzcyJdLAogICAgImppIjogWyJ5aSJdLAogICAgImRlLUREIjogWyJkZS1ERSIsICJkZSJdLAogICAgInpoLWhhay1DTiI6IFsiaGFrLUNOIiwgImhhayJdLAogICAgInNnbi1pbHMiOiBbImlscyJdLAogICAgImluIjogWyJpZCJdCn07CgovLyBtYWtlIHN1cmUgdGhlIGRhdGEgYWJvdmUgaXMgY29ycmVjdApPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjYW5vbmljYWxpemVkVGFncykuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7CiAgICBjYW5vbmljYWxpemVkVGFnc1t0YWddLmZvckVhY2goZnVuY3Rpb24gKGNhbm9uaWNhbFRhZykgewogICAgICAgIGlmICghaXNDYW5vbmljYWxpemVkU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyhjYW5vbmljYWxUYWcpKSB7CiAgICAgICAgICAgICRFUlJPUigiVGVzdCBkYXRhIFwiIiArIGNhbm9uaWNhbFRhZyArICJcIiBpcyBub3QgY2Fub25pY2FsaXplZCBhbmQgc3RydWN0dXJhbGx5IHZhbGlkIGxhbmd1YWdlIHRhZy4iKTsKICAgICAgICB9CiAgICB9KTsKfSk7CgovLyBub3cgdGhlIGFjdHVhbCB0ZXN0CnRlc3RXaXRoSW50bENvbnN0cnVjdG9ycyhmdW5jdGlvbiAoQ29uc3RydWN0b3IpIHsKICAgIHZhciBkZWZhdWx0TG9jYWxlID0gbmV3IENvbnN0cnVjdG9yKCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2Fub25pY2FsaXplZFRhZ3MpLmZvckVhY2goZnVuY3Rpb24gKHRhZykgewogICAgICAgIC8vIHVzZSBsb29rdXAgbG9jYWxlIG1hdGNoZXIgdG8ga2VlcCB0aGUgc2V0IG9mIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgcHJlZGljdGFibGUKCiAgICAgICAgLy8gVmFyaWFudCAxOiBjb25zdHJ1Y3QgYW4gb2JqZWN0IGFuZCBzZWUgd2hldGhlciBpdHMgbG9jYWxlIGlzIGNhbm9uaWNhbGl6ZWQuCiAgICAgICAgLy8gSW4gdGhpcyB2YXJpYW50LCBzaG9ydGVuZWQgZm9ybXMgb3IgdGhlIGRlZmF1bHQgbG9jYWxlIG1heSBiZSByZXR1cm5lZAogICAgICAgIHZhciBvYmplY3QgPSBuZXcgQ29uc3RydWN0b3IoW3RhZ10sIHtsb2NhbGVNYXRjaGVyOiAibG9va3VwIn0pOwogICAgICAgIHZhciBsb2NhbGUgPSBvYmplY3QucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgICAgIGlmIChjYW5vbmljYWxpemVkVGFnc1t0YWddLmluZGV4T2YobG9jYWxlKSA9PT0gLTEgJiYgbG9jYWxlICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAgICAgICAgICRFUlJPUigiRm9yICIgKyB0YWcgKyAiIGdvdCAiICsgbG9jYWxlICsgIjsgZXhwZWN0ZWQgb25lIG9mICIgKwogICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFRhZ3NbdGFnXS5qb2luKCIsICIpICsgIi4iKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVmFyaWFudCAyOiBnZXQgdGhlIHN1cHBvcnRlZCBsb2NhbGVzLiBJZiB0aGUgdGFnIGlzIHN1cHBvcnRlZCwgaXQgc2hvdWxkIGJlIHJldHVybmVkIGNhbm9uaWNhbGl6ZWQgYnV0IHVuc2hvcnRlbmVkCiAgICAgICAgdmFyIHN1cHBvcnRlZCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbdGFnXSk7CiAgICAgICAgaWYgKHN1cHBvcnRlZC5sZW5ndGggPiAwICYmIHN1cHBvcnRlZFswXSAhPT0gY2Fub25pY2FsaXplZFRhZ3NbdGFnXVswXSkgewogICAgICAgICAgICAkRVJST1IoIkZvciAiICsgdGFnICsgIiBnb3QgIiArIHN1cHBvcnRlZFswXSArICI7IGV4cGVjdGVkICIgKwogICAgICAgICAgICAgICAgY2Fub25pY2FsaXplZFRhZ3NbdGFnXVswXSArICIuIik7CiAgICAgICAgfSAgICAgICAgICAgIAogICAgfSk7CiAgICByZXR1cm4gdHJ1ZTsKfSk7Cgo=","commentary":"","description":"Tests that language tags are canonicalized in return values.","path":"TestCases/intl402/ch06/6.2/6.2.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBkZWZhdWx0IGxvY2FsZSBpcyBhIFN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlCiAqIHN0cnVjdHVyYWxseSB2YWxpZCBhbmQgY2Fub25pY2FsaXplZCBCQ1AgNDcgbGFuZ3VhZ2UgdGFnLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0SW50bC5qcyIpOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgQ29uc3RydWN0b3IoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CiAgICBpZiAoIWlzQ2Fub25pY2FsaXplZFN0cnVjdHVyYWxseVZhbGlkTGFuZ3VhZ2VUYWcoZGVmYXVsdExvY2FsZSkpIHsKICAgICAgICAkRVJST1IoIkRlZmF1bHQgbG9jYWxlIFwiIiArIGRlZmF1bHRMb2NhbGUgKyAiXCIgaXMgbm90IGNhbm9uaWNhbGl6ZWQgYW5kIHN0cnVjdHVyYWxseSB2YWxpZCBsYW5ndWFnZSB0YWcuIik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKfSk7Cgo=","commentary":"","description":"Tests that the default locale is a String value representing the\nstructurally valid and canonicalized BCP 47 language tag.","path":"TestCases/intl402/ch06/6.2/6.2.4.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHdlbGwtZm9ybWVkIGN1cnJlbmN5IGNvZGVzIGFyZSBhY2NlcHRlZC4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgp2YXIgd2VsbEZvcm1lZEN1cnJlbmN5Q29kZXMgPSBbCiAgICAiQk9CIiwKICAgICJFVVIiLAogICAgInVzZCIsIC8vIGN1cnJlbmN5IGNvZGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCiAgICAiWGRSIiwKICAgICJ4VHMiCl07Cgp3ZWxsRm9ybWVkQ3VycmVuY3lDb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7CiAgICAvLyB0aGlzIG11c3Qgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgYSB2YWxpZCBjdXJyZW5jeSBjb2RlCiAgICB2YXIgZm9ybWF0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFsiZGUtZGUiXSwge3N0eWxlOiAiY3VycmVuY3kiLCBjdXJyZW5jeTogY29kZX0pOwogICAgaWYgKGZvcm1hdC5yZXNvbHZlZE9wdGlvbnMoKS5jdXJyZW5jeSAhPT0gY29kZS50b1VwcGVyQ2FzZSgpKSB7CiAgICAgICAgJEVSUk9SKCJDdXJyZW5jeSAiICsgY29kZSArICIgd2FzIG5vdCBjb3JyZWN0bHkgYWNjZXB0ZWQ7IHR1cm5lZCBpbnRvICIgKwogICAgICAgICAgICBmb3JtYXQucmVzb2x2ZWRPcHRpb25zKCkuY3VycmVuY3kgKyAiLiIpOwogICAgfQp9KTsKCg==","commentary":"","description":"Tests that well-formed currency codes are accepted.","path":"TestCases/intl402/ch06/6.3/6.3.1_a.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGludmFsaWQgY3VycmVuY3kgY29kZXMgYXJlIG5vdCBhY2NlcHRlZC4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgp2YXIgaW52YWxpZEN1cnJlbmN5Q29kZXMgPSBbCiAgICAi4oKsIiwKICAgICIkIiwKICAgICJTRnIuIiwKICAgICJETSIsCiAgICAiS1LigqkiLAogICAgIjcwMiIsCiAgICAiw59QIiwKICAgICLEsW5yIgpdOwoKaW52YWxpZEN1cnJlbmN5Q29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkgewogICAgdmFyIGVycm9yOwogICAgdHJ5IHsKICAgICAgICAvLyB0aGlzIG11c3QgdGhyb3cgYW4gZXhjZXB0aW9uIGZvciBhbiBpbnZhbGlkIGN1cnJlbmN5IGNvZGUKICAgICAgICB2YXIgZm9ybWF0ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KFsiZGUtZGUiXSwge3N0eWxlOiAiY3VycmVuY3kiLCBjdXJyZW5jeTogY29kZX0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGVycm9yID0gZTsKICAgIH0KICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgJEVSUk9SKCJJbnZhbGlkIGN1cnJlbmN5IGNvZGUgIiArIGNvZGUgKyAiIHdhcyBub3QgcmVqZWN0ZWQuIik7CiAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgIT09ICJSYW5nZUVycm9yIikgewogICAgICAgICRFUlJPUigiSW52YWxpZCBjdXJyZW5jeSBjb2RlICIgKyBjb2RlICsgIiB3YXMgcmVqZWN0ZWQgd2l0aCB3cm9uZyBlcnJvciAiICsgZXJyb3IubmFtZSArICIuIik7CiAgICB9Cn0pOwoK","commentary":"","description":"Tests that invalid currency codes are not accepted.","path":"TestCases/intl402/ch06/6.3/6.3.1_b.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHZhbGlkIHRpbWUgem9uZSBuYW1lcyBhcmUgYWNjZXB0ZWQuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKdmFyIHZhbGlkVGltZVpvbmVOYW1lcyA9IFsKICAgICJVVEMiLAogICAgInV0YyIgLy8gdGltZSB6b25lIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCl07Cgp2YWxpZFRpbWVab25lTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgewogICAgLy8gdGhpcyBtdXN0IG5vdCB0aHJvdyBhbiBleGNlcHRpb24gZm9yIGEgdmFsaWQgdGltZSB6b25lIG5hbWUKICAgIHZhciBmb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbImRlLWRlIl0sIHt0aW1lWm9uZTogbmFtZX0pOwogICAgaWYgKGZvcm1hdC5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSAhPT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7CiAgICAgICAgJEVSUk9SKCJUaW1lIHpvbmUgbmFtZSAiICsgbmFtZSArICIgd2FzIG5vdCBjb3JyZWN0bHkgYWNjZXB0ZWQ7IHR1cm5lZCBpbnRvICIgKwogICAgICAgICAgICBmb3JtYXQucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmUgKyAiLiIpOwogICAgfQp9KTsKCg==","commentary":"","description":"Tests that valid time zone names are accepted.","path":"TestCases/intl402/ch06/6.4/6.4_a.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGludmFsaWQgdGltZSB6b25lIG5hbWVzIGFyZSBub3QgYWNjZXB0ZWQuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKdmFyIGludmFsaWRUaW1lWm9uZU5hbWVzID0gWwogICAgIiIsCiAgICAiTUVaIiwgLy8gbG9jYWxpemVkIGFiYnJldmlhdGlvbgogICAgIlBhY2lmaWMgVGltZSIsIC8vIGxvY2FsaXplZCBsb25nIGZvcm0KICAgICJjbnNoYSIsIC8vIEJDUCA0NyB0aW1lIHpvbmUgY29kZQogICAgImludmFsaWQiLCAvLyBhcyB0aGUgbmFtZSBzYXlzCiAgICAiRXVyb3BlL8Swc3RhbmJ1bCIsIC8vIG5vbi1BU0NJSSBsZXR0ZXIKICAgICJhc8SxYS9iYWt1IiwgLy8gbm9uLUFTQ0lJIGxldHRlcgogICAgImV1cm9wZS9icnXDn2VscyIgIC8vIG5vbi1BU0NJSSBsZXR0ZXIKXTsKCmludmFsaWRUaW1lWm9uZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKICAgIHZhciBlcnJvcjsKICAgIHRyeSB7CiAgICAgICAgLy8gdGhpcyBtdXN0IHRocm93IGFuIGV4Y2VwdGlvbiBmb3IgYW4gaW52YWxpZCB0aW1lIHpvbmUgbmFtZQogICAgICAgIHZhciBmb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChbImRlLWRlIl0sIHt0aW1lWm9uZTogbmFtZX0pOwogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGVycm9yID0gZTsKICAgIH0KICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgJEVSUk9SKCJJbnZhbGlkIHRpbWUgem9uZSBuYW1lICIgKyBuYW1lICsgIiB3YXMgbm90IHJlamVjdGVkLiIpOwogICAgfSBlbHNlIGlmIChlcnJvci5uYW1lICE9PSAiUmFuZ2VFcnJvciIpIHsKICAgICAgICAkRVJST1IoIkludmFsaWQgdGltZSB6b25lIG5hbWUgIiArIG5hbWUgKyAiIHdhcyByZWplY3RlZCB3aXRoIHdyb25nIGVycm9yICIgKyBlcnJvci5uYW1lICsgIi4iKTsKICAgIH0KfSk7Cgo=","commentary":"","description":"Tests that invalid time zone names are not accepted.","path":"TestCases/intl402/ch06/6.4/6.4_b.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGFkZGl0aW9uYWwgdGltZSB6b25lIG5hbWVzLCBpZiBhY2NlcHRlZCwgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCi8vIGNhbm9uaWNhbGl6YXRpb24gc3BlY2lmaWVkIGluIGNvbmZvcm1hbmNlIGNsYXVzZQp2YXIgYWRkaXRpb25hbFRpbWVab25lTmFtZXMgPSB7CiAgICAiRXRjL0dNVCI6ICJVVEMiLAogICAgIkdyZWVud2ljaCI6ICJVVEMiLAogICAgIlBSQyI6ICJBc2lhL1NoYW5naGFpIiwKICAgICJBbUVySWNBL0xvU19hTmdFbEVzIjogIkFtZXJpY2EvTG9zX0FuZ2VsZXMiLAogICAgImV0Yy9nbXQrNyI6ICJFdGMvR01UKzciCn07CgpPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhZGRpdGlvbmFsVGltZVpvbmVOYW1lcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgewogICAgdmFyIGZvcm1hdCwgZXJyb3I7CiAgICB0cnkgewogICAgICAgIGZvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFtdLCB7dGltZVpvbmU6IG5hbWV9KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBlcnJvciA9IGU7CiAgICB9CiAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHZhciBhY3R1YWwgPSBmb3JtYXQucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7CiAgICAgICAgdmFyIGV4cGVjdGVkID0gYWRkaXRpb25hbFRpbWVab25lTmFtZXMubmFtZTsKICAgICAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkgewogICAgICAgICAgICAkRVJST1IoIlRpbWUgem9uZSBuYW1lICIgKyBuYW1lICsgIiB3YXMgYWNjZXB0ZWQsIGJ1dCBpbmNvcnJlY3RseSBjYW5vbmljYWxpemVkIHRvICIgKwogICAgICAgICAgICAgICAgYWN0dWFsICsgIjsgZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIi4iKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgIT09ICJSYW5nZUVycm9yIikgewogICAgICAgICRFUlJPUigiVGltZSB6b25lIG5hbWUgIiArIG5hbWUgKyAiIHdhcyByZWplY3RlZCB3aXRoIHdyb25nIGVycm9yICIgKyBlcnJvci5uYW1lICsgIi4iKTsKICAgIH0KfSk7Cgo=","commentary":"","description":"Tests that additional time zone names, if accepted, are handled correctly.","path":"TestCases/intl402/ch06/6.4/6.4_c.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLCBmYWxzZSwgZmFsc2UsIFsiQ29sbGF0b3IiLCAiTnVtYmVyRm9ybWF0IiwgIkRhdGVUaW1lRm9ybWF0Il0pOwoK","commentary":"","description":"Tests that Intl\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch08/8.0/8.0_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGRlZmF1bHQgbG9jYWxlIGlzIGF2YWlsYWJsZS4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRlc3RXaXRoSW50bENvbnN0cnVjdG9ycyhmdW5jdGlvbiAoQ29uc3RydWN0b3IpIHsKICAgIHZhciBkZWZhdWx0TG9jYWxlID0gbmV3IENvbnN0cnVjdG9yKCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgdmFyIHN1cHBvcnRlZExvY2FsZXMgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGVdKTsKICAgIGlmIChzdXBwb3J0ZWRMb2NhbGVzLmluZGV4T2YoZGVmYXVsdExvY2FsZSkgPT09IC0xKSB7CiAgICAgICAgJEVSUk9SKCJEZWZhdWx0IGxvY2FsZSBpcyBub3QgcmVwb3J0ZWQgYXMgYXZhaWxhYmxlLiIpOwogICAgfQp9KTsKCg==","commentary":"","description":"Tests that default locale is available.","path":"TestCases/intl402/ch09/9.1/9.1_a.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGFwcHJvcHJpYXRlIGZhbGxiYWNrIGxvY2FsZXMgYXJlIHByb3ZpZGVkIGZvcgogKiAgICAgc3VwcG9ydGVkIGxvY2FsZXMuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICB2YXIgaW5mbyA9IGdldExvY2FsZVN1cHBvcnRJbmZvKENvbnN0cnVjdG9yKTsKICAgIHZhciBmYWxsYmFjazsKICAgIGluZm8uc3VwcG9ydGVkLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkgewogICAgICAgIHZhciBwb3MgPSBsb2NhbGUubGFzdEluZGV4T2YoIi0iKTsKICAgICAgICBpZiAocG9zICE9PSAtMSkgewogICAgICAgICAgICBmYWxsYmFjayA9IGxvY2FsZS5zdWJzdHJpbmcoMCwgcG9zKTsKICAgICAgICAgICAgaWYgKGluZm8uc3VwcG9ydGVkLmluZGV4T2YoZmFsbGJhY2spID09PSAtMSkgewogICAgICAgICAgICAgICAgJEVSUk9SKCJMb2NhbGUgIiArIGxvY2FsZSArICIgaXMgc3VwcG9ydGVkLCBidXQgZmFsbGJhY2sgIiArIGZhbGxiYWNrICsgIiBpc24ndC4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbWF0Y2ggPSAvKFthLXpdezIsM30pKC1bQS1aXVthLXpdezN9KSgtW0EtWl17Mn0pLy5leGVjKGxvY2FsZSk7CiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7CiAgICAgICAgICAgIGZhbGxiYWNrID0gbWF0Y2hbMV0gKyBtYXRjaFszXTsKICAgICAgICAgICAgaWYgKGluZm8uc3VwcG9ydGVkLmluZGV4T2YoZmFsbGJhY2spID09PSAtMSkgewogICAgICAgICAgICAgICAgJEVSUk9SKCJMb2NhbGUgIiArIGxvY2FsZSArICIgaXMgc3VwcG9ydGVkLCBidXQgZmFsbGJhY2sgIiArIGZhbGxiYWNrICsgIiBpc24ndC4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9KTsKCg==","commentary":"","description":"Tests that appropriate fallback locales are provided for\n supported locales.","path":"TestCases/intl402/ch09/9.1/9.1_b.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGNhbm9uaWNhbGl6YXRpb24gb2YgbG9jYWxlIGxpc3RzIHRyZWF0cyB1bmRlZmluZWQgYW5kIGVtcHR5IGxpc3RzIHRoZSBzYW1lLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0SW50bC5qcyIpOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFyIHN1cHBvcnRlZEZvclVuZGVmaW5lZCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZih1bmRlZmluZWQpOwogICAgdmFyIHN1cHBvcnRlZEZvckVtcHR5TGlzdCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbXSk7CiAgICBpZiAoc3VwcG9ydGVkRm9yVW5kZWZpbmVkLmxlbmd0aCAhPT0gc3VwcG9ydGVkRm9yRW1wdHlMaXN0Lmxlbmd0aCkgewogICAgICAgICRFUlJPUigiU3VwcG9ydGVkIGxvY2FsZXMgZGlmZmVyIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBlbXB0eSBsaXN0IGlucHV0LiIpOwogICAgfQogICAgLy8gd2UgZG9uJ3QgY29tcGFyZSB0aGUgZWxlbWVudHMgYmVjYXVzZSBsZW5ndGggc2hvdWxkIGJlIDAgLSBsZXQncyBqdXN0IHZlcmlmeSB0aGF0CiAgICBpZiAoc3VwcG9ydGVkRm9yVW5kZWZpbmVkLmxlbmd0aCAhPT0gMCkgewogICAgICAgICRFUlJPUigiSW50ZXJuYWwgdGVzdCBlcnJvcjogQXNzdW1wdGlvbiBhYm91dCBsZW5ndGggYmVpbmcgMCBpcyBpbnZhbGlkLiIpOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that canonicalization of locale lists treats undefined and empty lists the same.","path":"TestCases/intl402/ch09/9.2/9.2.1_1.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBiZWhhdmlvciBvZiBhIExpc3QgaXMgbm90IGFmZmVjdGVkIGJ5IGFkdmVyc2FyaWFsCiAqICAgICBjaGFuZ2VzIHRvIEFycmF5LnByb3RvdHlwZS4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRhaW50QXJyYXkoKTsKCnRlc3RXaXRoSW50bENvbnN0cnVjdG9ycyhmdW5jdGlvbiAoQ29uc3RydWN0b3IpIHsKICAgIHZhciBkZWZhdWx0TG9jYWxlID0gbmV3IENvbnN0cnVjdG9yKCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgdmFyIGNhbm9uaWNhbGl6ZWQgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGUsIGRlZmF1bHRMb2NhbGVdKTsKICAgIGlmIChjYW5vbmljYWxpemVkLmxlbmd0aCA+IDEpIHsKICAgICAgICAkRVJST1IoIkNhbm9uaWNhbGl6YXRpb24gZGlkbid0IHJlbW92ZSBkdXBsaWNhdGUgbGFuZ3VhZ2UgdGFncyBmcm9tIGxvY2FsZSBsaXN0LiIpOwogICAgfQp9KTsKCg==","commentary":"","description":"Tests that the behavior of a List is not affected by adversarial\n changes to Array.prototype.","path":"TestCases/intl402/ch09/9.2/9.2.1_2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGEgc2luZ2xlIHN0cmluZyBpbnN0ZWFkIG9mIGEgbG9jYWxlIGxpc3QgaXMgdHJlYXRlZAogKiAgICAgYXMgdGhlIGxvY2FsZSBsaXN0IGNvbnRhaW5pbmcgdGhhdCBzdHJpbmcuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp2YXIgdmFsaWRBbmRJbnZhbGlkTGFuZ3VhZ2VUYWdzID0gWwogICAgImRlIiwgLy8gSVNPIDYzOSBsYW5ndWFnZSBjb2RlCiAgICAiZGUtREUiLCAvLyArIElTTyAzMTY2LTEgY291bnRyeSBjb2RlCiAgICAiREUtZGUiLCAvLyB0YWdzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCiAgICAiY21uIiwgLy8gSVNPIDYzOSBsYW5ndWFnZSBjb2RlCiAgICAiY21uLUhhbnMiLCAvLyArIHNjcmlwdCBjb2RlCiAgICAiQ01OLWhBTlMiLCAvLyB0YWdzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCiAgICAiY21uLWhhbnMtY24iLCAvLyArIElTTyAzMTY2LTEgY291bnRyeSBjb2RlCiAgICAiZXMtNDE5IiwgLy8gKyBVTiBNLjQ5IHJlZ2lvbiBjb2RlCiAgICAiZXMtNDE5LXUtbnUtbGF0bi1jdS1ib2IiLCAvLyArIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBzZXF1ZW5jZQogICAgImkta2xpbmdvbiIsIC8vIGdyYW5kZmF0aGVyZWQgdGFnCiAgICAiY21uLWhhbnMtY24tdC1jYS11LWNhLXgtdC11IiwgLy8gc2luZ2xldG9uIHN1YnRhZ3MgY2FuIGFsc28gYmUgdXNlZCBhcyBwcml2YXRlIHVzZSBzdWJ0YWdzCiAgICAiZW5vY2hpYW4tZW5vY2hpYW4iLCAvLyBsYW5ndWFnZSBhbmQgdmFyaWFudCBzdWJ0YWdzIG1heSBiZSB0aGUgc2FtZQogICAgImRlLWdyZWdvcnktdS1jYS1ncmVnb3J5IiwgLy8gdmFyaWFudCBhbmQgZXh0ZW5zaW9uIHN1YnRhZ3MgbWF5IGJlIHRoZSBzYW1lCiAgICAiZGVfREUiLAogICAgIkRFX2RlIiwKICAgICJjbW5fSGFucyIsCiAgICAiY21uLWhhbnNfY24iLAogICAgImVzXzQxOSIsCiAgICAiZXMtNDE5LXUtbnUtbGF0bi1jdV9ib2IiLAogICAgImlfa2xpbmdvbiIsCiAgICAiY21uLWhhbnMtY24tdC1jYS11LWNhLXhfdC11IiwKICAgICJlbm9jaGlhbl9lbm9jaGlhbiIsCiAgICAiZGUtZ3JlZ29yeV91LWNhLWdyZWdvcnkiLAogICAgImkiLCAvLyBzaW5nbGV0b24gYWxvbmUKICAgICJ4IiwgLy8gcHJpdmF0ZSB1c2Ugd2l0aG91dCBzdWJ0YWcKICAgICJ1IiwgLy8gZXh0ZW5zaW9uIHNpbmdsZXRvbiBpbiBmaXJzdCBwbGFjZQogICAgIjQxOSIsIC8vIHJlZ2lvbiBjb2RlIGluIGZpcnN0IHBsYWNlCiAgICAidS1udS1sYXRuLWN1LWJvYiIsIC8vIGV4dGVuc2lvbiBzZXF1ZW5jZSB3aXRob3V0IGxhbmd1YWdlCiAgICAiaGFucy1jbW4tY24iLCAvLyAiaGFucyIgY291bGQgdGhlb3JldGljYWxseSBiZSBhIDQtbGV0dGVyIGxhbmd1YWdlIGNvZGUsCiAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhvc2UgY2FuJ3QgYmUgZm9sbG93ZWQgYnkgZXh0bGFuZyBjb2Rlcy4KICAgICJjbW4taGFucy1jbi11LXUiLCAvLyBkdXBsaWNhdGUgc2luZ2xldG9uCiAgICAiY21uLWhhbnMtY24tdC11LWNhLXUiLCAvLyBkdXBsaWNhdGUgc2luZ2xldG9uCiAgICAiZGUtZ3JlZ29yeS1ncmVnb3J5IiAvLyBkdXBsaWNhdGUgdmFyaWFudApdOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFsaWRBbmRJbnZhbGlkTGFuZ3VhZ2VUYWdzLmZvckVhY2goZnVuY3Rpb24gKGxvY2FsZSkgewogICAgICAgIHZhciBvYmoxLCBvYmoyLCBsb2NhbGUxLCBsb2NhbGUyLCBlcnJvcjEsIGVycm9yMjsKICAgICAgICB0cnkgewogICAgICAgICAgICBvYmoxID0gbmV3IENvbnN0cnVjdG9yKGxvY2FsZSk7CiAgICAgICAgICAgIGxvY2FsZTEgPSBvYmoxLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGVycm9yMSA9IGU7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIG9iajIgPSBuZXcgQ29uc3RydWN0b3IoW2xvY2FsZV0pOwogICAgICAgICAgICBsb2NhbGUyID0gb2JqMi5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBlcnJvcjIgPSBlOwogICAgICAgIH0KCiAgICAgICAgaWYgKChlcnJvcjEgPT09IHVuZGVmaW5lZCkgIT09IChlcnJvcjIgPT09IHVuZGVmaW5lZCkpIHsKICAgICAgICAgICAgaWYgKGVycm9yMSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAkRVJST1IoIlNpbmdsZSBsb2NhbGUgc3RyaW5nICIgKyBsb2NhbGUgKwogICAgICAgICAgICAgICAgICAgICIgd2FzIGFjY2VwdGVkLCBidXQgbG9jYWxlIGxpc3QgY29udGFpbmluZyB0aGF0IHN0cmluZyB3YXNuJ3QuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkRVJST1IoIlNpbmdsZSBsb2NhbGUgc3RyaW5nICIgKyBsb2NhbGUgKwogICAgICAgICAgICAgICAgICAgICIgd2FzIHJlamVjdGVkLCBidXQgbG9jYWxlIGxpc3QgY29udGFpbmluZyB0aGF0IHN0cmluZyB3YXNuJ3QuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGVycm9yMSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAobG9jYWxlMSAhPT0gbG9jYWxlMikgewogICAgICAgICAgICAgICAgJEVSUk9SKCJTaW5nbGUgbG9jYWxlIHN0cmluZyAiICsgbG9jYWxlICsgIiByZXN1bHRzIGluICIgKyBsb2NhbGUxICsKICAgICAgICAgICAgICAgICAgICAiLCBidXQgbG9jYWxlIGxpc3QgWyIgKyBsb2NhbGUgKyAiXSByZXN1bHRzIGluICIgKyBsb2NhbGUyICsgIi4iKTsKICAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoZXJyb3IxLm5hbWUgIT09IGVycm9yMi5uYW1lKSB7CiAgICAgICAgICAgICAgICAkRVJST1IoIlNpbmdsZSBsb2NhbGUgc3RyaW5nICIgKyBsb2NhbGUgKyAiIHJlc3VsdHMgaW4gZXJyb3IgIiArIGVycm9yMS5uYW1lICsKICAgICAgICAgICAgICAgICAgICAiLCBidXQgbG9jYWxlIGxpc3QgWyIgKyBsb2NhbGUgKyAiXSByZXN1bHRzIGluIGVycm9yICIgKyBlcnJvcjIubmFtZSArICIuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that a single string instead of a locale list is treated\n as the locale list containing that string.","path":"TestCases/intl402/ch09/9.2/9.2.1_3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IG5vbi1vYmplY3RzIGFyZSBjb252ZXJ0ZWQgdG8gb2JqZWN0cyBiZWZvcmUgY2Fub25pY2FsaXphdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRlc3RXaXRoSW50bENvbnN0cnVjdG9ycyhmdW5jdGlvbiAoQ29uc3RydWN0b3IpIHsKICAgIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkKICAgIAogICAgLy8gbnVsbCBzaG91bGQgcmVzdWx0IGluIGEgVHlwZUVycm9yCiAgICB2YXIgZXJyb3I7CiAgICB0cnkgewogICAgICAgIHZhciBzdXBwb3J0ZWRGb3JOdWxsID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKG51bGwpOwogICAgfSBjYXRjaCAoZSkgewogICAgICAgIGVycm9yID0gZTsKICAgIH0KICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgJEVSUk9SKCJOdWxsIGFzIGxvY2FsZSBsaXN0IHdhcyBub3QgcmVqZWN0ZWQuIik7CiAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgIT09ICJUeXBlRXJyb3IiKSB7CiAgICAgICAgJEVSUk9SKCJOdWxsIGFzIGxvY2FsZSBsaXN0IHdhcyByZWplY3RlZCB3aXRoIHdyb25nIGVycm9yICIgKyBlcnJvci5uYW1lICsgIi4iKTsKICAgIH0gICAgCiAgICAKICAgIC8vIGxldCdzIHVzZSBhbiBlbXB0eSBsaXN0IGZvciBjb21wYXJpc29uCiAgICB2YXIgc3VwcG9ydGVkRm9yRW1wdHlMaXN0ID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtdKTsKICAgIC8vIHdlIGRvbid0IGNvbXBhcmUgdGhlIGVsZW1lbnRzIGJlY2F1c2UgbGVuZ3RoIHNob3VsZCBiZSAwIC0gbGV0J3MganVzdCB2ZXJpZnkgdGhhdAogICAgaWYgKHN1cHBvcnRlZEZvckVtcHR5TGlzdC5sZW5ndGggIT09IDApIHsKICAgICAgICAkRVJST1IoIkludGVybmFsIHRlc3QgZXJyb3I6IEFzc3VtcHRpb24gYWJvdXQgbGVuZ3RoIGJlaW5nIDAgaXMgaW52YWxpZC4iKTsKICAgIH0KCiAgICAvLyBtb3N0IG5vbi1vYmplY3RzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgZW1wdHkgbGlzdHMgYmVjYXVzZSBhIG1pc3NpbmcgbGVuZ3RoIHByb3BlcnR5IGlzIGludGVycHJldGVkIGFzIDAKICAgIHZhciBzdXBwb3J0ZWRGb3JOdW1iZXIgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoNSk7CiAgICBpZiAoc3VwcG9ydGVkRm9yTnVtYmVyLmxlbmd0aCAhPT0gc3VwcG9ydGVkRm9yRW1wdHlMaXN0Lmxlbmd0aCkgewogICAgICAgICRFUlJPUigiU3VwcG9ydGVkIGxvY2FsZXMgZGlmZmVyIGJldHdlZW4gbnVtZXJpYyBhbmQgZW1wdHkgbGlzdCBpbnB1dC4iKTsKICAgIH0KICAgIHZhciBzdXBwb3J0ZWRGb3JCb29sZWFuID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKHRydWUpOwogICAgaWYgKHN1cHBvcnRlZEZvckJvb2xlYW4ubGVuZ3RoICE9PSBzdXBwb3J0ZWRGb3JFbXB0eUxpc3QubGVuZ3RoKSB7CiAgICAgICAgJEVSUk9SKCJTdXBwb3J0ZWQgbG9jYWxlcyBkaWZmZXIgYmV0d2VlbiBib29sZWFuIGFuZCBlbXB0eSBsaXN0IGlucHV0LiIpOwogICAgfQogICAgCiAgICByZXR1cm4gdHJ1ZTsKfSk7Cgo=","commentary":"","description":"Tests that non-objects are converted to objects before canonicalization.","path":"TestCases/intl402/ch09/9.2/9.2.1_4.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHZhbHVlcyBvdGhlciB0aGFuIHN0cmluZ3MgYXJlIG5vdCBhY2NlcHRlZCBhcyBsb2NhbGVzLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0SW50bC5qcyIpOwoKdmFyIG5vdFN0cmluZ09yT2JqZWN0ID0gW3VuZGVmaW5lZCwgbnVsbCwgdHJ1ZSwgZmFsc2UsIDAsIDUsIC01LCBOYU5dOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgbm90U3RyaW5nT3JPYmplY3QuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHN1cHBvcnRlZCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbdmFsdWVdKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGVycm9yID0gZTsKICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgJEVSUk9SKCIiICsgdmFsdWUgKyAiIGFzIGxvY2FsZSB3YXMgbm90IHJlamVjdGVkLiIpOwogICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubmFtZSAhPT0gIlR5cGVFcnJvciIpIHsKICAgICAgICAgICAgJEVSUk9SKCIiICsgdmFsdWUgKyAiIGFzIGxvY2FsZSB3YXMgcmVqZWN0ZWQgd2l0aCB3cm9uZyBlcnJvciAiICsgZXJyb3IubmFtZSArICIuIik7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that values other than strings are not accepted as locales.","path":"TestCases/intl402/ch09/9.2/9.2.1_8_c_ii.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGNhbm9uaWNhbGl6YXRpb24gb2YgbG9jYWxlIGxpc3RzIHJlbW92ZXMgZHVwbGljYXRlIGxhbmd1YWdlIHRhZ3MuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICB2YXIgZGVmYXVsdExvY2FsZSA9IG5ldyBDb25zdHJ1Y3RvcigpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgIHZhciBjYW5vbmljYWxpemVkID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtkZWZhdWx0TG9jYWxlLCBkZWZhdWx0TG9jYWxlXSk7CiAgICBpZiAoY2Fub25pY2FsaXplZC5sZW5ndGggPiAxKSB7CiAgICAgICAgJEVSUk9SKCJDYW5vbmljYWxpemF0aW9uIGRpZG4ndCByZW1vdmUgZHVwbGljYXRlIGxhbmd1YWdlIHRhZ3MgZnJvbSBsb2NhbGUgbGlzdC4iKTsKICAgIH0KfSk7Cgo=","commentary":"","description":"Tests that canonicalization of locale lists removes duplicate language tags.","path":"TestCases/intl402/ch09/9.2/9.2.1_8_c_vi.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IGxvY2FsZXMgdGhhdCBhcmUgcmVwb3J0ZWQgYnkgcmVzb2x2ZWRPcHRpb25zCiAqICAgICBhcmUgYWxzbyByZXBvcnRlZCBieSBzdXBwb3J0ZWRMb2NhbGVzT2YuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICB2YXIgaW5mbyA9IGdldExvY2FsZVN1cHBvcnRJbmZvKENvbnN0cnVjdG9yKTsKICAgIC8vIHRoaXMgdGVzdCBzaG91bGQgd29yayBlcXVhbGx5IGZvciBib3RoIG1hdGNoaW5nIGFsZ29yaXRobXMKICAgIFsibG9va3VwIiwgImJlc3QgZml0Il0uZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlcikgewogICAgICAgIHZhciBzdXBwb3J0ZWRCeUNvbnN0cnVjdG9yID0gaW5mby5zdXBwb3J0ZWQuY29uY2F0KGluZm8uYnlGYWxsYmFjayk7CiAgICAgICAgdmFyIHN1cHBvcnRlZCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZihzdXBwb3J0ZWRCeUNvbnN0cnVjdG9yLAogICAgICAgICAgICB7bG9jYWxlTWF0Y2hlcjogbWF0Y2hlcn0pOwogICAgICAgIC8vIHdlIGNvdWxkIGNoZWNrIHRoZSBsZW5ndGggZmlyc3QsIGJ1dCBpdCdzIHByb2JhYmx5IG1vcmUgaW50ZXJlc3Rpbmcgd2hpY2ggbG9jYWxlcyBhcmUgbWlzc2luZwogICAgICAgIHZhciBpID0gMDsKICAgICAgICB2YXIgbGltaXQgPSBNYXRoLm1pbihzdXBwb3J0ZWRCeUNvbnN0cnVjdG9yLmxlbmd0aCwgc3VwcG9ydGVkLmxlbmd0aCk7CiAgICAgICAgd2hpbGUgKGkgPCBsaW1pdCAmJiBzdXBwb3J0ZWRCeUNvbnN0cnVjdG9yW2ldID09PSBzdXBwb3J0ZWRbaV0pIHsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICBpZiAoaSA8IHN1cHBvcnRlZEJ5Q29uc3RydWN0b3IubGVuZ3RoKSB7CiAgICAgICAgICAgICRFUlJPUigiTG9jYWxlICIgKyBzdXBwb3J0ZWRCeUNvbnN0cnVjdG9yW2ldICsKICAgICAgICAgICAgICAgICIgaXMgcmV0dXJuZWQgYnkgcmVzb2x2ZWRPcHRpb25zIGJ1dCBub3QgYnkgc3VwcG9ydGVkTG9jYWxlc09mLiIpOwogICAgICAgIH0gZWxzZSBpZiAoaSA8IHN1cHBvcnRlZC5sZW5ndGgpIHsKICAgICAgICAgICAgJEVSUk9SKCJMb2NhbGUgIiArIHN1cHBvcnRlZFtpXSArCiAgICAgICAgICAgICAgICAiIGlzIHJldHVybmVkIGJ5IHN1cHBvcnRlZExvY2FsZXNPZiBidXQgbm90IGJ5IHJlc29sdmVkT3B0aW9ucy4iKTsKICAgICAgICB9CiAgICB9KTsKICAgIAogICAgLy8gdGhpcyB0ZXN0IGlzIG9ubHkgdmFsaWQgZm9yIGxvb2t1cCAtIGJlc3QgZml0IG1heSBmaW5kIGFkZGl0aW9uYWwgbG9jYWxlcyBzdXBwb3J0ZWQKICAgIHZhciB1bnN1cHBvcnRlZEJ5Q29uc3RydWN0b3IgPSBpbmZvLnVuc3VwcG9ydGVkOwogICAgdmFyIHN1cHBvcnRlZCA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZih1bnN1cHBvcnRlZEJ5Q29uc3RydWN0b3IsCiAgICAgICAgICAgIHtsb2NhbGVNYXRjaGVyOiAibG9va3VwIn0pOwogICAgaWYgKHN1cHBvcnRlZC5sZW5ndGggPiAwKSB7CiAgICAgICAgJEVSUk9SKCJMb2NhbGUgIiArIHN1cHBvcnRlZFswXSArCiAgICAgICAgICAgICIgaXMgcmV0dXJuZWQgYnkgc3VwcG9ydGVkTG9jYWxlc09mIGJ1dCBub3QgYnkgcmVzb2x2ZWRPcHRpb25zLiIpOwogICAgfQoKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that locales that are reported by resolvedOptions\n are also reported by supportedLocalesOf.","path":"TestCases/intl402/ch09/9.2/9.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBiZWhhdmlvciBvZiBhIFJlY29yZCBpcyBub3QgYWZmZWN0ZWQgYnkgYWR2ZXJzYXJpYWwKICogICAgIGNoYW5nZXMgdG8gT2JqZWN0LnByb3RvdHlwZS4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRhaW50UHJvcGVydGllcyhbImxvY2FsZSIsICJleHRlbnNpb24iLCAiZXh0ZW5zaW9uSW5kZXgiXSk7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICB2YXIgbG9jYWxlID0gbmV3IENvbnN0cnVjdG9yKHVuZGVmaW5lZCwge2xvY2FsZU1hdGNoZXI6ICJsb29rdXAifSkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgaWYgKCFpc0Nhbm9uaWNhbGl6ZWRTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKGxvY2FsZSkpIHsKICAgICAgICAkRVJST1IoIkNvbnN0cnVjdG9yIHJldHVybnMgaW52YWxpZCBsb2NhbGUgIiArIGxvY2FsZSArICIuIik7CiAgICB9CgogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that the behavior of a Record is not affected by adversarial\n changes to Object.prototype.","path":"TestCases/intl402/ch09/9.2/9.2.3_5.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTEtMjAxMiBOb3JiZXJ0IExpbmRlbmJlcmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBtaXNzaW5nIFVuaWNvZGUgZXh0ZW5zaW9uIHZhbHVlcyBkZWZhdWx0IHRvIHRydWUgZm9yCiAqICAgICBib29sZWFuIGtleXMuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKdmFyIGV4dGVuc2lvbnMgPSBbIi11LWNvLXBob25lYmsta24iLCAiLXUta24tY28tcGhvbmViayJdOwpleHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24gKGV4dGVuc2lvbikgewogICAgdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5Db2xsYXRvcigpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgIHZhciBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKFtkZWZhdWx0TG9jYWxlICsgZXh0ZW5zaW9uXSwge3VzYWdlOiAic29ydCJ9KTsKICAgIHZhciBsb2NhbGUgPSBjb2xsYXRvci5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CiAgICB2YXIgbnVtZXJpYyA9IGNvbGxhdG9yLnJlc29sdmVkT3B0aW9ucygpLm51bWVyaWM7CiAgICBpZiAobnVtZXJpYyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgaWYgKG51bWVyaWMgIT09IHRydWUpIHsKICAgICAgICAgICAgJEVSUk9SKCJEZWZhdWx0IHZhbHVlIGZvciBcImtuXCIgc2hvdWxkIGJlIHRydWUsIGJ1dCBpcyAiICsgbnVtZXJpYyArICIuIik7CiAgICAgICAgfQogICAgICAgIGlmIChsb2NhbGUuaW5kZXhPZigiLWtuIikgIT09IC0xKSB7CiAgICAgICAgICAgICRFUlJPUigiXCJrblwiIGlzIHJldHVybmVkIGluIGxvY2FsZSwgYnV0IHNob3VsZG4ndCBiZS4iKTsKICAgICAgICB9CiAgICB9Cn0pOwoK","commentary":"","description":"Tests that missing Unicode extension values default to true for\n boolean keys.","path":"TestCases/intl402/ch09/9.2/9.2.5_11_g_ii_2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBiZWhhdmlvciBvZiBhIFJlY29yZCBpcyBub3QgYWZmZWN0ZWQgYnkgYWR2ZXJzYXJpYWwKICogICAgIGNoYW5nZXMgdG8gT2JqZWN0LnByb3RvdHlwZS4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRhaW50UHJvcGVydGllcyhbImRhdGFMb2NhbGUiLCAibnUiLCAiY2EiLCAiY28iLCAibG9jYWxlIl0pOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFyIGxvY2FsZSA9IG5ldyBDb25zdHJ1Y3Rvcih1bmRlZmluZWQsIHtsb2NhbGVNYXRjaGVyOiAibG9va3VwIn0pLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgIGlmICghaXNDYW5vbmljYWxpemVkU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyhsb2NhbGUpKSB7CiAgICAgICAgJEVSUk9SKCJDb25zdHJ1Y3RvciByZXR1cm5zIGludmFsaWQgbG9jYWxlICIgKyBsb2NhbGUgKyAiLiIpOwogICAgfQoKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that the behavior of a Record is not affected by adversarial\n changes to Object.prototype.","path":"TestCases/intl402/ch09/9.2/9.2.5_6.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBiZWhhdmlvciBvZiBhIExpc3QgaXMgbm90IGFmZmVjdGVkIGJ5IGFkdmVyc2FyaWFsCiAqICAgICBjaGFuZ2VzIHRvIEFycmF5LnByb3RvdHlwZS4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEludGwuanMiKTsKCnRhaW50QXJyYXkoKTsKCnRlc3RXaXRoSW50bENvbnN0cnVjdG9ycyhmdW5jdGlvbiAoQ29uc3RydWN0b3IpIHsKICAgIC8vIHRoaXMgdGVzdCBzaG91bGQgd29yayBlcXVhbGx5IGZvciBib3RoIG1hdGNoaW5nIGFsZ29yaXRobXMKICAgIFsibG9va3VwIiwgImJlc3QgZml0Il0uZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlcikgewogICAgICAgIHZhciBkZWZhdWx0TG9jYWxlID0gbmV3IENvbnN0cnVjdG9yKCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwogICAgICAgIHZhciBjYW5vbmljYWxpemVkID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtkZWZhdWx0TG9jYWxlLCBkZWZhdWx0TG9jYWxlXSwKICAgICAgICAgICAge2xvY2FsZU1hdGNoZXI6IG1hdGNoZXJ9KTsKICAgICAgICBpZiAoY2Fub25pY2FsaXplZC5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICRFUlJPUigiQ2Fub25pY2FsaXphdGlvbiB3aXRoIG1hdGNoZXIgIiArIG1hdGNoZXIgKyAiIGRpZG4ndCByZW1vdmUgZHVwbGljYXRlIGxhbmd1YWdlIHRhZ3MgZnJvbSBsb2NhbGUgbGlzdC4iKTsKICAgICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gdHJ1ZTsKfSk7Cgo=","commentary":"","description":"Tests that the behavior of a List is not affected by adversarial\n changes to Array.prototype.","path":"TestCases/intl402/ch09/9.2/9.2.6_2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgcmV0dXJucyBhbiBlbXB0eSBsaXN0IHdoZW4KICogICAgIGdpdmVuIGFuIGVtcHR5IGxpc3QuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICAvLyB0aGlzIHRlc3Qgc2hvdWxkIHdvcmsgZXF1YWxseSBmb3IgYm90aCBtYXRjaGluZyBhbGdvcml0aG1zCiAgICBbImxvb2t1cCIsICJiZXN0IGZpdCJdLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoZXIpIHsKICAgICAgICB2YXIgc3VwcG9ydGVkID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtdLCB7bG9jYWxlTWF0Y2hlcjogbWF0Y2hlcn0pOwogICAgICAgIGlmIChzdXBwb3J0ZWQubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgICRFUlJPUigiU3VwcG9ydGVkTG9jYWxlcyB3aXRoIG1hdGNoZXIgIiArIG1hdGNoZXIgKyAiIHJldHVybmVkIGEgbm9uLWVtcHR5IGxpc3QgZm9yIGFuIGVtcHR5IGxpc3QuIik7CiAgICAgICAgfQogICAgfSk7CgogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that LookupSupportedLocales returns an empty list when\n given an empty list.","path":"TestCases/intl402/ch09/9.2/9.2.6_4.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBzZXF1ZW5jZXMgZG8gbm90IGFmZmVjdAogKiAgICB3aGV0aGVyIGEgbG9jYWxlIGlzIGNvbnNpZGVyZWQgc3VwcG9ydGVkLCBidXQgYXJlIHJlcG9ydGVkIGJhY2suCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICAvLyB0aGlzIHRlc3Qgc2hvdWxkIHdvcmsgZXF1YWxseSBmb3IgYm90aCBtYXRjaGluZyBhbGdvcml0aG1zCiAgICBbImxvb2t1cCIsICJiZXN0IGZpdCJdLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoZXIpIHsKICAgICAgICB2YXIgaW5mbyA9IGdldExvY2FsZVN1cHBvcnRJbmZvKENvbnN0cnVjdG9yKTsKICAgICAgICB2YXIgYWxsTG9jYWxlcyA9IGluZm8uc3VwcG9ydGVkLmNvbmNhdChpbmZvLmJ5RmFsbGJhY2ssIGluZm8udW5zdXBwb3J0ZWQpOwogICAgICAgIGFsbExvY2FsZXMuZm9yRWFjaChmdW5jdGlvbiAobG9jYWxlKSB7CiAgICAgICAgICAgIHZhciB2YWxpZEV4dGVuc2lvbiA9ICItdS1jby1waG9uZWJrLW51LWxhdG4iOwogICAgICAgICAgICB2YXIgaW52YWxpZEV4dGVuc2lvbiA9ICItdS1udS1pbnZhbGlkIjsKICAgICAgICAgICAgdmFyIHN1cHBvcnRlZDEgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2xvY2FsZV0sCiAgICAgICAgICAgICAgICB7bG9jYWxlTWF0Y2hlcjogbWF0Y2hlcn0pOwogICAgICAgICAgICB2YXIgc3VwcG9ydGVkMiA9IENvbnN0cnVjdG9yLnN1cHBvcnRlZExvY2FsZXNPZihbbG9jYWxlICsgdmFsaWRFeHRlbnNpb25dLAogICAgICAgICAgICAgICAge2xvY2FsZU1hdGNoZXI6IG1hdGNoZXJ9KTsKICAgICAgICAgICAgdmFyIHN1cHBvcnRlZDMgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2xvY2FsZSArIGludmFsaWRFeHRlbnNpb25dLAogICAgICAgICAgICAgICAge2xvY2FsZU1hdGNoZXI6IG1hdGNoZXJ9KTsKICAgICAgICAgICAgaWYgKHN1cHBvcnRlZDEubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkMi5sZW5ndGggIT09IDEgfHwgc3VwcG9ydGVkMy5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAkRVJST1IoIlByZXNlbmNlIG9mIFVuaWNvZGUgbG9jYWxlIGV4dGVuc2lvbiBzZXF1ZW5jZSBhZmZlY3RzIHdoZXRoZXIgbG9jYWxlICIgKwogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUgKyAiIGlzIGNvbnNpZGVyZWQgc3VwcG9ydGVkIHdpdGggbWF0Y2hlciAiICsgbWF0Y2hlciArICIuIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkMlswXSAhPT0gbG9jYWxlICsgdmFsaWRFeHRlbnNpb24gfHwgc3VwcG9ydGVkM1swXSAhPT0gbG9jYWxlICsgaW52YWxpZEV4dGVuc2lvbikgewogICAgICAgICAgICAgICAgICAgIGFsZXJ0KGxvY2FsZSArICI7ICIgKyBzdXBwb3J0ZWQyWzBdICsgIjsgIiArIHN1cHBvcnRlZDNbMF0pOwogICAgICAgICAgICAgICAgICAgICRFUlJPUigiVW5pY29kZSBsb2NhbGUgZXh0ZW5zaW9uIHNlcXVlbmNlIGlzIG5vdCBjb3JyZWN0bHkgcmV0dXJuZWQgZm9yIGxvY2FsZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlICsgIiB3aXRoIG1hdGNoZXIgIiArIG1hdGNoZXIgKyAiLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZDIubGVuZ3RoICE9PSAwIHx8IHN1cHBvcnRlZDMubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgJEVSUk9SKCJQcmVzZW5jZSBvZiBVbmljb2RlIGxvY2FsZSBleHRlbnNpb24gc2VxdWVuY2UgYWZmZWN0cyB3aGV0aGVyIGxvY2FsZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlICsgIiBpcyBjb25zaWRlcmVkIHN1cHBvcnRlZCB3aXRoIG1hdGNoZXIgIiArIG1hdGNoZXIgKyAiLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gdHJ1ZTsKfSk7Cgo=","commentary":"","description":"Tests that Unicode locale extension sequences do not affect\n whether a locale is considered supported, but are reported back.","path":"TestCases/intl402/ch09/9.2/9.2.6_4_b.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IExvb2t1cFN1cHBvcnRlZExvY2FsZXMgaW5jbHVkZXMgdGhlIGRlZmF1bHQgbG9jYWxlCiAqICAgICBhbmQgZG9lc24ndCBpbmNsdWRlIHRoZSAibm8gbGluZ3Vpc3RpYyBjb250ZW50IiBsb2NhbGUuCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RJbnRsLmpzIik7Cgp0ZXN0V2l0aEludGxDb25zdHJ1Y3RvcnMoZnVuY3Rpb24gKENvbnN0cnVjdG9yKSB7CiAgICAvLyB0aGlzIHRlc3Qgc2hvdWxkIHdvcmsgZXF1YWxseSBmb3IgYm90aCBtYXRjaGluZyBhbGdvcml0aG1zCiAgICBbImxvb2t1cCIsICJiZXN0IGZpdCJdLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoZXIpIHsKICAgICAgICB2YXIgZGVmYXVsdExvY2FsZSA9IG5ldyBDb25zdHJ1Y3RvcigpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgICAgICB2YXIgbm9MaW5ndWlzdGljQ29udGVudCA9ICJ6eHgiOwogICAgICAgIHZhciBzdXBwb3J0ZWQgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGUsIG5vTGluZ3Vpc3RpY0NvbnRlbnRdLAogICAgICAgICAgICB7bG9jYWxlTWF0Y2hlcjogbWF0Y2hlcn0pOwogICAgICAgIGlmIChzdXBwb3J0ZWQuaW5kZXhPZihkZWZhdWx0TG9jYWxlKSA9PT0gLTEpIHsKICAgICAgICAgICAgJEVSUk9SKCJTdXBwb3J0ZWRMb2NhbGVzIGRpZG4ndCByZXR1cm4gZGVmYXVsdCBsb2NhbGUgd2l0aCBtYXRjaGVyICIgKyBtYXRjaGVyICsgIi4iKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1cHBvcnRlZC5pbmRleE9mKG5vTGluZ3Vpc3RpY0NvbnRlbnQpICE9PSAtMSkgewogICAgICAgICAgICAkRVJST1IoIlN1cHBvcnRlZExvY2FsZXMgcmV0dXJuZWQgdGhlIFwibm8gbGluZ3Vpc3RpYyBjb250ZW50XCIgbG9jYWxlIHdpdGggbWF0Y2hlciAiICsgbWF0Y2hlciArICIuIik7CiAgICAgICAgfQogICAgICAgIGlmIChzdXBwb3J0ZWQubGVuZ3RoID4gMSkgewogICAgICAgICAgICAkRVJST1IoIlN1cHBvcnRlZExvY2FsZXMgcmV0dXJuZWQgc3RyYXkgbG9jYWxlczogIiArIHN1cHBvcnRlZC5qb2luKCIsICIpICsgIiB3aXRoIG1hdGNoZXIgIiArIG1hdGNoZXIgKyAiLiIpOwogICAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that LookupSupportedLocales includes the default locale\n and doesn't include the \"no linguistic content\" locale.","path":"TestCases/intl402/ch09/9.2/9.2.6_4_c.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBvcHRpb24gbG9jYWxlTWF0Y2hlciBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0SW50bC5qcyIpOwoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgQ29uc3RydWN0b3IoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CiAgICAKICAgIHZhciB2YWxpZFZhbHVlcyA9IFt1bmRlZmluZWQsICJsb29rdXAiLCAiYmVzdCBmaXQiLCB7dG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJsb29rdXAiOyB9fV07CiAgICB2YWxpZFZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgIHZhciBzdXBwb3J0ZWQgPSBDb25zdHJ1Y3Rvci5zdXBwb3J0ZWRMb2NhbGVzT2YoW2RlZmF1bHRMb2NhbGVdLCB7bG9jYWxlTWF0Y2hlcjogdmFsdWV9KTsKICAgIH0pOwogICAgCiAgICB2YXIgaW52YWxpZFZhbHVlcyA9IFtudWxsLCAwLCA1LCBOYU4sIHRydWUsIGZhbHNlLCAiaW52YWxpZCJdOwogICAgaW52YWxpZFZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtkZWZhdWx0TG9jYWxlXSwge2xvY2FsZU1hdGNoZXI6IHZhbHVlfSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBlcnJvciA9IGU7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICRFUlJPUigiSW52YWxpZCBsb2NhbGVNYXRjaGVyIHZhbHVlICIgKyB2YWx1ZSArICIgd2FzIG5vdCByZWplY3RlZC4iKTsKICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgIT09ICJSYW5nZUVycm9yIikgewogICAgICAgICAgICAkRVJST1IoIkludmFsaWQgbG9jYWxlTWF0Y2hlciB2YWx1ZSAiICsgdmFsdWUgKyAiIHdhcyByZWplY3RlZCB3aXRoIHdyb25nIGVycm9yICIgKyBlcnJvci5uYW1lICsgIi4iKTsKICAgICAgICB9CiAgICB9KTsKICAgIAogICAgcmV0dXJuIHRydWU7Cn0pOwoK","commentary":"","description":"Tests that the option localeMatcher is processed correctly.","path":"TestCases/intl402/ch09/9.2/9.2.8_1_c.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBhcnJheSByZXR1cm5lZCBieSBTdXBwb3J0ZWRMb2NhbGVzIGlzIGV4dGVuc2libGUsCiAqICAgICBidXQgaXRzIHByb3BlcnRpZXMgYXJlIG5vbi13cml0YWJsZS9ub24tY29uZmlndXJhYmxlLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0SW50bC5qcyIpOwoKZnVuY3Rpb24gdGVzdEZyb3plblByb3BlcnR5KG9iaiwgcHJvcGVydHkpIHsKICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5KTsKICAgIGlmIChkZXNjLndyaXRhYmxlKSB7CiAgICAgICAgJEVSUk9SKCJQcm9wZXJ0eSAiICsgcHJvcGVydHkgKyAiIG9mIG9iamVjdCByZXR1cm5lZCBieSBTdXBwb3J0ZWRMb2NhbGVzIGlzIHdyaXRhYmxlLiIpOwogICAgfQogICAgaWYgKGRlc2MuY29uZmlndXJhYmxlKSB7CiAgICAgICAgJEVSUk9SKCJQcm9wZXJ0eSAiICsgcHJvcGVydHkgKyAiIG9mIG9iamVjdCByZXR1cm5lZCBieSBTdXBwb3J0ZWRMb2NhbGVzIGlzIGNvbmZpZ3VyYWJsZS4iKTsKICAgIH0KfQoKdGVzdFdpdGhJbnRsQ29uc3RydWN0b3JzKGZ1bmN0aW9uIChDb25zdHJ1Y3RvcikgewogICAgdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgQ29uc3RydWN0b3IoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CiAgICB2YXIgc3VwcG9ydGVkID0gQ29uc3RydWN0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKFtkZWZhdWx0TG9jYWxlXSk7CiAgICBpZiAoIU9iamVjdC5pc0V4dGVuc2libGUoc3VwcG9ydGVkKSkgewogICAgICAgICRFUlJPUigiT2JqZWN0IHJldHVybmVkIGJ5IFN1cHBvcnRlZExvY2FsZXMgaXMgbm90IGV4dGVuc2libGUuIik7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1cHBvcnRlZC5sZW5ndGg7IGkrKykgewogICAgICAgIHRlc3RGcm96ZW5Qcm9wZXJ0eShzdXBwb3J0ZWQsIGkpOwogICAgfQogICAgdGVzdEZyb3plblByb3BlcnR5KHN1cHBvcnRlZCwgImxlbmd0aCIpOwoKICAgIHJldHVybiB0cnVlOwp9KTsKCg==","commentary":"","description":"Tests that the array returned by SupportedLocales is extensible,\n but its properties are non-writable/non-configurable.","path":"TestCases/intl402/ch09/9.2/9.2.8_4.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLkNvbGxhdG9yLCB0cnVlLCB0cnVlLCBbInN1cHBvcnRlZExvY2FsZXNPZiJdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.Collator\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.1/10.1_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yIGhhcyBhIHN1cHBvcnRlZExvY2FsZXNPZgogKiBwcm9wZXJ0eSwgYW5kIGl0IHdvcmtzIGFzIHBsYW5uZWQuCiAqLwoKdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5Db2xsYXRvcigpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKdmFyIG5vdFN1cHBvcnRlZCA9ICd6eHgnOyAvLyAibm8gbGluZ3Vpc3RpYyBjb250ZW50Igp2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IFtkZWZhdWx0TG9jYWxlLCBub3RTdXBwb3J0ZWRdOwoKdmFyIHN1cHBvcnRlZExvY2FsZXM7CgppZiAoIUludGwuQ29sbGF0b3IuaGFzT3duUHJvcGVydHkoJ3N1cHBvcnRlZExvY2FsZXNPZicpKSB7CiAgICAkRVJST1IoIkludGwuQ29sbGF0b3IgZG9lc24ndCBoYXZlIGEgc3VwcG9ydGVkTG9jYWxlc09mIHByb3BlcnR5LiIpOwp9CgpzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YocmVxdWVzdGVkTG9jYWxlcyk7CmlmIChzdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCAhPT0gMSkgewogICAgJEVSUk9SKCdUaGUgbGVuZ3RoIG9mIHN1cHBvcnRlZCBsb2NhbGVzIGxpc3QgaXMgbm90IDEuJyk7Cn0KCmlmIChzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3QgcmV0dXJuZWQgaW4gdGhlIHN1cHBvcnRlZCBsaXN0LicpOwp9Cgo=","commentary":"","description":"Tests that Intl.Collator has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch10/10.2/10.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YsIHRydWUsIGZhbHNlLCBbXSwgMSk7Cgo=","commentary":"","description":"Tests that Intl.Collator.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.2/10.2.2_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyB0aGUKICogSW50bC5Db2xsYXRvci4KICovCgppZiAoSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuQ29sbGF0b3IpIHsKICAgICRFUlJPUigiSW50bC5Db2xsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgbm90IHRoZSBzYW1lIGFzICIgKwogICAgICAgICAgICJJbnRsLkNvbGxhdG9yIik7Cn0KCg==","commentary":"","description":"Tests that Intl.Collator.prototype.constructor is the\nIntl.Collator.","path":"TestCases/intl402/ch10/10.3/10.3.1.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5jb21wYXJlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QobmV3IEludGwuQ29sbGF0b3IoKS5jb21wYXJlLCB0cnVlLCBmYWxzZSwgW10sIDIpOwoK","commentary":"","description":"Tests that the function returned by Intl.Collator.prototype.compare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.2_1_a_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuQ29sbGF0b3IucHJvdG90eXBlLCAiY29tcGFyZSIpLmdldCAsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that the getter for Intl.Collator.prototype.compare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.Collator.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3.3_L15.js"},{"code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZSBpcyBhbiBvYmplY3QgdGhhdAogKiBoYXMgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBJbnRsLkNvbGxhdG9yLgogKi8KCi8vIHRlc3QgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd291bGQgZmFpbCBpZiAidGhpcyIgd2VyZSBub3QgYW4gb2JqZWN0Ci8vIGluaXRpYWxpemVkIGFzIGFuIEludGwuQ29sbGF0b3IKaWYgKEludGwuQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUoImHQsOOBguyVhCIsICJh0LDjgYLslYQiKSAhPT0gMCkgewogICAgJEVSUk9SKCJJbnRsLkNvbGxhdG9yLnByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0IHRoYXQgaGFzIGJlZW4gIiArCiAgICAgICAgImluaXRpYWxpemVkIGFzIGFuIEludGwuQ29sbGF0b3IuIik7Cn0KCg==","commentary":"","description":"Tests that Intl.Collator.prototype is an object that\nhas been initialized as an Intl.Collator.","path":"TestCases/intl402/ch10/10.3/10.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuQ29sbGF0b3IucHJvdG90eXBlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5Db2xsYXRvci5wcm90b3R5cGUsIGZhbHNlLCBmYWxzZSwgWyJjb25zdHJ1Y3RvciIsICJjb21wYXJlIiwgInJlc29sdmVkT3B0aW9ucyJdKTsKCg==","commentary":"","description":"Tests that Intl.Collator.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch10/10.3/10.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0CiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5OdW1iZXJGb3JtYXQsIHRydWUsIHRydWUsIFsic3VwcG9ydGVkTG9jYWxlc09mIl0sIDApOwoK","commentary":"","description":"Tests that Intl.NumberFormat\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.1/11.1_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdCBoYXMgYSBzdXBwb3J0ZWRMb2NhbGVzT2YKICogcHJvcGVydHksIGFuZCBpdCB3b3JrcyBhcyBwbGFubmVkLgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCnZhciBkZWZhdWx0TG9jYWxlID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlOwp2YXIgbm90U3VwcG9ydGVkID0gJ3p4eCc7IC8vICJubyBsaW5ndWlzdGljIGNvbnRlbnQiCnZhciByZXF1ZXN0ZWRMb2NhbGVzID0gW2RlZmF1bHRMb2NhbGUsIG5vdFN1cHBvcnRlZF07CiAgICAKdmFyIHN1cHBvcnRlZExvY2FsZXM7CgppZiAoIUludGwuTnVtYmVyRm9ybWF0Lmhhc093blByb3BlcnR5KCdzdXBwb3J0ZWRMb2NhbGVzT2YnKSkgewogICAgJEVSUk9SKCJJbnRsLk51bWJlckZvcm1hdCBkb2Vzbid0IGhhdmUgYSBzdXBwb3J0ZWRMb2NhbGVzT2YgcHJvcGVydHkuIik7Cn0KICAgIApzdXBwb3J0ZWRMb2NhbGVzID0gSW50bC5OdW1iZXJGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKHJlcXVlc3RlZExvY2FsZXMpOwppZiAoc3VwcG9ydGVkTG9jYWxlcy5sZW5ndGggIT09IDEpIHsKICAgICRFUlJPUignVGhlIGxlbmd0aCBvZiBzdXBwb3J0ZWQgbG9jYWxlcyBsaXN0IGlzIG5vdCAxLicpOwp9CiAgICAKaWYgKHN1cHBvcnRlZExvY2FsZXNbMF0gIT09IGRlZmF1bHRMb2NhbGUpIHsKICAgICRFUlJPUignVGhlIGRlZmF1bHQgbG9jYWxlIGlzIG5vdCByZXR1cm5lZCBpbiB0aGUgc3VwcG9ydGVkIGxpc3QuJyk7Cn0KCg==","commentary":"","description":"Tests that Intl.NumberFormat has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch11/11.2/11.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZgogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZiwgdHJ1ZSwgZmFsc2UsIFtdLCAxKTsKCg==","commentary":"","description":"Tests that Intl.NumberFormat.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.2/11.2.2_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgdGhlCiAqIEludGwuTnVtYmVyRm9ybWF0LgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCmlmIChJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuTnVtYmVyRm9ybWF0KSB7CiAgICAkRVJST1IoIkludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyBub3QgdGhlIHNhbWUgYXMgIiArCiAgICAgICAgICAiSW50bC5OdW1iZXJGb3JtYXQiKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.constructor is the\nIntl.NumberFormat.","path":"TestCases/intl402/ch11/11.3/11.3.1.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGNvbnZlcnRzIG90aGVyIHR5cGVzIHRvIG51bWJlcnMuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwp2YXIgdGVzdERhdGEgPSBbdW5kZWZpbmVkLCBudWxsLCB0cnVlLCAnMC42NjY2NjY2J107CnZhciBudW1iZXI7CnZhciBpLCBpbnB1dCwgY29ycmVjdFJlc3VsdCwgcmVzdWx0OwoKZm9yIChpIGluIHRlc3REYXRhKSB7CiAgICBpbnB1dCA9IHRlc3REYXRhW2ldOwogICAgbnVtYmVyID0gK2lucHV0OwogICAgY29ycmVjdFJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQobnVtYmVyKTsKICAgIAogICAgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdChpbnB1dCk7CiAgICBpZiAocmVzdWx0ICE9PSBjb3JyZWN0UmVzdWx0KSB7CiAgICAgICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBkb2VzIG5vdCBjb252ZXJ0IG90aGVyICcgKwogICAgICAgICAgICAndHlwZXMgdG8gbnVtYmVycy4gSW5wdXQ6ICInK2lucHV0KyciIE91dHB1dDogIicrcmVzdWx0KyciICcrCiAgICAgICAgICAgICdFeHBlY3RlZCBvdXRwdXQ6ICInK2NvcnJlY3RSZXN1bHQrJyInKTsKICAgIH0KfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nconverts other types to numbers.","path":"TestCases/intl402/ch11/11.3/11.3.2_1_a_ii.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QobmV3IEludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0LCB0cnVlLCBmYWxzZSwgW10sIDEpOwoK","commentary":"","description":"Tests that the function returned by Intl.NumberFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.2_1_a_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGRvZXNuJ3QgdHJlYXQgYWxsIG51bWJlcnMgYXMgbmVnYXRpdmUuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwogIAppZiAoZm9ybWF0dGVyLmZvcm1hdCgxKSA9PT0gZm9ybWF0dGVyLmZvcm1hdCgtMSkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgaXMgZm9ybWF0dGluZyAxIGFuZCAtMSB0aGUgc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZXIuZm9ybWF0KC0wKSAhPT0gZm9ybWF0dGVyLmZvcm1hdCgwKSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBpcyBmb3JtYXR0aW5nIHNpZ25lZCB6ZXJvcyBkaWZmZXJlbnRseS4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\ndoesn't treat all numbers as negative.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_1.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGhhbmRsZXMgTmFOLCBJbmZpbml0eSwgYW5kIC1JbmZpbml0eSBwcm9wZXJseS4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgovLyBGSVhNRTogV2UgYXJlIG9ubHkgbGlzdGluZyBOdW1lcmljX1R5cGU9RGVjaW1hbC4gTWF5IG5lZWQgdG8gYWRkIG1vcmUKLy8gd2hlbiB0aGUgc3BlYyBjbGFyaWZpZXMuIEN1cnJlbnQgYXMgb2YgVW5pY29kZSA2LjEuCnZhciBoYXNVbmljb2RlRGlnaXRzID0gbmV3IFJlZ0V4cCgnLiooWycgKwogICAgJzAtOVx1MDY2MC1cdTA2NjlcdTA2RjAtXHUwNkY5XHUwN0MwLVx1MDdDOVx1MDk2Ni1cdTA5NkYnICsKICAgICdcdTA5RTYtXHUwOUVGXHUwQTY2LVx1MEE2Rlx1MEFFNi1cdTBBRUZcdTBCNjYtXHUwQjZGXHUwQkU2LVx1MEJFRicgKwogICAgJ1x1MEM2Ni1cdTBDNkZcdTBDRTYtXHUwQ0VGXHUwRDY2LVx1MEQ2Rlx1MEU1MC1cdTBFNTlcdTBFRDAtXHUwRUQ5JyArCiAgICAnXHUwRjIwLVx1MEYyOVx1MTA0MC1cdTEwNDlcdTEwOTAtXHUxMDk5XHUxN0UwLVx1MTdFOVx1MTgxMC1cdTE4MTknICsKICAgICdcdTE5NDYtXHUxOTRGXHUxOUQwLVx1MTlEOVx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQjUwLVx1MUI1OScgKwogICAgJ1x1MUJCMC1cdTFCQjlcdTFDNDAtXHUxQzQ5XHUxQzUwLVx1MUM1OVx1QTYyMC1cdUE2MjlcdUE4RDAtXHVBOEQ5JyArCiAgICAnXHVBOTAwLVx1QTkwOVx1QTlEMC1cdUE5RDlcdUFBNTAtXHVBQTU5XHVBQkYwLVx1QUJGOVx1RkYxMC1cdUZGMTknICsKICAgICddfCcgKwogICAgJ1x1RDgwMVtcdURDQTAtXHVEQ0E5XXwnICsKICAgICdcdUQ4MDRbXHVEQzY2LVx1REM2Rlx1RENGMC1cdURDRjlcdUREMzYtXHVERDNGXHVEREQwLVx1REREOV18JyArCiAgICAnXHVEODA1W1x1REVDMC1cdURFQzldfCcgKwogICAgJ1x1RDgzNVtcdURGQ0UtXHVERkZGXSknKTsKCnZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKTsKdmFyIGZvcm1hdHRlZE5hTiA9IGZvcm1hdHRlci5mb3JtYXQoTmFOKTsKdmFyIGZvcm1hdHRlZEluZmluaXR5ID0gZm9ybWF0dGVyLmZvcm1hdChJbmZpbml0eSk7CnZhciBmb3JtYXR0ZWROZWdhdGl2ZUluZmluaXR5ID0gZm9ybWF0dGVyLmZvcm1hdCgtSW5maW5pdHkpOwoKaWYgKGZvcm1hdHRlZE5hTiA9PT0gZm9ybWF0dGVkSW5maW5pdHkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gYW5kIEluZmluaXR5IHRoZSAnICsKICAgICAgICAnc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZWROYU4gPT09IGZvcm1hdHRlZE5lZ2F0aXZlSW5maW5pdHkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gYW5kIG5lZ2F0aXZlICcgKwogICAgICAgICdJbmZpbml0eSB0aGUgc2FtZSB3YXkuJyk7Cn0KCmlmIChmb3JtYXR0ZWRJbmZpbml0eSA9PT0gZm9ybWF0dGVkTmVnYXRpdmVJbmZpbml0eSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBmb3JtYXRzIEluZmluaXR5IGFuZCAnICsKICAgICAgICAnbmVnYXRpdmUgSW5maW5pdHkgdGhlIHNhbWUgd2F5LicpOwp9CgppZiAoaGFzVW5pY29kZURpZ2l0cy50ZXN0KGZvcm1hdHRlZE5hTikpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBOYU4gdXNpbmcgYSBkaWdpdC4nKTsKfQoKaWYgKGhhc1VuaWNvZGVEaWdpdHMudGVzdChmb3JtYXR0ZWRJbmZpbml0eSkpIHsKICAgICRFUlJPUignSW50bC5OdW1iZXJGb3JtYXQgZm9ybWF0cyBJbmZpbml0eSB1c2luZyBhICcgKwogICAgICAgICdkaWdpdC4nKTsKfQoKaWYgKGhhc1VuaWNvZGVEaWdpdHMudGVzdChmb3JtYXR0ZWROZWdhdGl2ZUluZmluaXR5KSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBmb3JtYXRzIG5lZ2F0aXZlIEluZmluaXR5ICcgKyAKICAgICAgICAndXNpbmcgYSBkaWdpdC4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nhandles NaN, Infinity, and -Infinity properly.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_2.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIGZvcm1hdHMgcGVyY2VudCB2YWx1ZXMgcHJvcGVybHkuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIG51bWJlckZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgpOwp2YXIgcGVyY2VudEZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh1bmRlZmluZWQsIHtzdHlsZTogJ3BlcmNlbnQnfSk7Cgp2YXIgZm9ybWF0dGVkVHdlbnR5ID0gbnVtYmVyRm9ybWF0dGVyLmZvcm1hdCgyMCk7CnZhciBmb3JtYXR0ZWRUd2VudHlQZXJjZW50ID0gcGVyY2VudEZvcm1hdHRlci5mb3JtYXQoMC4yMCk7CgovLyBGSVhNRTogTWF5IG5vdCB3b3JrIGZvciBzb21lIHRoZW9yZXRpY2FsIGxvY2FsZXMgd2hlcmUgcGVyY2VudHMgYW5kCi8vIG5vcm1hbCBudW1iZXJzIGFyZSBmb3JtYXR0ZWQgdXNpbmcgZGlmZmVyZW50IG51bWJlcmluZyBzeXN0ZW1zLgppZiAoZm9ybWF0dGVkVHdlbnR5UGVyY2VudC5pbmRleE9mKGZvcm1hdHRlZFR3ZW50eSkgPT09IC0xKSB7CiAgICAkRVJST1IoIkludGwuTnVtYmVyRm9ybWF0J3MgZm9ybWF0dGluZyBvZiAyMCUgZG9lcyBub3QgaW5jbHVkZSBhICIgKwogICAgICAgICJmb3JtYXR0aW5nIG9mIDIwIGFzIGEgc3Vic3RyaW5nLiIpOwp9CgovLyBGSVhNRTogTW92ZSB0aGlzIHRvIHNvbWV3aGVyZSBhcHByb3ByaWF0ZQppZiAocGVyY2VudEZvcm1hdHRlci5mb3JtYXQoMC4wMTEpID09PSBwZXJjZW50Rm9ybWF0dGVyLmZvcm1hdCgwLjAyKSkgewogICAgJEVSUk9SKCdJbnRsLk51bWJlckZvcm1hdCBpcyBmb3JtYXR0aW5nIDEuMSUgYW5kIDIlIHRoZSBzYW1lIHdheS4nKTsKfQoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nformats percent values properly.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_3_b.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0CiAqIHN1cHBvcnRzIGFsbCBhbHRlcm5hdGl2ZSBudW1iZXJpbmcgc3lzdGVtcy4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgp2YXIgbnVtYmVyaW5nU3lzdGVtcyA9IHsKICAgIGFyYWI6IDB4MDY2MCwKICAgIGFyYWJleHQ6IDB4MDZGMCwKICAgIGJlbmc6IDB4MDlFNiwKICAgIGRldmE6IDB4MDk2NiwKICAgIGZ1bGx3aWRlOiAweEZGMTAsCiAgICBndWpyOiAweDBBRTYsCiAgICBndXJ1OiAweDBBNjYsCiAgICBoYW5pZGVjOiBbMHgzMDA3LCAweDRFMDAsIDB4NEU4QywgMHg0RTA5LCAweDU2REIsCiAgICAgICAgICAgICAgMHg0RTk0LCAweDUxNkQsIDB4NEUwMywgMHg1MTZCLCAweDRFNURdLAogICAga2htcjogMHgxN0UwLAogICAga25kYTogMHgwQ0U2LAogICAgbGFvbzogMHgwRUQwLAogICAgbGF0bjogMHgwMDMwLAogICAgbWx5bTogMHgwRDY2LAogICAgbW9uZzogMHgxODEwLAogICAgbXltcjogMHgxMDQwLAogICAgb3J5YTogMHgwQjY2LAogICAgdGFtbGRlYzogMHgwQkU2LAogICAgdGVsdTogMHgwQzY2LAogICAgdGhhaTogMHgwRTUwLAogICAgdGlidDogMHgwRjIwCn07Cgp2YXIgb3B0aW9ucywgZm9ybWF0dGVyOwp2YXIgcywgemVyb0NvZGUsIGRpZ2l0TGlzdDsKCmZvciAocyBpbiBudW1iZXJpbmdTeXN0ZW1zKSB7CiAgICB6ZXJvQ29kZSA9IG51bWJlcmluZ1N5c3RlbXNbc107CiAgICBpZiAodHlwZW9mIHplcm9Db2RlID09PSAnbnVtYmVyJykgewogICAgICAgIGRpZ2l0TGlzdCA9IFt6ZXJvQ29kZSwgemVyb0NvZGUrMSwgemVyb0NvZGUrMiwgemVyb0NvZGUrMywgemVyb0NvZGUrNCwKICAgICAgICAgICAgICAgICAgIHplcm9Db2RlKzUsIHplcm9Db2RlKzYsIHplcm9Db2RlKzcsIHplcm9Db2RlKzgsIHplcm9Db2RlKzldOwogICAgICAgIG51bWJlcmluZ1N5c3RlbXNbc10gPSBkaWdpdExpc3Q7CiAgICB9Cn0KCi8vIEZJWE1FOiBVbmZpbmlzaGVkCgo=","commentary":"","description":"Tests that Intl.NumberFormat.prototype.format\nsupports all alternative numbering systems.","path":"TestCases/intl402/ch11/11.3/11.3.2_FN_3_e.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZSwgImZvcm1hdCIpLmdldCAsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that the getter for Intl.NumberFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that Intl.NumberFormat.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3.3_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUgaXMgYW4gb2JqZWN0IHRoYXQKICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYXMgYW4gSW50bC5OdW1iZXJGb3JtYXQuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKLy8gdGVzdCBieSBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdCB3b3VsZCBmYWlsIGlmICJ0aGlzIiB3ZXJlIG5vdCBhbiBvYmplY3QKLy8gaW5pdGlhbGl6ZWQgYXMgYW4gSW50bC5OdW1iZXJGb3JtYXQKaWYgKHR5cGVvZiBJbnRsLk51bWJlckZvcm1hdC5wcm90b3R5cGUuZm9ybWF0KDApICE9PSAic3RyaW5nIikgewogICAgJEVSUk9SKCJJbnRsLk51bWJlckZvcm1hdCdzIHByb3RvdHlwZSBpcyBub3QgYW4gb2JqZWN0IHRoYXQgaGFzIGJlZW4gIiArCiAgICAgICAgImluaXRpYWxpemVkIGFzIGFuIEludGwuTnVtYmVyRm9ybWF0Iik7Cn0KCg==","commentary":"","description":"Tests that Intl.NumberFormat.prototype is an object that\nhas been initialized as an Intl.NumberFormat.","path":"TestCases/intl402/ch11/11.3/11.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZQogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuTnVtYmVyRm9ybWF0LnByb3RvdHlwZSwgZmFsc2UsIGZhbHNlLCBbImNvbnN0cnVjdG9yIiwgImZvcm1hdCIsICJyZXNvbHZlZE9wdGlvbnMiXSk7Cgo=","commentary":"","description":"Tests that Intl.NumberFormat.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch11/11.3/11.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChJbnRsLkRhdGVUaW1lRm9ybWF0LCB0cnVlLCB0cnVlLCBbInN1cHBvcnRlZExvY2FsZXNPZiJdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.DateTimeFormat\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.1/12.1_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0IGhhcyBhIHN1cHBvcnRlZExvY2FsZXNPZgogKiBwcm9wZXJ0eSwgYW5kIGl0IHdvcmtzIGFzIHBsYW5uZWQuCiAqIEBhdXRob3I6IFJvb3piZWggUG91cm5hZGVyCiAqLwoKdmFyIGRlZmF1bHRMb2NhbGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKdmFyIG5vdFN1cHBvcnRlZCA9ICd6eHgnOyAvLyAibm8gbGluZ3Vpc3RpYyBjb250ZW50Igp2YXIgcmVxdWVzdGVkTG9jYWxlcyA9IFtkZWZhdWx0TG9jYWxlLCBub3RTdXBwb3J0ZWRdOwogICAgCnZhciBzdXBwb3J0ZWRMb2NhbGVzOwoKaWYgKCFJbnRsLkRhdGVUaW1lRm9ybWF0Lmhhc093blByb3BlcnR5KCdzdXBwb3J0ZWRMb2NhbGVzT2YnKSkgewogICAgJEVSUk9SKCJJbnRsLkRhdGVUaW1lRm9ybWF0IGRvZXNuJ3QgaGF2ZSBhIHN1cHBvcnRlZExvY2FsZXNPZiBwcm9wZXJ0eS4iKTsKfQogICAgCnN1cHBvcnRlZExvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihyZXF1ZXN0ZWRMb2NhbGVzKTsKaWYgKHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoICE9PSAxKSB7CiAgICAkRVJST1IoJ1RoZSBsZW5ndGggb2Ygc3VwcG9ydGVkIGxvY2FsZXMgbGlzdCBpcyBub3QgMS4nKTsKfQogICAgCmlmIChzdXBwb3J0ZWRMb2NhbGVzWzBdICE9PSBkZWZhdWx0TG9jYWxlKSB7CiAgICAkRVJST1IoJ1RoZSBkZWZhdWx0IGxvY2FsZSBpcyBub3QgcmV0dXJuZWQgaW4gdGhlIHN1cHBvcnRlZCBsaXN0LicpOwp9Cgo=","commentary":"","description":"Tests that Intl.DateTimeFormat has a supportedLocalesOf\nproperty, and it works as planned.","path":"TestCases/intl402/ch12/12.2/12.2.2.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YsIHRydWUsIGZhbHNlLCBbXSwgMSk7Cgo=","commentary":"","description":"Tests that Intl.DateTimeFormat.supportedLocalesOf\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.2/12.2.2_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciBpcyB0aGUKICogSW50bC5EYXRlVGltZUZvcm1hdC4KICogQGF1dGhvcjogUm9vemJlaCBQb3VybmFkZXIKICovCgppZiAoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgIT09IEludGwuRGF0ZVRpbWVGb3JtYXQpIHsKICAgICRFUlJPUigiSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUuY29uc3RydWN0b3IgaXMgbm90IHRoZSBzYW1lIGFzICIgKwogICAgICAgICAgIkludGwuRGF0ZVRpbWVGb3JtYXQiKTsKfQoK","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype.constructor is the\nIntl.DateTimeFormat.","path":"TestCases/intl402/ch12/12.3/12.3.1.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLmZvcm1hdCwgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that the function returned by Intl.DateTimeFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.2_1_a_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IHRoZSBnZXR0ZXIgZm9yIEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLmZvcm1hdAogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUsICJmb3JtYXQiKS5nZXQgLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that the getter for Intl.DateTimeFormat.prototype.format\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype.resolvedOptions\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3.3_L15.js"},{"author":"Roozbeh Pournader","code":"Ly8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi8qKgogKiBAZGVzY3JpcHRpb24gVGVzdHMgdGhhdCBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZSBpcyBhbiBvYmplY3QgdGhhdAogKiBoYXMgYmVlbiBpbml0aWFsaXplZCBhcyBhbiBJbnRsLkRhdGVUaW1lRm9ybWF0LgogKiBAYXV0aG9yOiBSb296YmVoIFBvdXJuYWRlcgogKi8KCi8vIHRlc3QgYnkgY2FsbGluZyBhIGZ1bmN0aW9uIHRoYXQgd291bGQgZmFpbCBpZiAidGhpcyIgd2VyZSBub3QgYW4gb2JqZWN0Ci8vIGluaXRpYWxpemVkIGFzIGFuIEludGwuRGF0ZVRpbWVGb3JtYXQKaWYgKHR5cGVvZiBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXQoMCkgIT09ICJzdHJpbmciKSB7CiAgICAkRVJST1IoIkludGwuRGF0ZVRpbWVGb3JtYXQncyBwcm90b3R5cGUgaXMgbm90IGFuIG9iamVjdCB0aGF0IGhhcyBiZWVuICIgKwogICAgICAgICJpbml0aWFsaXplZCBhcyBhbiBJbnRsLkRhdGVUaW1lRm9ybWF0Iik7Cn0KCg==","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype is an object that\nhas been initialized as an Intl.DateTimeFormat.","path":"TestCases/intl402/ch12/12.3/12.3.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IEludGwuRGF0ZVRpbWVGb3JtYXQucHJvdG90eXBlCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUsIGZhbHNlLCBmYWxzZSwgWyJjb25zdHJ1Y3RvciIsICJmb3JtYXQiLCAicmVzb2x2ZWRPcHRpb25zIl0pOwoK","commentary":"","description":"Tests that Intl.DateTimeFormat.prototype\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch12/12.3/12.3_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZQogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSwgdHJ1ZSwgZmFsc2UsIFtdLCAxKTsKCg==","commentary":"","description":"Tests that String.prototype.localeCompare\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.1/13.1.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IE51bWJlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcKICogICAgIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgZm9yIGJ1aWx0LWluIG9iamVjdHMgZGVmaW5lZCBieSB0aGUgaW50cm9kdWN0aW9uIG9mCiAqICAgICBjaGFwdGVyIDE1IG9mIHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIFNwZWNpZmljYXRpb24uCiAqIEBhdXRob3IgTm9yYmVydCBMaW5kZW5iZXJnCiAqLwoKJElOQ0xVREUoInRlc3RCdWlsdEluT2JqZWN0LmpzIik7Cgp0ZXN0QnVpbHRJbk9iamVjdChOdW1iZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLCB0cnVlLCBmYWxzZSwgW10sIDApOwoK","commentary":"","description":"Tests that Number.prototype.toLocaleString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.2/13.2.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nCiAqICAgICBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBidWlsdC1pbiBvYmplY3RzIGRlZmluZWQgYnkgdGhlIGludHJvZHVjdGlvbiBvZgogKiAgICAgY2hhcHRlciAxNSBvZiB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogKiBAYXV0aG9yIE5vcmJlcnQgTGluZGVuYmVyZwogKi8KCiRJTkNMVURFKCJ0ZXN0QnVpbHRJbk9iamVjdC5qcyIpOwoKdGVzdEJ1aWx0SW5PYmplY3QoRGF0ZS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcsIHRydWUsIGZhbHNlLCBbXSwgMCk7Cgo=","commentary":"","description":"Tests that Date.prototype.toLocaleString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.1_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlRGF0ZVN0cmluZwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KERhdGUucHJvdG90eXBlLnRvTG9jYWxlRGF0ZVN0cmluZywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Date.prototype.toLocaleDateString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.2_L15.js"},{"author":"Norbert Lindenberg","code":"Ly8gQ29weXJpZ2h0IDIwMTIgTW96aWxsYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLyoqCiAqIEBkZXNjcmlwdGlvbiBUZXN0cyB0aGF0IERhdGUucHJvdG90eXBlLnRvTG9jYWxlVGltZVN0cmluZwogKiAgICAgbWVldHMgdGhlIHJlcXVpcmVtZW50cyBmb3IgYnVpbHQtaW4gb2JqZWN0cyBkZWZpbmVkIGJ5IHRoZSBpbnRyb2R1Y3Rpb24gb2YKICogICAgIGNoYXB0ZXIgMTUgb2YgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbi4KICogQGF1dGhvciBOb3JiZXJ0IExpbmRlbmJlcmcKICovCgokSU5DTFVERSgidGVzdEJ1aWx0SW5PYmplY3QuanMiKTsKCnRlc3RCdWlsdEluT2JqZWN0KERhdGUucHJvdG90eXBlLnRvTG9jYWxlVGltZVN0cmluZywgdHJ1ZSwgZmFsc2UsIFtdLCAwKTsKCg==","commentary":"","description":"Tests that Date.prototype.toLocaleTimeString\n meets the requirements for built-in objects defined by the introduction of\n chapter 15 of the ECMAScript Language Specification.","path":"TestCases/intl402/ch13/13.3/13.3.3_L15.js"}]}} \ No newline at end of file diff --git a/website/json/testcases_intl402.json b/website/json/testcases_intl402.json index 7c24cc709..187a04bb6 100644 --- a/website/json/testcases_intl402.json +++ b/website/json/testcases_intl402.json @@ -1 +1 @@ -{"numTests":41,"testSuite":["json/intl402.json"]} \ No newline at end of file +{"numTests":66,"testSuite":["json/intl402.json"]} \ No newline at end of file -- cgit v1.2.3