summaryrefslogtreecommitdiffstats
path: root/intl/locale/tests
diff options
context:
space:
mode:
Diffstat (limited to 'intl/locale/tests')
-rw-r--r--intl/locale/tests/nsLocaleTest.html44
-rw-r--r--intl/locale/tests/sort/us-ascii_base.txt95
-rw-r--r--intl/locale/tests/sort/us-ascii_base_case_res.txt96
-rw-r--r--intl/locale/tests/sort/us-ascii_base_nocase_res.txt96
-rw-r--r--intl/locale/tests/sort/us-ascii_sort.txt78
-rw-r--r--intl/locale/tests/sort/us-ascii_sort_case_res.txt79
-rw-r--r--intl/locale/tests/sort/us-ascii_sort_nocase_res.txt79
-rw-r--r--intl/locale/tests/unit/data/chrome.manifest1
-rw-r--r--intl/locale/tests/unit/data/intl_on_workers_worker.js4
-rw-r--r--intl/locale/tests/unit/test_bug1086527.js20
-rw-r--r--intl/locale/tests/unit/test_bug22310.js54
-rw-r--r--intl/locale/tests/unit/test_bug371611.js26
-rw-r--r--intl/locale/tests/unit/test_bug374040.js39
-rw-r--r--intl/locale/tests/unit/test_collation_mac_icu.js83
-rw-r--r--intl/locale/tests/unit/test_intl_on_workers.js23
-rw-r--r--intl/locale/tests/unit/test_pluralForm.js615
-rw-r--r--intl/locale/tests/unit/test_pluralForm_english.js26
-rw-r--r--intl/locale/tests/unit/test_pluralForm_makeGetter.js36
-rw-r--r--intl/locale/tests/unit/xpcshell.ini22
19 files changed, 1516 insertions, 0 deletions
diff --git a/intl/locale/tests/nsLocaleTest.html b/intl/locale/tests/nsLocaleTest.html
new file mode 100644
index 000000000..5b7aa415b
--- /dev/null
+++ b/intl/locale/tests/nsLocaleTest.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+ <title>nsLocale Scriptability Test</title>
+
+</head>
+
+<script>
+
+var localeService = null;
+var applicationLocale = null;
+var systemLocale = null;
+
+function get_locale_service() {
+ localeService = Components.classes["@mozilla.org/intl/nslocaleservice;1"].createInstance();
+ localeService = localeService.QueryInterface(Components.interfaces.nsILocaleService);
+ applicationLocale = localeService.GetApplicationLocale();
+ systemLocale = localeService.GetSystemLocale();
+}
+
+function do_application_locale(t) {
+ t.value = applicationLocale.GetCategory("NSILOCALE_MESSAGES");
+}
+
+function do_system_locale(t) {
+ t.value = systemLocale.GetCategory("NSILOCALE_MESSAGES");
+}
+
+</script>
+
+<body BGCOLOR="#FFFFFF" TEXT="#000000" onLoad="get_locale_service();">
+
+<form name="locale">
+<b>Application Locale: </b>
+<input type="button" value="Get Application Locale" onClick=do_application_locale(this);></br>
+<b>System Locale: </b>
+<input type="button" value="Get System Locale" onClick=do_system_locale(this);></br>
+</form>
+
+<hr>
+<address><a href="mailto:tague@netscape.com">Tague Griffith</a></address>
+</body>
+</html>
+
+
diff --git a/intl/locale/tests/sort/us-ascii_base.txt b/intl/locale/tests/sort/us-ascii_base.txt
new file mode 100644
index 000000000..3bc7fbc7b
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_base.txt
@@ -0,0 +1,95 @@
+
+!
+"
+#
+$
+%
+&
+'
+(
+)
+*
++
+,
+-
+.
+/
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+:
+;
+<
+=
+>
+?
+@
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
+[
+\
+]
+^
+_
+`
+a
+b
+c
+d
+e
+f
+g
+h
+i
+j
+k
+l
+m
+n
+o
+p
+q
+r
+s
+t
+u
+v
+w
+x
+y
+z
+{
+|
+}
+~
diff --git a/intl/locale/tests/sort/us-ascii_base_case_res.txt b/intl/locale/tests/sort/us-ascii_base_case_res.txt
new file mode 100644
index 000000000..3e526d226
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_base_case_res.txt
@@ -0,0 +1,96 @@
+'
+-
+
+!
+"
+#
+$
+%
+&
+(
+)
+*
+,
+.
+/
+:
+;
+?
+@
+[
+\
+]
+^
+_
+`
+{
+|
+}
+~
++
+<
+=
+>
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+a
+A
+b
+B
+c
+C
+d
+D
+e
+E
+f
+F
+g
+G
+h
+H
+i
+I
+j
+J
+k
+K
+l
+L
+m
+M
+n
+N
+o
+O
+p
+P
+q
+Q
+r
+R
+s
+S
+t
+T
+u
+U
+v
+V
+w
+W
+x
+X
+y
+Y
+z
+Z
+
diff --git a/intl/locale/tests/sort/us-ascii_base_nocase_res.txt b/intl/locale/tests/sort/us-ascii_base_nocase_res.txt
new file mode 100644
index 000000000..2d18096db
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_base_nocase_res.txt
@@ -0,0 +1,96 @@
+'
+-
+
+!
+"
+#
+$
+%
+&
+(
+)
+*
+,
+.
+/
+:
+;
+?
+@
+[
+\
+]
+^
+_
+`
+{
+|
+}
+~
++
+<
+=
+>
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+A
+a
+B
+b
+C
+c
+d
+D
+e
+E
+f
+F
+g
+G
+h
+H
+i
+I
+j
+J
+k
+K
+L
+l
+m
+M
+n
+N
+O
+o
+p
+P
+q
+Q
+r
+R
+s
+S
+t
+T
+u
+U
+v
+V
+w
+W
+X
+x
+Y
+y
+Z
+z
+
diff --git a/intl/locale/tests/sort/us-ascii_sort.txt b/intl/locale/tests/sort/us-ascii_sort.txt
new file mode 100644
index 000000000..b6962f8de
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_sort.txt
@@ -0,0 +1,78 @@
+ludwig van beethoven
+Ludwig van Beethoven
+Ludwig van beethoven
+Jane
+jane
+JANE
+jAne
+jaNe
+janE
+JAne
+JaNe
+JanE
+JANe
+JaNE
+JAnE
+jANE
+Umberto Eco
+Umberto eco
+umberto eco
+umberto Eco
+UMBERTO ECO
+ace
+bash
+*ace
+!ace
+%ace
+~ace
+#ace
+cork
+denizen
+[denizen]
+(denizen)
+{denizen}
+/denizen/
+#denizen#
+$denizen$
+@denizen
+elf
+full
+gnome
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Japanese
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Javanese
+hint
+Internationalization
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization
+Zinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizatio
+n
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalization
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTioninternationalizationinternationalizationinternationalizationinternationalization
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTion
+jostle
+kin
+Laymen
+lumens
+Lumens
+motleycrew
+motley crew
+niven's creative talents
+nivens creative talents
+opie
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rockies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rokkies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the rockies
+quilt's
+quilts
+quilt
+Rondo
+street
+tamale oxidization and iodization in rapid progress
+tamale oxidization and iodization in rapid Progress
+until
+vera
+Wobble
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoneme
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoname
+yearn
+zodiac
+
diff --git a/intl/locale/tests/sort/us-ascii_sort_case_res.txt b/intl/locale/tests/sort/us-ascii_sort_case_res.txt
new file mode 100644
index 000000000..2720a8342
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_sort_case_res.txt
@@ -0,0 +1,79 @@
+!ace
+#ace
+#denizen#
+$denizen$
+%ace
+(denizen)
+*ace
+/denizen/
+@denizen
+[denizen]
+{denizen}
+~ace
+ace
+bash
+cork
+denizen
+elf
+full
+gnome
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Japanese
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Javanese
+hint
+Internationalization
+jane
+janE
+jaNe
+jAne
+jANE
+Jane
+JanE
+JaNe
+JaNE
+JAne
+JAnE
+JANe
+JANE
+jostle
+kin
+Laymen
+ludwig van beethoven
+Ludwig van beethoven
+Ludwig van Beethoven
+lumens
+Lumens
+motley crew
+motleycrew
+nivens creative talents
+niven's creative talents
+opie
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the rockies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rockies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rokkies
+quilt
+quilts
+quilt's
+Rondo
+street
+tamale oxidization and iodization in rapid progress
+tamale oxidization and iodization in rapid Progress
+umberto eco
+umberto Eco
+Umberto eco
+Umberto Eco
+UMBERTO ECO
+until
+veda
+Veda
+vera
+Vera
+Wobble
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoname
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoneme
+yearn
+Zinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalization
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTion
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTioninternationalizationinternationalizationinternationalizationinternationalization
+zodiac
diff --git a/intl/locale/tests/sort/us-ascii_sort_nocase_res.txt b/intl/locale/tests/sort/us-ascii_sort_nocase_res.txt
new file mode 100644
index 000000000..fa3426d4e
--- /dev/null
+++ b/intl/locale/tests/sort/us-ascii_sort_nocase_res.txt
@@ -0,0 +1,79 @@
+!ace
+#ace
+#denizen#
+$denizen$
+%ace
+(denizen)
+*ace
+/denizen/
+@denizen
+[denizen]
+{denizen}
+~ace
+ace
+bash
+cork
+denizen
+elf
+full
+gnome
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Japanese
+gnomic investigation of typological factors in the grammaticalization process of Malayo-Polynesian substaratum in the protoAltaic vocabulary core in the proto-layers of pre-historic Javanese
+hint
+Internationalization
+JANe
+jANE
+JAnE
+JaNE
+Jane
+JanE
+JaNe
+JAne
+janE
+jaNe
+jAne
+JANE
+jane
+jostle
+kin
+Laymen
+Ludwig van beethoven
+Ludwig van Beethoven
+ludwig van beethoven
+Lumens
+lumens
+motley crew
+motleycrew
+nivens creative talents
+niven's creative talents
+opie
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the rockies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rockies
+posh restaurants in surbanized and still urban incorporated subsection of this beautifl city in the Rokkies
+quilt
+quilts
+quilt's
+Rondo
+street
+tamale oxidization and iodization in rapid Progress
+tamale oxidization and iodization in rapid progress
+Umberto eco
+Umberto Eco
+umberto eco
+UMBERTO ECO
+umberto Eco
+until
+Veda
+veda
+Vera
+vera
+Wobble
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoname
+Xanadu's legenary imaginary floccinaucinihilipilification in localization of theoretical portions of glottochronological understanding of the phoneme
+yearn
+Zinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization internationalizationinternationalizationinternationalizationinternationalizationinternationalization
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTioninternationalizationinternationalizationinternationalizationinternationalization
+ZinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizaTion
+Zinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalizationinternationalization
+zodiac
diff --git a/intl/locale/tests/unit/data/chrome.manifest b/intl/locale/tests/unit/data/chrome.manifest
new file mode 100644
index 000000000..a8678deef
--- /dev/null
+++ b/intl/locale/tests/unit/data/chrome.manifest
@@ -0,0 +1 @@
+content locale ./
diff --git a/intl/locale/tests/unit/data/intl_on_workers_worker.js b/intl/locale/tests/unit/data/intl_on_workers_worker.js
new file mode 100644
index 000000000..98aeeb5c0
--- /dev/null
+++ b/intl/locale/tests/unit/data/intl_on_workers_worker.js
@@ -0,0 +1,4 @@
+self.onmessage = function (data) {
+ let myLocale = Intl.NumberFormat().resolvedOptions().locale;
+ self.postMessage(myLocale);
+};
diff --git a/intl/locale/tests/unit/test_bug1086527.js b/intl/locale/tests/unit/test_bug1086527.js
new file mode 100644
index 000000000..ae0c5b17a
--- /dev/null
+++ b/intl/locale/tests/unit/test_bug1086527.js
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This unit test makes sure that PluralForm.get can be called from strict mode
+ */
+
+Components.utils.import("resource://gre/modules/PluralForm.jsm");
+
+delete PluralForm.numForms;
+delete PluralForm.get;
+[PluralForm.get, PluralForm.numForms] = PluralForm.makeGetter(9);
+
+function run_test() {
+ "use strict";
+
+ do_check_eq(3, PluralForm.numForms());
+ do_check_eq("one", PluralForm.get(5, 'one;many'));
+}
diff --git a/intl/locale/tests/unit/test_bug22310.js b/intl/locale/tests/unit/test_bug22310.js
new file mode 100644
index 000000000..d0877db5d
--- /dev/null
+++ b/intl/locale/tests/unit/test_bug22310.js
@@ -0,0 +1,54 @@
+String.prototype.has = function(s) { return this.indexOf(s) != -1; }
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+
+function dt(locale) {
+ var date = new Date("2008-06-30T13:56:34");
+ const dtOptions = { year: 'numeric', month: 'long', day: 'numeric',
+ hour: 'numeric', minute: 'numeric', second: 'numeric' };
+ return date.toLocaleString(locale, dtOptions);
+}
+
+var all_passed = true;
+const tests =
+[
+ [dt("en-US").has("June"), "month name in en-US"],
+ [dt("en-US").has("2008"), "year in en-US"],
+ [dt("da").has("jun"), "month name in da"],
+ [dt("da-DK") == dt("da"), "da same as da-DK"],
+ [dt("en-GB").has("30") && dt("en-GB").has("June") &&
+ dt("en-GB").indexOf("30") < dt("en-GB").indexOf("June"),
+ "day before month in en-GB"],
+ [dt("en-US").has("30") && dt("en-US").has("June") &&
+ dt("en-US").indexOf("30") > dt("en-US").indexOf("June"),
+ "month before day in en-US"],
+ [dt("ja-JP").has("\u5E746\u670830\u65E5"), "year month and day in ja-JP"],
+ // The Firefox locale code ja-JP-mac will be resolved to a BCP47-compliant
+ // tag ja-JP-x-lvariant-mac by uloc_toLanguageTag
+ [dt("ja-JP") == dt("ja-JP-x-lvariant-mac"), "ja-JP-x-lvariant-mac same as ja-JP"],
+ [dt("nn-NO").has("juni"), "month name in nn-NO"],
+ [dt("nb-NO").has("juni"), "month name in nb-NO"],
+ // Bug 1261775 - failures on win10
+ //[dt("no-NO").has("30. juni"), "month name in no-NO"],
+ [dt("sv-SE").has("30 jun"), "month name in sv-SE"],
+ [dt("kok").has("\u091C\u0942\u0928"), "month name in kok"],
+ [dt("ta-IN").has("\u0B9C\u0BC2\u0BA9\u0BCD"), "month name in ta-IN"],
+ [dt("ab-CD").length > 0, "fallback for ab-CD"]
+];
+
+function one_test(testcase, msg)
+{
+ if (!testcase) {
+ all_passed = false;
+ dump("Unexpected date format: " + msg + "\n");
+ }
+}
+
+function run_test()
+{
+ for (var i = 0; i < tests.length; ++i) {
+ one_test(tests[i][0], tests[i][1]);
+ }
+ do_check_true(all_passed);
+}
diff --git a/intl/locale/tests/unit/test_bug371611.js b/intl/locale/tests/unit/test_bug371611.js
new file mode 100644
index 000000000..807c9ecc5
--- /dev/null
+++ b/intl/locale/tests/unit/test_bug371611.js
@@ -0,0 +1,26 @@
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+var Cr = Components.results;
+
+function test_formatdatetime_return()
+{
+ var dateConv = Cc["@mozilla.org/intl/scriptabledateformat;1"].
+ getService(Ci.nsIScriptableDateFormat);
+
+ /* Testing if we throw instead of crashing when we are passed 0s. */
+ var x = false;
+ try {
+ dateConv.FormatDate("", Ci.nsIScriptableDateFormat.dateFormatLong,
+ 0, 0, 0);
+ }
+ catch (e if (e.result == Cr.NS_ERROR_INVALID_ARG)) {
+ x = true;
+ }
+ if (!x)
+ do_throw("FormatDate didn't throw when passed 0 for its arguments.");
+}
+
+function run_test()
+{
+ test_formatdatetime_return();
+}
diff --git a/intl/locale/tests/unit/test_bug374040.js b/intl/locale/tests/unit/test_bug374040.js
new file mode 100644
index 000000000..f662c235d
--- /dev/null
+++ b/intl/locale/tests/unit/test_bug374040.js
@@ -0,0 +1,39 @@
+function test_full() {
+ var date = new Date();
+ var scriptableDateServ =
+ Components.classes["@mozilla.org/intl/scriptabledateformat;1"].createInstance(Components.interfaces.nsIScriptableDateFormat);
+
+ var dateStrXpcom = scriptableDateServ.FormatDateTime("",
+ scriptableDateServ.dateFormatLong, scriptableDateServ.timeFormatSeconds,
+ date.getFullYear(), date.getMonth()+1, date.getDate(), date.getHours(),
+ date.getMinutes(), date.getSeconds());
+
+ var dateStrJs = date.toLocaleString();
+
+ do_check_eq(dateStrXpcom, dateStrJs);
+
+}
+
+function test_kTimeFormatSeconds() {
+ var date = new Date();
+ var scriptableDateServ =
+ Components.classes["@mozilla.org/intl/scriptabledateformat;1"].createInstance(Components.interfaces.nsIScriptableDateFormat);
+
+ var dateStrXpcom = scriptableDateServ.FormatDateTime("",
+ scriptableDateServ.dateFormatLong, scriptableDateServ.timeFormatNone,
+ date.getFullYear(), date.getMonth()+1, date.getDate(), date.getHours(),
+ date.getMinutes(), date.getSeconds());
+
+ var dateStrJs = date.toLocaleDateString()
+
+ do_check_eq(dateStrXpcom, dateStrJs);
+
+}
+
+function run_test()
+{
+ // XXX test disabled due to bug 421790
+ return;
+ test_full();
+ test_kTimeFormatSeconds();
+}
diff --git a/intl/locale/tests/unit/test_collation_mac_icu.js b/intl/locale/tests/unit/test_collation_mac_icu.js
new file mode 100644
index 000000000..32ebc60eb
--- /dev/null
+++ b/intl/locale/tests/unit/test_collation_mac_icu.js
@@ -0,0 +1,83 @@
+var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
+
+Cu.import("resource://gre/modules/Services.jsm");
+
+function run_test()
+{
+ var input = [
+ "Argentina",
+ "Oerlikon",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "la France",
+ "¡viva España!",
+ "Österreich",
+ "中国",
+ "日本",
+ "한국",
+ ];
+
+ function test(locale, expected) {
+ var localeSvc = Cc["@mozilla.org/intl/nslocaleservice;1"].
+ getService(Ci.nsILocaleService);
+ var collator = Cc["@mozilla.org/intl/collation-factory;1"].
+ createInstance(Ci.nsICollationFactory).
+ CreateCollation(localeSvc.newLocale(locale));
+ var strength = Ci.nsICollation.kCollationStrengthDefault;
+ var actual = input.sort((x, y) => collator.compareString(strength, x,y));
+ deepEqual(actual, expected, locale);
+ }
+
+ // Locale en-US; default options.
+ test("en-US", [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Österreich",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "한국",
+ "中国",
+ "日本",
+ ]);
+
+ // Locale sv-SE; default options.
+ // Swedish treats "Ö" as a separate character, which sorts after "Z".
+ test("sv-SE", [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "Österreich",
+ "한국",
+ "中国",
+ "日本",
+ ]);
+
+ // Locale de-DE; default options.
+ // In German standard sorting, umlauted characters are treated as variants
+ // of their base characters: ä ≅ a, ö ≅ o, ü ≅ u.
+ test("de-DE", [
+ "¡viva España!",
+ "Argentina",
+ "la France",
+ "Oerlikon",
+ "Offenbach",
+ "Österreich",
+ "Sverige",
+ "Vaticano",
+ "Zimbabwe",
+ "한국",
+ "中国",
+ "日本",
+ ]);
+}
diff --git a/intl/locale/tests/unit/test_intl_on_workers.js b/intl/locale/tests/unit/test_intl_on_workers.js
new file mode 100644
index 000000000..899e39d38
--- /dev/null
+++ b/intl/locale/tests/unit/test_intl_on_workers.js
@@ -0,0 +1,23 @@
+function run_test() {
+ do_load_manifest("data/chrome.manifest");
+
+ if (typeof Intl !== "object") {
+ dump("Intl not enabled, skipping test\n");
+ equal(true, true);
+ return;
+ }
+
+ let mainThreadLocale = Intl.NumberFormat().resolvedOptions().locale;
+ let testWorker = new Worker("chrome://locale/content/intl_on_workers_worker.js");
+ testWorker.onmessage = function (e) {
+ try {
+ let workerLocale = e.data;
+ equal(mainThreadLocale, workerLocale, "Worker should inherit Intl locale from main thread.");
+ } finally {
+ do_test_finished();
+ }
+ };
+
+ do_test_pending();
+ testWorker.postMessage("go!");
+}
diff --git a/intl/locale/tests/unit/test_pluralForm.js b/intl/locale/tests/unit/test_pluralForm.js
new file mode 100644
index 000000000..834605b1f
--- /dev/null
+++ b/intl/locale/tests/unit/test_pluralForm.js
@@ -0,0 +1,615 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Make sure each of the plural forms have the correct number of forms and
+ * match up in functionality.
+ */
+
+Components.utils.import("resource://gre/modules/PluralForm.jsm");
+
+function run_test()
+{
+ let allExpect = [[
+ // 0: Chinese 0-9, 10-19, ..., 90-99
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ // 100-109, 110-119, ..., 190-199
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ // 200-209, 210-219, ..., 290-299
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ 1,1,1,1,1,1,1,1,1,1,
+ ], [
+ // 1: English 0-9, 10-19, ..., 90-99
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ // 100-109, 110-119, ..., 190-199
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ // 200-209, 210-219, ..., 290-299
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ ], [
+ // 2: French 0-9, 10-19, ..., 90-99
+ 1,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ // 100-109, 110-119, ..., 190-199
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ // 200-209, 210-219, ..., 290-299
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ ], [
+ // 3: Latvian 0-9, 10-19, ..., 90-99
+ 1,2,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ 3,2,3,3,3,3,3,3,3,3,
+ ], [
+ // 4: Scottish Gaelic 0-9, 10-19, ..., 90-99
+ 4,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 100-109, 110-119, ..., 190-199
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 200-209, 210-219, ..., 290-299
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ ], [
+ // 5: Romanian 0-9, 10-19, ..., 90-99
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,2,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ ], [
+ // 6: Lithuanian 0-9, 10-19, ..., 90-99
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ 2,1,3,3,3,3,3,3,3,3,
+ ], [
+ // 7: Russian 0-9, 10-19, ..., 90-99
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,1,2,2,2,3,3,3,3,3,
+ ], [
+ // 8: Slovak 0-9, 10-19, ..., 90-99
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ ], [
+ // 9: Polish 0-9, 10-19, ..., 90-99
+ 3,1,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,3,3,3,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ 3,3,2,2,2,3,3,3,3,3,
+ ], [
+ // 10: Slovenian 0-9, 10-19, ..., 90-99
+ 4,1,2,3,3,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 100-109, 110-119, ..., 190-199
+ 4,1,2,3,3,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 200-209, 210-219, ..., 290-299
+ 4,1,2,3,3,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ ], [
+ // 11: Irish Gaeilge 0-9, 10-19, ..., 90-99
+ 5,1,2,3,3,3,3,4,4,4,
+ 4,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ // 100-109, 110-119, ..., 190-199
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ // 200-209, 210-219, ..., 290-299
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,
+ ], [
+ // 12: Arabic 0-9, 10-19, ..., 90-99
+ 6,1,2,3,3,3,3,3,3,3,
+ 3,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 100-109, 110-119, ..., 190-199
+ 5,5,5,3,3,3,3,3,3,3,
+ 3,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 200-209, 210-219, ..., 290-299
+ 5,5,5,3,3,3,3,3,3,3,
+ 3,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ ], [
+ // 13: Maltese 0-9, 10-19, ..., 90-99
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 100-109, 110-119, ..., 190-199
+ 4,2,2,2,2,2,2,2,2,2,
+ 2,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ // 200-209, 210-219, ..., 290-299
+ 4,2,2,2,2,2,2,2,2,2,
+ 2,3,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ 4,4,4,4,4,4,4,4,4,4,
+ ], [
+ // 14: Macedonian 0-9, 10-19, ..., 90-99
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ // 100-109, 110-119, ..., 190-199
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ // 200-209, 210-219, ..., 290-299
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ 3,1,2,3,3,3,3,3,3,3,
+ ], [
+ // 15: Icelandic 0-9, 10-19, ..., 90-99
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ // 100-109, 110-119, ..., 190-199
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ // 200-209, 210-219, ..., 290-299
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,2,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ 2,1,2,2,2,2,2,2,2,2,
+ ], [
+ // 16: Breton 0-9, 10-19, ..., 90-99
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ // 100-109, 110-119, ..., 190-199
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ // 200-209, 210-219, ..., 290-299
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ 5,1,2,3,3,5,5,5,5,3,
+ 5,5,5,5,5,5,5,5,5,5,
+ ]];
+
+ for (let [rule, expect] in Iterator(allExpect)) {
+ print("\nTesting rule #" + rule);
+
+ let [get, numForms] = PluralForm.makeGetter(rule);
+
+ // Make sure the largest value expected matches the number of plural forms
+ let maxExpect = Math.max.apply(this, expect);
+ do_check_eq(maxExpect, numForms());
+
+ // Make a string of numbers, e.g., 1;2;3;4;5
+ let words = [];
+ for (let i = 1; i <= maxExpect; i++)
+ words.push(i);
+ words = words.join(";");
+
+ // Make sure we get the expected number
+ for (let [index, number] in Iterator(expect)) {
+ print(["Plural form of ", index, " should be ", number, " (", words, ")"].join(""));
+ do_check_eq(get(index, words), number);
+ }
+ }
+}
diff --git a/intl/locale/tests/unit/test_pluralForm_english.js b/intl/locale/tests/unit/test_pluralForm_english.js
new file mode 100644
index 000000000..bdd7d2749
--- /dev/null
+++ b/intl/locale/tests/unit/test_pluralForm_english.js
@@ -0,0 +1,26 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This unit test makes sure the plural form for the default language (by
+ * development), English, is working for the PluralForm javascript module.
+ */
+
+Components.utils.import("resource://gre/modules/PluralForm.jsm");
+
+function run_test()
+{
+ // English has 2 plural forms
+ do_check_eq(2, PluralForm.numForms());
+
+ // Make sure for good inputs, things work as expected
+ for (var num = 0; num <= 200; num++)
+ do_check_eq(num == 1 ? "word" : "words", PluralForm.get(num, "word;words"));
+
+ // Not having enough plural forms defaults to the first form
+ do_check_eq("word", PluralForm.get(2, "word"));
+
+ // Empty forms defaults to the first form
+ do_check_eq("word", PluralForm.get(2, "word;"));
+}
diff --git a/intl/locale/tests/unit/test_pluralForm_makeGetter.js b/intl/locale/tests/unit/test_pluralForm_makeGetter.js
new file mode 100644
index 000000000..4d0928ae4
--- /dev/null
+++ b/intl/locale/tests/unit/test_pluralForm_makeGetter.js
@@ -0,0 +1,36 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * This unit test makes sure the plural form for Irish Gaeilge is working by
+ * using the makeGetter method instead of using the default language (by
+ * development), English.
+ */
+
+Components.utils.import("resource://gre/modules/PluralForm.jsm");
+
+function run_test()
+{
+ // Irish is plural rule #11
+ let [get, numForms] = PluralForm.makeGetter(11);
+
+ // Irish has 5 plural forms
+ do_check_eq(5, numForms());
+
+ // I don't really know Irish, so I'll stick in some dummy text
+ let words = "is 1;is 2;is 3-6;is 7-10;everything else";
+
+ let test = function(text, low, high) {
+ for (let num = low; num <= high; num++)
+ do_check_eq(text, get(num, words));
+ };
+
+ // Make sure for good inputs, things work as expected
+ test("everything else", 0, 0);
+ test("is 1", 1, 1);
+ test("is 2", 2, 2);
+ test("is 3-6", 3, 6);
+ test("is 7-10", 7, 10);
+ test("everything else", 11, 200);
+}
diff --git a/intl/locale/tests/unit/xpcshell.ini b/intl/locale/tests/unit/xpcshell.ini
new file mode 100644
index 000000000..f794fd9f4
--- /dev/null
+++ b/intl/locale/tests/unit/xpcshell.ini
@@ -0,0 +1,22 @@
+[DEFAULT]
+head =
+tail =
+support-files =
+ data/intl_on_workers_worker.js
+ data/chrome.manifest
+
+[test_bug22310.js]
+skip-if = toolkit != "windows" && toolkit != "cocoa"
+
+[test_bug371611.js]
+[test_bug374040.js]
+skip-if = toolkit == "windows" || toolkit == "cocoa"
+
+[test_collation_mac_icu.js]
+skip-if = toolkit != "cocoa"
+
+[test_bug1086527.js]
+[test_intl_on_workers.js]
+[test_pluralForm.js]
+[test_pluralForm_english.js]
+[test_pluralForm_makeGetter.js]