aboutsummaryrefslogtreecommitdiffstats
path: root/test/suite/intl402/ch11/11.1/11.1.1_17.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/suite/intl402/ch11/11.1/11.1.1_17.js')
-rw-r--r--test/suite/intl402/ch11/11.1/11.1.1_17.js81
1 files changed, 81 insertions, 0 deletions
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});
+ });
+});
+