summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/suite/intl402/ch08/8.0/8.0.js49
-rw-r--r--test/suite/intl402/ch08/8.1/8.1.js38
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_1.js23
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_2_1.js23
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_2_2.js23
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_2_3.js23
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_2_4.js30
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.1_2_5.js28
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.2.js30
-rw-r--r--test/suite/intl402/ch09/9.1/9.1.3.js30
-rw-r--r--test/suite/intl402/ch11/11.2/11.2.1.js32
-rw-r--r--test/suite/intl402/ch11/11.2/11.2.2.js34
-rw-r--r--test/suite/intl402/ch11/11.2/11.2.3.js25
-rw-r--r--test/suite/intl402/ch11/11.2/11.2.js23
-rw-r--r--test/suite/intl402/ch11/11.3/11.3.1.js20
-rw-r--r--test/suite/intl402/ch11/11.3/11.3.js20
-rw-r--r--test/suite/intl402/ch12/12.2/12.2.1.js33
-rw-r--r--test/suite/intl402/ch12/12.2/12.2.2.js35
-rw-r--r--test/suite/intl402/ch12/12.2/12.2.3.js26
-rw-r--r--test/suite/intl402/ch12/12.2/12.2.js24
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.1.js21
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.2_2.js34
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.2_3.js26
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.2_4.js66
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.2_5_b.js34
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.2_5_e.js54
-rw-r--r--test/suite/intl402/ch12/12.3/12.3.js21
-rw-r--r--test/suite/intl402/ch13/13.2/13.2.1.js33
-rw-r--r--test/suite/intl402/ch13/13.2/13.2.2.js35
-rw-r--r--test/suite/intl402/ch13/13.2/13.2.3.js26
-rw-r--r--test/suite/intl402/ch13/13.2/13.2.js24
-rw-r--r--test/suite/intl402/ch13/13.3/13.3.1.js21
-rw-r--r--test/suite/intl402/ch13/13.3/13.3.js21
33 files changed, 985 insertions, 0 deletions
diff --git a/test/suite/intl402/ch08/8.0/8.0.js b/test/suite/intl402/ch08/8.0/8.0.js
new file mode 100644
index 000000000..5f68283e5
--- /dev/null
+++ b/test/suite/intl402/ch08/8.0/8.0.js
@@ -0,0 +1,49 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch08/8.0/8.0.js
+ * @description Tests properties of Intl object.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ // We keep Intl extensible and not frozen.
+ if (Object.isFrozen(Intl) === true) {
+ $ERROR('isFrozen(Intl) returns true.')
+ }
+
+ if (Object.isExtensible(Intl) === false) {
+ $ERROR('isExtensible(Intl) returns false.')
+ }
+
+ var falsey = undefined;
+
+ // Intl can't be constructed.
+ try {
+ falsey = new Intl();
+ } catch (e) {
+ }
+
+ if (!!falsey) {
+ $ERROR('Intl object should not be constructable.')
+ }
+
+ // Intl can't be called as a function.
+ try {
+ falsey = Intl();
+ } catch (e) {
+ }
+
+ if (!!falsey) {
+ $ERROR('Intl should not be callable.')
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch08/8.1/8.1.js b/test/suite/intl402/ch08/8.1/8.1.js
new file mode 100644
index 000000000..570f4e1fe
--- /dev/null
+++ b/test/suite/intl402/ch08/8.1/8.1.js
@@ -0,0 +1,38 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch08/8.1/8.1.js
+ * @description Tests that Intl object has proper constructors.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ if (Intl === undefined) {
+ $ERROR('Intl object is undefined.');
+ }
+
+ if (typeof Intl.LocaleList !== 'function') {
+ $ERROR('Intl.LocaleList is not a function.')
+ }
+
+ if (typeof Intl.Collator !== 'function') {
+ $ERROR('Intl.Collator is not a function.')
+ }
+
+ if (typeof Intl.NumberFormat !== 'function') {
+ $ERROR('Intl.NumberFormat is not a function.')
+ }
+
+ if (typeof Intl.DateTimeFormat !== 'function') {
+ $ERROR('Intl.DateTimeFormat is not a function.')
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_1.js b/test/suite/intl402/ch09/9.1/9.1.1_1.js
new file mode 100644
index 000000000..281e6f062
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_1.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_1.js
+ * @description Tests initialization of LocaleList object with no parameters.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = new Intl.LocaleList();
+ if (list.length !== 1) {
+ $ERROR('LocaleList constructed with no arguments should have 1 element.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_2_1.js b/test/suite/intl402/ch09/9.1/9.1.1_2_1.js
new file mode 100644
index 000000000..f96aa7735
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_2_1.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_2_1.js
+ * @description Tests initialization of LocaleList object with an empty list.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = new Intl.LocaleList([]);
+ if (list.length !== 0) {
+ $ERROR('LocaleList constructed with empty list should have 0 elements.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_2_2.js b/test/suite/intl402/ch09/9.1/9.1.1_2_2.js
new file mode 100644
index 000000000..c5d6655c8
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_2_2.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_2_2.js
+ * @description Tests initialization of LocaleList object with duplicate language IDs.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = new Intl.LocaleList(['sr-rs', 'sr-rs']);
+ if (list.length !== 1) {
+ $ERROR('Duplicates should be removed from the list.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_2_3.js b/test/suite/intl402/ch09/9.1/9.1.1_2_3.js
new file mode 100644
index 000000000..6932ebb73
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_2_3.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_2_3.js
+ * @description Tests that language ID gets canonicalized in LocaleList.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = new Intl.LocaleList(['SR-CYRL-rS']);
+ if (list[0] !== 'sr-Cyrl-RS') {
+ $ERROR('Locale ' + list[0] + ' was not properly canonicalized.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_2_4.js b/test/suite/intl402/ch09/9.1/9.1.1_2_4.js
new file mode 100644
index 000000000..a8d7a870a
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_2_4.js
@@ -0,0 +1,30 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_2_4.js
+ * @description Tests initialization of LocaleList object with non-string parameters.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = undefined;
+ try {
+ list = new Intl.LocaleList([5]);
+ } catch(e) {
+ if (!(e instanceof TypeError)) {
+ $ERROR('LocaleList should throw TypeError exception for non-string argument.');
+ }
+ }
+ if (list !== undefined) {
+ $ERROR('LocaleList should throw TypeError exception for non-string argument.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.1_2_5.js b/test/suite/intl402/ch09/9.1/9.1.1_2_5.js
new file mode 100644
index 000000000..b09a57983
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.1_2_5.js
@@ -0,0 +1,28 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.1_2_5.js
+ * @description Tests initialization of LocaleList object with invalid locale IDs.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = undefined;
+ try {
+ list = new Intl.LocaleList(['']);
+ } catch(e) {
+ // Throws invalid language tag exception.
+ }
+ if (list !== undefined) {
+ $ERROR('Empty string should be an invalid locale identifier.');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.2.js b/test/suite/intl402/ch09/9.1/9.1.2.js
new file mode 100644
index 000000000..7be1ec312
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.2.js
@@ -0,0 +1,30 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.2.js
+ * @description Tests Intl.LocaleList as a function.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = Intl.LocaleList();
+
+ if (list.length !== 1) {
+ $ERROR('LocaleList constructed with no arguments should have 1 element.');
+ }
+
+ // Using new Intl.LocaleList and calling Intl.LocaleList should produce the
+ // same result.
+ if (new Intl.LocaleList()[0] !== list[0]) {
+ $ERROR('Intl.LocaleList()[0] should be equal to new Intl.LocaleList()[0]');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch09/9.1/9.1.3.js b/test/suite/intl402/ch09/9.1/9.1.3.js
new file mode 100644
index 000000000..d1bb7e081
--- /dev/null
+++ b/test/suite/intl402/ch09/9.1/9.1.3.js
@@ -0,0 +1,30 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch09/9.1/9.1.3.js
+ * @description Tests Intl.LocaleList as a constructor.
+ */
+
+function testcase() {
+ "use strict";
+
+ var passed = false;
+
+ var list = new Intl.LocaleList();
+
+ if (list.length !== 1) {
+ $ERROR('LocaleList constructed with no arguments should have 1 element.');
+ }
+
+ // Using new Intl.LocaleList and calling Intl.LocaleList should produce the
+ // same result.
+ if (Intl.LocaleList()[0] !== list[0]) {
+ $ERROR('Intl.LocaleList()[0] should be equal to new Intl.LocaleList()[0]');
+ }
+
+ passed = true;
+
+ return passed;
+}
+runTestCase(testcase); \ No newline at end of file
diff --git a/test/suite/intl402/ch11/11.2/11.2.1.js b/test/suite/intl402/ch11/11.2/11.2.1.js
new file mode 100644
index 000000000..e5ceb08fc
--- /dev/null
+++ b/test/suite/intl402/ch11/11.2/11.2.1.js
@@ -0,0 +1,32 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.2/11.2.1.js
+ * @description Tests that the Intl.Collator prototype object exists and
+ * is not writable, enumerable, or configurable.
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var desc;
+
+ if (!Intl.Collator.hasOwnProperty('prototype')) {
+ $ERROR('Intl.Collator has no prototype property');
+ }
+
+ desc = Object.getOwnPropertyDescriptor(Intl.Collator, 'prototype');
+ if (desc.writable === true) {
+ $ERROR('Intl.Collator.prototype is writable.');
+ }
+ if (desc.enumerable === true) {
+ $ERROR('Intl.Collator.prototype is enumerable.');
+ }
+ if (desc.configurable === true) {
+ $ERROR('Intl.Collator.prototype is configurable.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch11/11.2/11.2.2.js b/test/suite/intl402/ch11/11.2/11.2.2.js
new file mode 100644
index 000000000..9d136f77e
--- /dev/null
+++ b/test/suite/intl402/ch11/11.2/11.2.2.js
@@ -0,0 +1,34 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.2/11.2.2.js
+ * @description Tests that the Intl.Collator has a supportedLocalesOf
+ * property, and it works as planned.
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var supported = (new Intl.LocaleList())[0];
+ var notSupported = 'zxx';
+ var requestedLocales = [supported, notSupported];
+
+ var supportedLocales;
+
+ if (!Intl.Collator.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.Collator doesn't have a supportedLocalesOf property.");
+ }
+
+ supportedLocales = Intl.Collator.supportedLocalesOf(requestedLocales);
+ if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+ }
+
+ if (supportedLocales[0] !== supported) {
+ $ERROR('The supported locale is not returned in the supported list.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch11/11.2/11.2.3.js b/test/suite/intl402/ch11/11.2/11.2.3.js
new file mode 100644
index 000000000..98ee05b9b
--- /dev/null
+++ b/test/suite/intl402/ch11/11.2/11.2.3.js
@@ -0,0 +1,25 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.2/11.2.3.js
+ * @description Tests the internal properties of Intl.NumberFormat
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var defaultLocale = (new Intl.LocaleList())[0];
+ 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 that [[relevantExtensionKeys]] === ['nu']
+
+ // FIXME: Find a way to check specified properties of [[localeData]]
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch11/11.2/11.2.js b/test/suite/intl402/ch11/11.2/11.2.js
new file mode 100644
index 000000000..a79f75af3
--- /dev/null
+++ b/test/suite/intl402/ch11/11.2/11.2.js
@@ -0,0 +1,23 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.2/11.2.js
+ * @description Tests that the Intl.Collator constructor has a length
+ * property that equals 2.
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!Intl.Collator.hasOwnProperty('length')) {
+ $ERROR('Intl.Collator has no length property');
+ }
+
+ if (Intl.Collator.length != 2) {
+ $ERROR('Intl.Collator.length is not 2.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch11/11.3/11.3.1.js b/test/suite/intl402/ch11/11.3/11.3.1.js
new file mode 100644
index 000000000..2ca03c726
--- /dev/null
+++ b/test/suite/intl402/ch11/11.3/11.3.1.js
@@ -0,0 +1,20 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.3/11.3.1.js
+ * @description Tests that Intl.Collator.prototype.constructor is the
+ * Intl.Collator.
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (Intl.Collator.prototype.constructor !== Intl.Collator) {
+ $ERROR("Intl.Collator.prototype.constructor is not the same as " +
+ "Intl.Collator");
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch11/11.3/11.3.js b/test/suite/intl402/ch11/11.3/11.3.js
new file mode 100644
index 000000000..9ea63b92b
--- /dev/null
+++ b/test/suite/intl402/ch11/11.3/11.3.js
@@ -0,0 +1,20 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch11/11.3/11.3.js
+ * @description Tests that Intl.Collator.prototype is an intance of
+ * Intl.Collator.
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!(Intl.Collator.prototype instanceof Intl.Collator)) {
+ $ERROR("Intl.Collator's prototype is not an instance of " +
+ "Intl.Collator");
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.2/12.2.1.js b/test/suite/intl402/ch12/12.2/12.2.1.js
new file mode 100644
index 000000000..f4bf51811
--- /dev/null
+++ b/test/suite/intl402/ch12/12.2/12.2.1.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.2/12.2.1.js
+ * @description Tests that the Intl.NumberFormat prototype object exists and
+ * is not writable, enumerable, or configurable.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var desc;
+
+ if (!Intl.NumberFormat.hasOwnProperty('prototype')) {
+ $ERROR('Intl.NumberFormat has no prototype property');
+ }
+
+ desc = Object.getOwnPropertyDescriptor(Intl.NumberFormat, 'prototype');
+ if (desc.writable === true) {
+ $ERROR('Intl.NumberFormat.prototype is writable.');
+ }
+ if (desc.enumerable === true) {
+ $ERROR('Intl.NumberFormat.prototype is enumerable.');
+ }
+ if (desc.configurable === true) {
+ $ERROR('Intl.NumberFormat.prototype is configurable.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.2/12.2.2.js b/test/suite/intl402/ch12/12.2/12.2.2.js
new file mode 100644
index 000000000..d16ecdceb
--- /dev/null
+++ b/test/suite/intl402/ch12/12.2/12.2.2.js
@@ -0,0 +1,35 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.2/12.2.2.js
+ * @description Tests that the Intl.NumberFormat has a supportedLocalesOf
+ * property, and it works as planned.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var supported = (new Intl.LocaleList())[0];
+ var notSupported = 'zxx';
+ var requestedLocales = [supported, notSupported];
+
+ var supportedLocales;
+
+ if (!Intl.NumberFormat.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.NumberFormat doesn't have a supportedLocalesOf property.");
+ }
+
+ supportedLocales = Intl.NumberFormat.supportedLocalesOf(requestedLocales);
+ if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+ }
+
+ if (supportedLocales[0] !== supported) {
+ $ERROR('The supported locale is not returned in the supported list.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.2/12.2.3.js b/test/suite/intl402/ch12/12.2/12.2.3.js
new file mode 100644
index 000000000..743353c52
--- /dev/null
+++ b/test/suite/intl402/ch12/12.2/12.2.3.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.2/12.2.3.js
+ * @description Tests the internal properties of Intl.NumberFormat
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var defaultLocale = (new Intl.LocaleList())[0];
+ 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]]
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.2/12.2.js b/test/suite/intl402/ch12/12.2/12.2.js
new file mode 100644
index 000000000..92c40c656
--- /dev/null
+++ b/test/suite/intl402/ch12/12.2/12.2.js
@@ -0,0 +1,24 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.2/12.2.js
+ * @description Tests that the Intl.NumberFormat constructor has a length
+ * property that equals 2.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!Intl.NumberFormat.hasOwnProperty('length')) {
+ $ERROR('Intl.NumberFormat has no length property');
+ }
+
+ if (Intl.NumberFormat.length != 2) {
+ $ERROR('Intl.NumberFormat.length is not 2.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.1.js b/test/suite/intl402/ch12/12.3/12.3.1.js
new file mode 100644
index 000000000..a00c2df53
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.1.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.1.js
+ * @description Tests that Intl.NumberFormat.prototype.constructor is the
+ * Intl.NumberFormat.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (Intl.NumberFormat.prototype.constructor !== Intl.NumberFormat) {
+ $ERROR("Intl.NumberFormat.prototype.constructor is not the same as "
+ +"Intl.NumberFormat");
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.2_2.js b/test/suite/intl402/ch12/12.3/12.3.2_2.js
new file mode 100644
index 000000000..09fafe15d
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.2_2.js
@@ -0,0 +1,34 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.2_2.js
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * converts other types to numbers.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var formatter = new Intl.NumberFormat();
+ var testData = [undefined, null, true, '0.6666666'];
+ var number;
+ var i, input, correctResult, result;
+
+ for (i in testData) {
+ input = testData[i];
+ number = +input;
+ correctResult = formatter.format(number);
+
+ result = formatter.format(input);
+ if (result !== correctResult) {
+ $ERROR('Intl.NumberFormat does not convert other ' +
+ 'types to numbers. Input: "'+input+'" Output: "'+result+'" '+
+ 'Expected output: "'+correctResult+'"');
+ }
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.2_3.js b/test/suite/intl402/ch12/12.3/12.3.2_3.js
new file mode 100644
index 000000000..21fc256fe
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.2_3.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.2_3.js
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * doesn't treat all numbers as negative.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var formatter = new Intl.NumberFormat();
+
+ if (formatter.format(1) === formatter.format(-1)) {
+ $ERROR('Intl.NumberFormat is formatting 1 and -1 the same way.');
+ }
+
+ if (formatter.format(-0) !== formatter.format(0)) {
+ $ERROR('Intl.NumberFormat is formatting signed zeros differently.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.2_4.js b/test/suite/intl402/ch12/12.3/12.3.2_4.js
new file mode 100644
index 000000000..c3dae9600
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.2_4.js
@@ -0,0 +1,66 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.2_4.js
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * hangles NaN, Infinity, and -Infinity properly.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ // FIXME: We are only listing Numeric_Type=Decimal. May need to add more
+ // when the spec clarifies. Current as of Unicode 6.1.
+ var hasUnicodeDigits = new RegExp('.*([' +
+ '\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F' +
+ '\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF' +
+ '\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9' +
+ '\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819' +
+ '\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59' +
+ '\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9' +
+ '\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19' +
+ ']|' +
+ '\uD801[\uDCA0-\uDCA9]|' +
+ '\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9]|' +
+ '\uD805[\uDEC0-\uDEC9]|' +
+ '\uD835[\uDFCE-\uDFFF])');
+
+ var formatter = new Intl.NumberFormat();
+ var formattedNaN = formatter.format(NaN);
+ var formattedInfinity = formatter.format(Infinity);
+ var formattedNegativeInfinity = formatter.format(-Infinity);
+
+ if (formattedNaN === formattedInfinity) {
+ $ERROR('Intl.NumberFormat formats NaN and Infinity the ' +
+ 'same way.');
+ }
+
+ if (formattedNaN === formattedNegativeInfinity) {
+ $ERROR('Intl.NumberFormat formats NaN and negative ' +
+ 'Infinity the same way.');
+ }
+
+ if (formattedInfinity === formattedNegativeInfinity) {
+ $ERROR('Intl.NumberFormat formats Infinity and ' +
+ 'negaive Infinity the same way.');
+ }
+
+ if (hasUnicodeDigits.test(formattedNaN)) {
+ $ERROR('Intl.NumberFormat formats NaN using a digit.');
+ }
+
+ if (hasUnicodeDigits.test(formattedInfinity)) {
+ $ERROR('Intl.NumberFormat formats Infinity using a ' +
+ 'digit.');
+ }
+
+ if (hasUnicodeDigits.test(formattedNegativeInfinity)) {
+ $ERROR('Intl.NumberFormat formats negative Infinity ' +
+ 'using a digit.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.2_5_b.js b/test/suite/intl402/ch12/12.3/12.3.2_5_b.js
new file mode 100644
index 000000000..94a900d56
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.2_5_b.js
@@ -0,0 +1,34 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.2_5_b.js
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * formats percent values properly.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var numberFormatter = new Intl.NumberFormat();
+ var percentFormatter = new Intl.NumberFormat(undefined, {style: 'percent'});
+
+ var formattedTwenty = numberFormatter.format(20);
+ var formattedTwentyPercent = percentFormatter.format(0.20);
+
+ // FIXME: May not work for some theoretical locales where percents and
+ // normal numbers are formatted using different numbering systems.
+ if (formattedTwentyPercent.indexOf(formattedTwenty) === -1) {
+ $ERROR("Intl.NumberFormat's formatting of 20% does not include a " +
+ "formatting of 20 as a substring.");
+ }
+
+ // FIXME: Move this to somewhere appropriate
+ if (percentFormatter.format(0.011) === percentFormatter.format(0.02)) {
+ $ERROR('Intl.NumberFormat is formatting 1.1% and 2% the same way.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.2_5_e.js b/test/suite/intl402/ch12/12.3/12.3.2_5_e.js
new file mode 100644
index 000000000..4d23bd1a9
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.2_5_e.js
@@ -0,0 +1,54 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.2_5_e.js
+ * @description Tests that Intl.NumberFormat.prototype.format
+ * supports all alternative numbering systems.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var numberingSystems = {
+ arab: 0x0660,
+ arabext: 0x06F0,
+ beng: 0x09E6,
+ deva: 0x0966,
+ fullwide: 0xFF10,
+ gujr: 0x0AE6,
+ guru: 0x0A66,
+ hanidec: [0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB,
+ 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D],
+ khmr: 0x17E0,
+ knda: 0x0CE6,
+ laoo: 0x0ED0,
+ latn: 0x0030,
+ mlym: 0x0D66,
+ mong: 0x1810,
+ mymr: 0x1040,
+ orya: 0x0B66,
+ tamldec: 0x0BE6,
+ telu: 0x0C66,
+ thai: 0x0E50,
+ tibt: 0x0F20
+ };
+
+ var options, formatter;
+ var s, zeroCode, digitList;
+
+ for (s in numberingSystems) {
+ zeroCode = numberingSystems[s];
+ if (typeof zeroCode === 'number') {
+ digitList = [zeroCode, zeroCode+1, zeroCode+2, zeroCode+3, zeroCode+4,
+ zeroCode+5, zeroCode+6, zeroCode+7, zeroCode+8, zeroCode+9];
+ numberingSystems[s] = digitList;
+ }
+ }
+
+ // FIXME: Unfinished
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch12/12.3/12.3.js b/test/suite/intl402/ch12/12.3/12.3.js
new file mode 100644
index 000000000..7327197bf
--- /dev/null
+++ b/test/suite/intl402/ch12/12.3/12.3.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch12/12.3/12.3.js
+ * @description Tests that Intl.NumberFormat.prototype is an intance of
+ * Intl.NumberFormat.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!(Intl.NumberFormat.prototype instanceof Intl.NumberFormat)) {
+ $ERROR("Intl.NumberFormat's prototype is not an instance of " +
+ "Intl.NumberFormat");
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.2/13.2.1.js b/test/suite/intl402/ch13/13.2/13.2.1.js
new file mode 100644
index 000000000..c5a7b1967
--- /dev/null
+++ b/test/suite/intl402/ch13/13.2/13.2.1.js
@@ -0,0 +1,33 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.2/13.2.1.js
+ * @description Tests that the Intl.DateTimeFormat prototype object exists and
+ * is not writable, enumerable, or configurable.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var desc;
+
+ if (!Intl.DateTimeFormat.hasOwnProperty('prototype')) {
+ $ERROR('Intl.DateTimeFormat has no prototype property');
+ }
+
+ desc = Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype');
+ if (desc.writable === true) {
+ $ERROR('Intl.DateTimeFormat.prototype is writable.');
+ }
+ if (desc.enumerable === true) {
+ $ERROR('Intl.DateTimeFormat.prototype is enumerable.');
+ }
+ if (desc.configurable === true) {
+ $ERROR('Intl.DateTimeFormat.prototype is configurable.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.2/13.2.2.js b/test/suite/intl402/ch13/13.2/13.2.2.js
new file mode 100644
index 000000000..9bcfa54f6
--- /dev/null
+++ b/test/suite/intl402/ch13/13.2/13.2.2.js
@@ -0,0 +1,35 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.2/13.2.2.js
+ * @description Tests that the Intl.DateTimeFormat has a supportedLocalesOf
+ * property, and it works as planned.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var supported = (new Intl.LocaleList())[0];
+ var notSupported = 'zxx';
+ var requestedLocales = [supported, notSupported];
+
+ var supportedLocales;
+
+ if (!Intl.DateTimeFormat.hasOwnProperty('supportedLocalesOf')) {
+ $ERROR("Intl.DateTimeFormat doesn't have a supportedLocalesOf property.");
+ }
+
+ supportedLocales = Intl.DateTimeFormat.supportedLocalesOf(requestedLocales);
+ if (supportedLocales.length !== 1) {
+ $ERROR('The length of supported locales list is not 1.');
+ }
+
+ if (supportedLocales[0] !== supported) {
+ $ERROR('The supported locale is not returned in the supported list.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.2/13.2.3.js b/test/suite/intl402/ch13/13.2/13.2.3.js
new file mode 100644
index 000000000..56f9eadf5
--- /dev/null
+++ b/test/suite/intl402/ch13/13.2/13.2.3.js
@@ -0,0 +1,26 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.2/13.2.3.js
+ * @description Tests the internal properties of Intl.DateTimeFormat
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ var defaultLocale = (new Intl.LocaleList())[0];
+ 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]]
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.2/13.2.js b/test/suite/intl402/ch13/13.2/13.2.js
new file mode 100644
index 000000000..e58ac5dc4
--- /dev/null
+++ b/test/suite/intl402/ch13/13.2/13.2.js
@@ -0,0 +1,24 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.2/13.2.js
+ * @description Tests that the Intl.DateTimeFormat constructor has a length
+ * property that equals 2.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!Intl.DateTimeFormat.hasOwnProperty('length')) {
+ $ERROR('Intl.DateTimeFormat has no length property');
+ }
+
+ if (Intl.DateTimeFormat.length != 2) {
+ $ERROR('Intl.DateTimeFormat.length is not 2.');
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.3/13.3.1.js b/test/suite/intl402/ch13/13.3/13.3.1.js
new file mode 100644
index 000000000..8ce7b92b9
--- /dev/null
+++ b/test/suite/intl402/ch13/13.3/13.3.1.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.3/13.3.1.js
+ * @description Tests that Intl.DateTimeFormat.prototype.constructor is the
+ * Intl.DateTimeFormat.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (Intl.DateTimeFormat.prototype.constructor !== Intl.DateTimeFormat) {
+ $ERROR("Intl.DateTimeFormat.prototype.constructor is not the same as "
+ +"Intl.DateTimeFormat");
+ }
+
+ return true;
+}
+runTestCase(testcase);
diff --git a/test/suite/intl402/ch13/13.3/13.3.js b/test/suite/intl402/ch13/13.3/13.3.js
new file mode 100644
index 000000000..bb33a2037
--- /dev/null
+++ b/test/suite/intl402/ch13/13.3/13.3.js
@@ -0,0 +1,21 @@
+// Copyright 2012 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/**
+ * @path intl402/ch13/13.3/13.3.js
+ * @description Tests that Intl.DateTimeFormat.prototype is an intance of
+ * Intl.DateTimeFormat.
+ * @author: Roozbeh Pournader
+ */
+
+var testcase = function() {
+ "use strict";
+
+ if (!(Intl.DateTimeFormat.prototype instanceof Intl.DateTimeFormat)) {
+ $ERROR("Intl.DateTimeFormat's prototype is not an instance of " +
+ "Intl.DateTimeFormat");
+ }
+
+ return true;
+}
+runTestCase(testcase);