diff options
Diffstat (limited to 'test/suite/intl402/ch11/11.1')
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_1.js | 43 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_15.js | 13 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_17.js | 81 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_19.js | 31 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_20_c.js | 196 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_21.js | 15 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_34.js | 12 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_6.js | 18 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.1_7.js | 12 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.2.js | 30 | ||||
-rw-r--r-- | test/suite/intl402/ch11/11.1/11.1.3.js | 19 |
11 files changed, 470 insertions, 0 deletions
diff --git a/test/suite/intl402/ch11/11.1/11.1.1_1.js b/test/suite/intl402/ch11/11.1/11.1.1_1.js new file mode 100644 index 000000000..33af16975 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_1.js @@ -0,0 +1,43 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that an object can't be re-initialized as a NumberFormat. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testWithIntlConstructors(function (Constructor) { + var obj, error; + + // variant 1: use constructor in a "new" expression + obj = new Constructor(); + try { + Intl.NumberFormat.call(obj); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Re-initializing object created with \"new\" as NumberFormat was not rejected."); + } else if (error.name !== "TypeError") { + $ERROR("Re-initializing object created with \"new\" as NumberFormat was rejected with wrong error " + error.name + "."); + } + + // variant 2: use constructor as a function + obj = Constructor.call({}); + error = undefined; + try { + Intl.NumberFormat.call(obj); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Re-initializing object created with constructor as function as NumberFormat was not rejected."); + } else if (error.name !== "TypeError") { + $ERROR("Re-initializing object created with constructor as function as NumberFormat was rejected with wrong error " + error.name + "."); + } + + return true; +}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_15.js b/test/suite/intl402/ch11/11.1/11.1.1_15.js new file mode 100644 index 000000000..4d0467428 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_15.js @@ -0,0 +1,13 @@ +// 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 style is processed correctly. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testOption(Intl.NumberFormat, "style", "string", ["decimal", "percent", "currency"], "decimal", + {extra: {"currency": {currency: "CNY"}}}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_17.js b/test/suite/intl402/ch11/11.1/11.1.1_17.js new file mode 100644 index 000000000..08c0e8e5c --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_17.js @@ -0,0 +1,81 @@ +// 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 currency is processed correctly. + * @author Norbert Lindenberg + */ + +var validValues = ["CNY", "USD", "EUR", "IDR", "jpy", {toString: function () {return "INR";}}]; +var invalidValues = ["$", "SFr.", "US$", "ßP", {toString: function () {return;}}]; + +var defaultLocale = new Intl.NumberFormat().resolvedOptions().locale; + +validValues.forEach(function (value) { + var format, actual, expected; + + // with currency style, we should get the upper case form back + format = new Intl.NumberFormat([defaultLocale], {style: "currency", currency: value}); + actual = format.resolvedOptions().currency; + expected = value.toString().toUpperCase(); + if (actual !== expected) { + $ERROR("Incorrect resolved currency with currency style - expected " + + expected + "; got " + actual + "."); + } + + // without currency style, we shouldn't get any currency back + format = new Intl.NumberFormat([defaultLocale], {currency: value}); + actual = format.resolvedOptions().currency; + expected = undefined; + if (actual !== expected) { + $ERROR("Incorrect resolved currency with non-currency style - expected " + + expected + "; got " + actual + "."); + } + + // currencies specified through the locale must be ignored + format = new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency", currency: value}); + actual = format.resolvedOptions().currency; + expected = value.toString().toUpperCase(); + if (actual !== expected) { + $ERROR("Incorrect resolved currency with -u-cu- and currency style - expected " + + expected + "; got " + actual + "."); + } + + format = new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {currency: value}); + actual = format.resolvedOptions().currency; + expected = undefined; + if (actual !== expected) { + $ERROR("Incorrect resolved currency with -u-cu- and non-currency style - expected " + + expected + "; got " + actual + "."); + } +}); + +invalidValues.forEach(function (value) { + function expectError(f) { + var error; + try { + f(); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid currency value " + value + " was not rejected."); + } else if (error.name !== "RangeError") { + $ERROR("Invalid currency value " + value + " was rejected with wrong error " + error.name + "."); + } + } + + expectError(function () { + return new Intl.NumberFormat([defaultLocale], {style: "currency", currency: value}); + }); + expectError(function () { + return new Intl.NumberFormat([defaultLocale], {currency: value}); + }); + expectError(function () { + return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency", currency: value}); + }); + expectError(function () { + return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {currency: value}); + }); +}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_19.js b/test/suite/intl402/ch11/11.1/11.1.1_19.js new file mode 100644 index 000000000..e41ca5bec --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_19.js @@ -0,0 +1,31 @@ +// Copyright 2012 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/** + * @description Tests that the currency style can not be used without a specified currency. + * @author Norbert Lindenberg + */ + +var defaultLocale = new Intl.NumberFormat().resolvedOptions().locale; + +function expectError(f) { + var error; + try { + f(); + } catch (e) { + error = e; + } + if (error === undefined) { + $ERROR("Invalid currency value " + value + " was not rejected."); + } else if (error.name !== "TypeError") { + $ERROR("Invalid currency value " + value + " was rejected with wrong error " + error.name + "."); + } +} + +expectError(function () { + return new Intl.NumberFormat([defaultLocale], {style: "currency"}); +}); +expectError(function () { + return new Intl.NumberFormat([defaultLocale + "-u-cu-krw"], {style: "currency"}); +}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_20_c.js b/test/suite/intl402/ch11/11.1/11.1.1_20_c.js new file mode 100644 index 000000000..8d984ebf5 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_20_c.js @@ -0,0 +1,196 @@ +// 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 the number of fractional digits is determined correctly for currencies. + * @author Norbert Lindenberg + */ + +// data from http://www.currency-iso.org/dl_iso_table_a1.xml, 2012-08-10 +var currencyDigits = { + AED: 2, + AFN: 2, + ALL: 2, + AMD: 2, + ANG: 2, + AOA: 2, + ARS: 2, + AUD: 2, + AWG: 2, + AZN: 2, + BAM: 2, + BBD: 2, + BDT: 2, + BGN: 2, + BHD: 3, + BIF: 0, + BMD: 2, + BND: 2, + BOB: 2, + BOV: 2, + BRL: 2, + BSD: 2, + BTN: 2, + BWP: 2, + BYR: 0, + BZD: 2, + CAD: 2, + CDF: 2, + CHE: 2, + CHF: 2, + CHW: 2, + CLF: 0, + CLP: 0, + CNY: 2, + COP: 2, + COU: 2, + CRC: 2, + CUC: 2, + CUP: 2, + CVE: 2, + CZK: 2, + DJF: 0, + DKK: 2, + DOP: 2, + DZD: 2, + EGP: 2, + ERN: 2, + ETB: 2, + EUR: 2, + FJD: 2, + FKP: 2, + GBP: 2, + GEL: 2, + GHS: 2, + GIP: 2, + GMD: 2, + GNF: 0, + GTQ: 2, + GYD: 2, + HKD: 2, + HNL: 2, + HRK: 2, + HTG: 2, + HUF: 2, + IDR: 2, + ILS: 2, + INR: 2, + IQD: 3, + IRR: 2, + ISK: 0, + JMD: 2, + JOD: 3, + JPY: 0, + KES: 2, + KGS: 2, + KHR: 2, + KMF: 0, + KPW: 2, + KRW: 0, + KWD: 3, + KYD: 2, + KZT: 2, + LAK: 2, + LBP: 2, + LKR: 2, + LRD: 2, + LSL: 2, + LTL: 2, + LVL: 2, + LYD: 3, + MAD: 2, + MDL: 2, + MGA: 2, + MKD: 2, + MMK: 2, + MNT: 2, + MOP: 2, + MRO: 2, + MUR: 2, + MVR: 2, + MWK: 2, + MXN: 2, + MXV: 2, + MYR: 2, + MZN: 2, + NAD: 2, + NGN: 2, + NIO: 2, + NOK: 2, + NPR: 2, + NZD: 2, + OMR: 3, + PAB: 2, + PEN: 2, + PGK: 2, + PHP: 2, + PKR: 2, + PLN: 2, + PYG: 0, + QAR: 2, + RON: 2, + RSD: 2, + RUB: 2, + RWF: 0, + SAR: 2, + SBD: 2, + SCR: 2, + SDG: 2, + SEK: 2, + SGD: 2, + SHP: 2, + SLL: 2, + SOS: 2, + SRD: 2, + SSP: 2, + STD: 2, + SVC: 2, + SYP: 2, + SZL: 2, + THB: 2, + TJS: 2, + TMT: 2, + TND: 3, + TOP: 2, + TRY: 2, + TTD: 2, + TWD: 2, + TZS: 2, + UAH: 2, + UGX: 2, + USD: 2, + USN: 2, + USS: 2, + UYI: 0, + UYU: 2, + UZS: 2, + VEF: 2, + VND: 0, + VUV: 0, + WST: 2, + XAF: 0, + XCD: 2, + XOF: 0, + XPF: 0, + YER: 2, + ZAR: 2, + ZMK: 2, + ZWL: 2 +}; + +Object.getOwnPropertyNames(currencyDigits).forEach(function (currency) { + var digits = currencyDigits[currency]; + format = Intl.NumberFormat([], {style: "currency", currency: currency}); + var min = format.resolvedOptions().minimumFractionDigits; + var max = format.resolvedOptions().maximumFractionDigits; + if (min !== digits) { + $ERROR("Didn't get correct minimumFractionDigits for currency " + + currency + "; expected " + digits + ", got " + min + "."); + } + if (max !== digits) { + $ERROR("Didn't get correct maximumFractionDigits for currency " + + currency + "; expected " + digits + ", got " + max + "."); + } +}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_21.js b/test/suite/intl402/ch11/11.1/11.1.1_21.js new file mode 100644 index 000000000..1751b8b57 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_21.js @@ -0,0 +1,15 @@ +// 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 currencyDisplay is processed correctly. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testOption(Intl.NumberFormat, "currencyDisplay", "string", ["code", "symbol", "name"], + "symbol", {extra: {any: {style: "currency", currency: "XDR"}}}); +testOption(Intl.NumberFormat, "currencyDisplay", "string", ["code", "symbol", "name"], + undefined, {noReturn: true}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_34.js b/test/suite/intl402/ch11/11.1/11.1.1_34.js new file mode 100644 index 000000000..98ba9a062 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_34.js @@ -0,0 +1,12 @@ +// 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 useGrouping is processed correctly. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +testOption(Intl.NumberFormat, "useGrouping", "boolean", undefined, true); + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_6.js b/test/suite/intl402/ch11/11.1/11.1.1_6.js new file mode 100644 index 000000000..5b9d342eb --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_6.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 the behavior of a Record is not affected by adversarial + * changes to Object.prototype. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +taintProperties(["localeMatcher"]); + +var locale = new Intl.NumberFormat(undefined, {localeMatcher: "lookup"}).resolvedOptions().locale; +if (!isCanonicalizedStructurallyValidLanguageTag(locale)) { + $ERROR("NumberFormat returns invalid locale " + locale + "."); +} + diff --git a/test/suite/intl402/ch11/11.1/11.1.1_7.js b/test/suite/intl402/ch11/11.1/11.1.1_7.js new file mode 100644 index 000000000..4b13b245b --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.1_7.js @@ -0,0 +1,12 @@ +// 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"); + +testOption(Intl.NumberFormat, "localeMatcher", "string", ["lookup", "best fit"], "best fit", {noReturn: true}); + diff --git a/test/suite/intl402/ch11/11.1/11.1.2.js b/test/suite/intl402/ch11/11.1/11.1.2.js new file mode 100644 index 000000000..0ca8cbbda --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.2.js @@ -0,0 +1,30 @@ +// 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 Intl.NumberFormat can be subclassed. + * @author Norbert Lindenberg + */ + +$INCLUDE("testIntl.js"); + +// get a number format and have it format an array of numbers for comparison with the subclass +var locales = ["tlh", "id", "en"]; +var a = [0, 1, -1, -123456.789, -Infinity, NaN]; +var referenceNumberFormat = new Intl.NumberFormat(locales); +var referenceFormatted = a.map(referenceNumberFormat.format); + +function MyNumberFormat(locales, options) { + Intl.NumberFormat.call(this, locales, options); + // could initialize MyNumberFormat properties +} + +MyNumberFormat.prototype = Object.create(Intl.NumberFormat.prototype); +MyNumberFormat.prototype.constructor = MyNumberFormat; +// could add methods to MyNumberFormat.prototype + +var format = new MyNumberFormat(locales); +var actual = a.map(format.format); +testArraysAreSame(referenceFormatted, actual); + diff --git a/test/suite/intl402/ch11/11.1/11.1.3.js b/test/suite/intl402/ch11/11.1/11.1.3.js new file mode 100644 index 000000000..f0bfb5552 --- /dev/null +++ b/test/suite/intl402/ch11/11.1/11.1.3.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 objects constructed by Intl.NumberFormat have the specified internal properties. + * @author Norbert Lindenberg + */ + +var obj = new Intl.NumberFormat(); + +var actualPrototype = Object.getPrototypeOf(obj); +if (actualPrototype !== Intl.NumberFormat.prototype) { + $ERROR("Prototype of object constructed by Intl.NumberFormat isn't Intl.NumberFormat.prototype; got " + actualPrototype); +} + +if (!Object.isExtensible(obj)) { + $ERROR("Object constructed by Intl.NumberFormat must be extensible."); +} + |