aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dijit/tests/i18n
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dijit/tests/i18n')
-rw-r--r--includes/js/dijit/tests/i18n/README4
-rw-r--r--includes/js/dijit/tests/i18n/currency.html210
-rw-r--r--includes/js/dijit/tests/i18n/date.html155
-rw-r--r--includes/js/dijit/tests/i18n/digit.html294
-rw-r--r--includes/js/dijit/tests/i18n/module.js18
-rw-r--r--includes/js/dijit/tests/i18n/number.html136
-rw-r--r--includes/js/dijit/tests/i18n/test_i18n.js206
-rw-r--r--includes/js/dijit/tests/i18n/textbox.html173
-rw-r--r--includes/js/dijit/tests/i18n/time.html207
9 files changed, 1403 insertions, 0 deletions
diff --git a/includes/js/dijit/tests/i18n/README b/includes/js/dijit/tests/i18n/README
new file mode 100644
index 0000000..a6516b6
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/README
@@ -0,0 +1,4 @@
+Global Verification Tests (GVT)
+
+In order to run these tests, you will need full locale support in Dojo. Dojo only ships with a small subset by default.
+See util/buildscripts/cldr for an ant-based build script.
diff --git a/includes/js/dijit/tests/i18n/currency.html b/includes/js/dijit/tests/i18n/currency.html
new file mode 100644
index 0000000..62108b2
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/currency.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test CurrencyTextBox</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp']"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.NumberTextBox");
+ dojo.require("dijit.form.CurrencyTextBox");
+ dojo.require("dijit.form.DateTextBox");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test for Currency</h1>
+
+<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button> -->
+ <p>
+ Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", and "ja-jp"
+ and currencies CNY, EGP, EUR, JPY. If not, convert these CLDR data and put them there.
+ </p>
+
+ <script>
+ (function() {
+ genFormatTestCases("Currency Format", "dijit.form.CurrencyTextBox", [
+
+ { attrs: {Currency: "CNY", lang: "zh-cn"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
+ value: "123456789.46",
+ expValue: "&#xFFE5;123,456,789.46",
+ comment: ""
+ },
+ { attrs: {Currency: "CNY", lang: "zh-cn"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
+ value: "-123456789.46",
+ expValue: "-&#xFFE5;123,456,789.46",
+ comment: ""
+ },
+
+ { attrs: {Currency: "EUR", lang: "fr-fr"},
+ desc: "Locale: <b>fr_FR</b> Currency: <b>EUR</b>",
+ value: "123456789.46",
+ expValue: "123&nbsp;456&nbsp;789,46 &euro;",
+ comment: ""
+ },
+ { attrs: {Currency: "EUR", lang: "fr-fr"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
+ value: "-123456789.46",
+ expValue: "-123&nbsp;456&nbsp;789,46 &euro;",
+ comment: ""
+ },
+
+ { attrs: {Currency: "JPY", lang: "ja-jp"},
+ desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
+ value: "123456789.46",
+ expValue: "&#xFFE5;123,456,789",
+ comment: ""
+ },
+ { attrs: {Currency: "JPY", lang: "ja-jp"},
+ desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
+ value: "-123456789.46",
+ expValue: "-&#xFFE5;123,456,789",
+ comment: ""
+ }
+ ]);
+
+ genValidateTestCases("Currency Validate", "dijit.form.CurrencyTextBox", [
+
+ { attrs: {Currency: "CNY", lang: "zh-cn"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
+ value: 123456789.46,
+ expValue: "&#xFFE5;123,456,789.46",
+ comment: ""
+ },
+ { attrs: {Currency: "CNY", lang: "zh-cn"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
+ value: -123456789.46,
+ expValue: "-&#xFFE5;123,456,789.46",
+ comment: ""
+ },
+
+ { attrs: {Currency: "EUR", lang: "fr-fr"},
+ desc: "Locale: <b>fr_FR</b> Currency: <b>EUR</b>",
+ value: 123456789.46,
+ expValue: "123&nbsp;456&nbsp;789,46 &euro;",
+ comment: ""
+ },
+ { attrs: {Currency: "EUR", lang: "fr-fr"},
+ desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
+ value: -123456789.46,
+ expValue: "-123&nbsp;456&nbsp;789,46 &euro;",
+ comment: ""
+ },
+
+ { attrs: {Currency: "JPY", lang: "ja-jp"},
+ desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
+ value: 123456789,
+ expValue: "&#xFFE5;123,456,789",
+ comment: ""
+ },
+ { attrs: {Currency: "JPY", lang: "ja-jp"},
+ desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
+ value: -123456789,
+ expValue: "-&#xFFE5;123,456,789",
+ comment: ""
+ }
+ ]);
+
+ dojo.parser.parse();
+
+ })();
+
+ </script>
+
+ <h2 class="testTitle">Issues &amp; Comments</h2>
+ <h3 class="testTitle"><a name="cmt_1">Issue #1<sup style="color:blue">Fixed</sup></a></h3>
+ <p>
+ Some browsers like FireFox have a bug on the non-breaking space character (U+00A0, <b>&amp;nbsp;</b> or <b>&amp;#160;</b> or
+ <b>&amp;#xA0;</b> in HTML).
+ They always convert the NBSP character to a normal space (U+0020, <b>&amp;#x20;</b> in HTML) automatically in the following circumstances:
+ </p>
+ <ul>
+ <li>Copy text from the page</li>
+ <li>Use <b>innerHTML</b> to get the content of a certain element</li>
+ <li>Use <b>value</b> to get an <b>INPUT</b> element's value</li>
+ </ul>
+
+ <p>
+ You cannot read a real NBSP character from an <b>INPUT</b> element on these browsers. It causes issues when some formatting data in CLDR
+ contains an NBSP character. For example,
+ </p>
+ <ul>
+ <li>Many locales like French use an NBSP character as a group separator in numbers</li>
+ <li>French and Finnish use NBSP characters in their percentage and currency format patterns respectively</li>
+ </ul>
+
+ <p>
+ So Dojo may generate formatted data with NBSP characters in it but cannot read NBSP charaters from user's input in some browser.
+ </p>
+
+ <h3 class="testTitle"><a name="cmt_2">Issue #2<sup style="color:blue">Fixed: the CLDR data generator should be fixed by adding code to convert U+200F to "\u200F" in nls JS files.</sup></a></h3>
+ <p>
+ Most Bidi currency symbols contain an LTR-MARK (U+200F) character at the very beginning.
+ But Firefox ignores it when it is not in any escaping form. This should be a bug of Firefox.
+ For example, click <a href="javascript:alert('‏'.indexOf('\u200F'))"><code>alert('‏'.indexOf('\u+200F'))</code></a> (there is a U+200F in the empty-looking string):
+ </p>
+ <ul>
+ <li>In Firefox, shows "-1" -- no U+200F found</li>
+ <li>In IE &amp; Opera, shows "0" -- the U+200F is found</li>
+ </ul>
+ <p>
+ But if the U+200F is in some escaping form, Firefox will work as well as other browsers.
+ Click <a href="javascript:alert('\u200F'.indexOf('\u200F'))"><code>alert('\u200F'.indexOf('\u+200F'))</code></a> to see the same result both in Firefox and IE:
+ </p>
+
+
+ <h3 class="testTitle"><a name="cmt_3">Issue #3<sup style="color:blue">Fixed: added a "localeDigit" to the options</sup></a></h3>
+ <p>
+ Strictly speaking, the data conversion must support non-European number characters in some locales like Arabic and Hindi.
+ For example, ICU formats a number data into Indic number characters by default in the Arabic locale.
+ However, currently Dojo does not support this feature (Dojo uses the default number conversion of the browser).
+ </p>
+
+ </body>
+</html>
diff --git a/includes/js/dijit/tests/i18n/date.html b/includes/js/dijit/tests/i18n/date.html
new file mode 100644
index 0000000..b4aa4cd
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/date.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test DateTextBox</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp','ru-ru','en-us','de-de','es-es','it-it','pt-br','ko-kr','zh-tw']"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.NumberTextBox");
+ dojo.require("dijit.form.CurrencyTextBox");
+ dojo.require("dijit.form.DateTextBox");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ <script>
+ function gen4DateFormat(testCases, language, locale, date, short, shortCmt, medium, mediumCmt, long, longCmt, full, fullCmt) {
+ testCases.push({
+ attrs: {constraints: "{formatLength:'short'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
+ value: date,
+ expValue: short,
+ comment: shortCmt
+ });
+ testCases.push({
+ attrs: {constraints: "{formatLength:'medium'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
+ value: date,
+ expValue: medium,
+ comment: mediumCmt
+ });
+ testCases.push({
+ attrs: {constraints: "{formatLength:'long'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
+ value: date,
+ expValue: long,
+ comment: longCmt
+ });
+ testCases.push({
+ attrs: {constraints: "{formatLength:'full'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
+ value: date,
+ expValue: full,
+ comment: fullCmt
+ });
+ }
+ </script>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test for Date</h1>
+
+<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button>-->
+ <p>
+ Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ja-jp", "ru-ru", "hi-in", "en-us" and "ar-eg". If not, convert these CLDR data and put them there.
+ </p>
+
+ <script>
+ (function() {
+ var testCases = [];
+ gen4DateFormat(testCases, "ru-ru", "ru_RU", "2005-07-31",
+ "31.07.05", "", "31.07.2005", "", "31 июля 2005 г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>", "31 июля 2005 г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>");
+ gen4DateFormat(testCases, "zh-cn", "zh_CN", "2005-07-31",
+ "05-7-31", "", "2005-7-31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
+ gen4DateFormat(testCases, "en-us", "en_US", "2005-07-31",
+ "7/31/05", "", "Jul 31, 2005", "", "July 31, 2005", "", "Sunday, July 31, 2005", "");
+ gen4DateFormat(testCases, "fr-fr", "fr_FR", "2005-07-31",
+ "31/07/05", "", "31 juil. 2005", "", "31 juillet 2005", "", "dimanche 31 juillet 2005", "");
+ gen4DateFormat(testCases, "ja-jp", "ja_JP", "2005-07-31",
+ "05/07/31", "", "2005/07/31", "", "2005年7月31日", "", "2005年7月31日日曜日", "");
+ gen4DateFormat(testCases, "de-de", "de_DE", "2005-07-31",
+ "31.07.05", "", "31.07.2005", "", "31. Juli 2005", "", "Sonntag, 31. Juli 2005", "");
+ gen4DateFormat(testCases, "es-es", "es_ES", "2005-07-31",
+ "31/07/05", "", "31/07/2005", "", "31 de julio de 2005", "", "domingo 31 de julio de 2005", "");
+ gen4DateFormat(testCases, "pt-br", "pt-BR", "2005-07-31",
+ "31/07/05", "", "31/07/2005", "", "31 de julho de 2005", "", "domingo, 31 de julho de 2005", "");
+ gen4DateFormat(testCases, "it-it", "it-IT", "2005-07-31",
+ "31/07/05", "", "31/lug/2005", "", "31 luglio 2005", "", "domenica 31 luglio 2005", "");
+ gen4DateFormat(testCases, "ko-kr", "ko-KR", "2005-07-31",
+ "05. 7. 31.", "", "2005. 7. 31.", "", "2005년 7월 31일", "", "2005년 7월 31일 일요일", "");
+ gen4DateFormat(testCases, "zh-tw", "zh-TW", "2005-07-31",
+ "2005/7/31", "", "2005/7/31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
+ genFormatTestCases("Date Format", "dijit.form.DateTextBox", testCases);
+
+ testCases = [];
+ gen4DateFormat(testCases, "ru-ru", "ru_RU", new Date(2005, 6, 31),
+ "31.07.05", "", "31.07.2005", "", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>");
+ gen4DateFormat(testCases, "zh-cn", "zh_CN", new Date(2005, 6, 31),
+ "05-7-31", "", "2005-7-31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
+ gen4DateFormat(testCases, "en-us", "en_US", new Date(2005, 6, 31),
+ "7/31/05", "", "Jul 31, 2005", "", "July 31, 2005", "", "Sunday, July 31, 2005", "");
+ gen4DateFormat(testCases, "fr-fr", "fr_FR", new Date(2005, 6, 31),
+ "31/07/05", "", "31 juil. 2005", "", "31 juillet 2005", "", "dimanche 31 juillet 2005", "");
+ gen4DateFormat(testCases, "ja-jp", "ja_JP", new Date(2005, 6, 31),
+ "05/07/31", "", "2005/07/31", "", "2005年7月31日", "", "2005年7月31日日曜日", "");
+ gen4DateFormat(testCases, "de-de", "de_DE", new Date(2005, 6, 31),
+ "31.07.05", "", "31.07.2005", "", "31. Juli 2005", "", "Sonntag, 31. Juli 2005", "");
+ gen4DateFormat(testCases, "es-es", "es_ES", new Date(2005, 6, 31),
+ "31/07/05", "", "31/07/2005", "", "31 de julio de 2005", "", "domingo 31 de julio de 2005", "");
+ gen4DateFormat(testCases, "pt-br", "pt-BR", new Date(2005, 6, 31),
+ "31/07/05", "", "31/07/2005", "", "31 de julho de 2005", "", "domingo, 31 de julho de 2005", "");
+ gen4DateFormat(testCases, "it-it", "it-IT", new Date(2005, 6, 31),
+ "31/07/05", "", "31/lug/2005", "", "31 luglio 2005", "", "domenica 31 luglio 2005", "");
+ gen4DateFormat(testCases, "ko-kr", "ko-KR", new Date(2005, 6, 31),
+ "05. 7. 31.", "", "2005. 7. 31.", "", "2005년 7월 31일", "", "2005년 7월 31일 일요일", "");
+ gen4DateFormat(testCases, "zh-tw", "zh-TW", new Date(2005, 6, 31),
+ "2005/7/31", "", "2005/7/31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
+ genValidateTestCases("Date Validate", "dijit.form.DateTextBox", testCases);
+
+ dojo.parser.parse();
+ })();
+ </script>
+ </body>
+</html>
diff --git a/includes/js/dijit/tests/i18n/digit.html b/includes/js/dijit/tests/i18n/digit.html
new file mode 100644
index 0000000..dc3ed7a
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/digit.html
@@ -0,0 +1,294 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test Hindi/Arabic numerals</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, extraLocale: ['ar-eg','hi-in']"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.NumberTextBox");
+ dojo.require("dijit.form.CurrencyTextBox");
+ dojo.require("dijit.form.DateTextBox");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <script>
+ function gen4DateFormat(testCases, language, locale, date, short, shortCmt, medium, mediumCmt, long, longCmt, full, fullCmt) {
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', localeDigit: true}" : "{formatLength:'short'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
+ value: date,
+ expValue: short,
+ comment: shortCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', localeDigit: true}" : "{formatLength:'medium'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
+ value: date,
+ expValue: medium,
+ comment: mediumCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', localeDigit: true}" : "{formatLength:'long'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
+ value: date,
+ expValue: long,
+ comment: longCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', localeDigit: true}" : "{formatLength:'full'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
+ value: date,
+ expValue: full,
+ comment: fullCmt
+ });
+ }
+ </script>
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test for Number</h1>
+
+<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button>-->
+ <p>
+ Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "ar-eg" and "hi-in". If not, convert these CLDR data and put them there.
+ </p>
+
+ <script>
+ (function() {
+
+ genFormatTestCases("Number Format", "dijit.form.NumberTextBox", [
+ { attrs: {lang: "ar-eg"},
+ desc: "Locale: ar_EG",
+ value: "12345.067",
+ expValue: "12٬345٫067",
+ comment: ""
+ },
+ { attrs: {lang: "ar-eg"},
+ desc: "Locale: ar_EG",
+ value: "-12345.067",
+ expValue: "12٬345٫067-",
+ comment: ""
+ },
+
+ { attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: ar_EG",
+ value: "12345.067",
+ expValue: "١٢\u066C٣٤٥\u066B٠٦٧",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+ { attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: ar_EG",
+ value: "-12345.067",
+ expValue: "١٢\u066C٣٤٥\u066B٠٦٧-",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+
+ { attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
+ desc: "Locale: hi_IN",
+ value: "123456789.068",
+ expValue: "१२,३४,५६,७८९.०६८",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+ { attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
+ desc: "Locale: hi_IN",
+ value: "-123456789.068",
+ expValue: "-१२,३४,५६,७८९.०६८",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ }
+ ]);
+
+ genValidateTestCases("Number Validate", "dijit.form.NumberTextBox", [
+
+ { attrs: {lang: "ar-eg"},
+ desc: "Locale: ar_EG",
+ value: 12345.067,
+ expValue: "12٬345٫067",
+ comment: ""
+ },
+ { attrs: {lang: "ar-eg"},
+ desc: "Locale: ar_EG",
+ value: -12345.067,
+ expValue: "12٬345٫067-",
+ comment: ""
+ },
+
+ { attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: ar_EG",
+ value: 12345.067,
+ expValue: "١٢\u066C٣٤٥\u066B٠٦٧",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+ { attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: ar_EG",
+ value: -12345.067,
+ expValue: "١٢\u066C٣٤٥\u066B٠٦٧-",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+
+ { attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
+ desc: "Locale: hi_IN",
+ value: 123456789.068,
+ expValue: "१२,३४,५६,७८९.०६८",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ },
+ { attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
+ desc: "Locale: hi_IN",
+ value: -123456789.068,
+ expValue: "-१२,३४,५६,७८९.०६८",
+ comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
+ }
+ ]);
+
+ genFormatTestCases("Currency Format", "dijit.form.CurrencyTextBox", [
+
+ { attrs: {Currency: "EGP", lang: "ar-eg"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: "123456789.46",
+ expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46",
+ comment: ""
+ },
+ { attrs: {Currency: "EGP", lang: "ar-eg"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: "-123456789.46",
+ expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46-",
+ comment: ""
+ },
+
+ { attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: "123456789.46",
+ expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦",
+ comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ },
+ { attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: "-123456789.46",
+ expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦-",
+ comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ }
+ ]);
+
+ genValidateTestCases("Currency Validate", "dijit.form.CurrencyTextBox", [
+
+ { attrs: {Currency: "EGP", lang: "ar-eg"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: 123456789.46,
+ expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46",
+ comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ },
+ { attrs: {Currency: "EGP", lang: "ar-eg"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: -123456789.46,
+ expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46-",
+ comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ },
+
+ { attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: 123456789.46,
+ expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦",
+ comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ },
+ { attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
+ desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
+ value: -123456789.46,
+ expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦-",
+ comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
+ }
+ ]);
+
+ var testCases = [];
+ gen4DateFormat(testCases, "ar-eg", "ar_EG", "2005-07-31",
+ "31/7/2005", "", "31/07/2005", "", "31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "", "&#x0627;&#x0644;&#x0623;&#x062D;&#x062F;&#x2C; 31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "");
+ gen4DateFormat(testCases, "hi-in", "hi_IN", "2005-07-31",
+ "२००५-०७-३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "२००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "२००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "रविवार, २००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>");
+ genFormatTestCases("Date Format", "dijit.form.DateTextBox", testCases);
+
+ testCases = [];
+ gen4DateFormat(testCases, "ar-eg", "ar_EG", new Date(2005, 6, 31),
+ "31/7/2005", "", "31/07/2005", "", "31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "", "&#x0627;&#x0644;&#x0623;&#x062D;&#x062F;&#x2C; 31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "");
+ gen4DateFormat(testCases, "hi-in", "hi_IN", new Date(2005, 6, 31),
+ "२००५-०७-३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "२००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "२००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "रविवार, २००५ जुलाई ३१", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>");
+ genValidateTestCases("Date Validate", "dijit.form.DateTextBox", testCases);
+
+ dojo.parser.parse();
+
+ })();
+
+ </script>
+ </body>
+</html>
+
+<!--
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', localeDigit: true}" : "{formatLength:'short'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
+ value: date,
+ expValue: short,
+ comment: shortCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', localeDigit: true}" : "{formatLength:'medium'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
+ value: date,
+ expValue: medium,
+ comment: mediumCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', localeDigit: true}" : "{formatLength:'long'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
+ value: date,
+ expValue: long,
+ comment: longCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', localeDigit: true}" : "{formatLength:'full'}", lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
+ value: date,
+ expValue: full,
+ comment: fullCmt
+-->
+
diff --git a/includes/js/dijit/tests/i18n/module.js b/includes/js/dijit/tests/i18n/module.js
new file mode 100644
index 0000000..b484737
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/module.js
@@ -0,0 +1,18 @@
+if(!dojo._hasResource["dijit.tests.i18n.module"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dijit.tests.i18n.module"] = true;
+dojo.provide("dijit.tests.i18n.module");
+
+try{
+ if(dojo.isBrowser){
+ doh.registerUrl("dijit.tests.i18n.currency", dojo.moduleUrl("dijit", "tests/i18n/currency.html"));
+ doh.registerUrl("dijit.tests.i18n.date", dojo.moduleUrl("dijit", "tests/i18n/date.html"));
+ doh.registerUrl("dijit.tests.i18n.number", dojo.moduleUrl("dijit", "tests/i18n/number.html"));
+ doh.registerUrl("dijit.tests.i18n.textbox", dojo.moduleUrl("dijit", "tests/i18n/textbox.html"));
+ doh.registerUrl("dijit.tests.i18n.time", dojo.moduleUrl("dijit", "tests/i18n/time.html"));
+ doh.registerUrl("dijit.tests.i18n.digit", dojo.moduleUrl("dijit", "tests/i18n/digit.html"));
+ }
+}catch(e){
+ doh.debug(e);
+}
+
+}
diff --git a/includes/js/dijit/tests/i18n/number.html b/includes/js/dijit/tests/i18n/number.html
new file mode 100644
index 0000000..0a1b717
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/number.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test NumberTextBox</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr']"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.NumberTextBox");
+ dojo.require("dijit.form.CurrencyTextBox");
+ dojo.require("dijit.form.DateTextBox");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test for Number</h1>
+
+<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button>-->
+ <p>
+ Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr". If not, convert these CLDR data and put them there.
+ </p>
+
+ <script>
+ (function() {
+
+ genFormatTestCases("Number Format", "dijit.form.NumberTextBox", [
+
+ { attrs: {lang: "zh-cn"},
+ desc: "Locale: zh_CN",
+ value: "12345.067",
+ expValue: "12,345.067",
+ comment: ""
+ },
+ { attrs: {lang: "zh-cn"},
+ desc: "Locale: zh_CN",
+ value: "-12345.067",
+ expValue: "-12,345.067",
+ comment: ""
+ },
+
+ { attrs: {lang: "fr-fr"},
+ desc: "Locale: fr_FR",
+ value: "12345.067",
+ expValue: "12&nbsp;345,067",
+ comment: ""
+ },
+ { attrs: {lang: "fr-fr"},
+ desc: "Locale: zh_CN",
+ value: "-12345.067",
+ expValue: "-12&nbsp;345,067",
+ comment: ""
+ }
+ ]);
+
+ genValidateTestCases("Number Validate", "dijit.form.NumberTextBox", [
+
+ { attrs: {lang: "zh-cn"},
+ desc: "Locale: zh_CN",
+ value: 12345.067,
+ expValue: "12,345.067",
+ comment: ""
+ },
+ { attrs: {lang: "zh-cn"},
+ desc: "Locale: zh_CN",
+ value: -12345.067,
+ expValue: "-12,345.067",
+ comment: ""
+ },
+
+ { attrs: {lang: "fr-fr"},
+ desc: "Locale: fr_FR",
+ value: 12345.067,
+ expValue: "12&nbsp;345,067",
+ comment: ""
+ },
+ { attrs: {lang: "fr-fr"},
+ desc: "Locale: zh_CN",
+ value: -12345.067,
+ expValue: "-12&nbsp;345,067",
+ comment: ""
+ }
+ ]);
+
+ dojo.parser.parse();
+
+ })();
+
+ </script>
+ </body>
+</html>
+
+
diff --git a/includes/js/dijit/tests/i18n/test_i18n.js b/includes/js/dijit/tests/i18n/test_i18n.js
new file mode 100644
index 0000000..bc44e63
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/test_i18n.js
@@ -0,0 +1,206 @@
+var validateValues = [];
+var formatWidgetCount = 0;
+var validateWidgetCount = 0;
+
+function getElementsById(id){
+ var result = [];
+
+ if(!id || typeof(id) != "string"){
+ return result;
+ }
+
+ var ae = document.getElementsByTagName(dojo.byId(id).tagName);
+ for(var i = 0; i < ae.length; i++){
+ if(ae[i].id == id){
+ result.push(ae[i]);
+ }
+ }
+ return result;
+}
+
+function getString(n){
+ return n && n.toString();
+}
+
+function startTest(t){
+ startTestFormat(t);
+ startTestValidate(t);
+}
+
+function escapeEx(s){
+ var result = "";
+ for(var i = 0; i < s.length; i++){
+ var c = s.charAt(i);
+ switch (c){
+ case '"':
+ result += '\\"';
+ break;
+ case "'":
+ result += "\\'";
+ break;
+ default:
+ result += escape(c);
+ break;
+ }
+ }
+ return result;
+}
+
+function getAllTestCases(){
+ var allTestCases = [];
+ for(var i = 0; i < formatWidgetCount; i++){
+ allTestCases.push({
+ name: "format-" + i,
+ runTest: new Function("t", "startTestFormat(" + i + ", t)")
+ });
+ }
+ for(var i = 0; i < validateWidgetCount; i++){
+ allTestCases.push({
+ name: "validate-" + i,
+ runTest: new Function("t", "startTestValidate(" + i + ", t)")
+ });
+ }
+ return allTestCases;
+}
+
+function startTestFormat(i, t){
+ var test_node = dojo.doc.getElementById("test_display_" + i);
+ var exp = dojo.doc.getElementById("test_display_expected_" + i).value;
+ var res_node = dojo.doc.getElementById("test_display_result_" + i);
+ res_node.innerHTML = test_node.value;
+ res_node.style.backgroundColor = (test_node.value == exp) ? "#AFA" : "#FAA";
+ res_node.innerHTML += " <a style='font-size:0.8em' href='javascript:alert(\"Expected: " + escapeEx(exp) + "\\n Result: " + escapeEx(test_node.value) + "\")'>Compare (Escaped)</a>";
+ t.is(exp, test_node.value);
+}
+
+function startTestValidate(i, t){
+ /*
+ * The dijit.byNode has an issue: cannot handle same id.
+ */
+ var test_node = dojo.doc.getElementById("test_validate_" + i);
+ var inp_node = dojo.doc.getElementById("test_validate_input_" + i);
+ var exp = dojo.doc.getElementById("test_validate_expected_" + i).innerHTML;
+ var res_node = dojo.doc.getElementById("test_validate_result_" + i);
+ var val_node = dojo.doc.getElementById("test_display_value_" + i);
+
+ test_node.value = inp_node.value;
+ /*
+ * The dijit.byNode has an issue.
+ */
+ var widget = null;
+ var node = test_node;
+ while ((widget = dijit.byNode(node)) == null){
+ node = node.parentNode;
+ if(!node){
+ break;
+ }
+ }
+
+ if(widget){
+ widget.focus();
+
+ var expected = validateValues[i];
+ var result = widget.getValue();
+ if(validateValues[i].processValue){
+ expected = validateValues[i].processValue(expected);
+ result = validateValues[i].processValue(result);
+ }
+ var parseCorrect = getString(expected) == getString(result);
+ val_node.style.backgroundColor = parseCorrect ? "#AFA" : "#FAA";
+ val_node.innerHTML = getString(result) + (parseCorrect ? "" : "<br>Expected: " + getString(expected));
+
+ res_node.innerHTML = widget.isValid && !widget.isValid() ? "Wrong" : "Correct";
+ res_node.style.backgroundColor = res_node.innerHTML == exp ? "#AFA" : "#FAA";
+
+ t.is(getString(expected), getString(result));
+ }
+}
+
+function genFormatTestCase(desc, dojoType, dojoAttrs, value, expValue, comment){
+ dojo.doc.write("<tr>");
+ dojo.doc.write("<td>" + desc + "</td>");
+ dojo.doc.write("<td>");
+ dojo.doc.write("<input id='test_display_" + formatWidgetCount + "' type='text' value='" + value + "' ");
+ dojo.doc.write("dojoType='" + dojoType + "' ");
+ for(var attr in dojoAttrs){
+ dojo.doc.write(attr + "=\"" + dojoAttrs[attr] + "\" ");
+ }
+ dojo.doc.write("/>");
+ dojo.doc.write("</td>");
+ dojo.doc.write("<td><input id='test_display_expected_" + formatWidgetCount + "' value='" + expValue + "'></td>");
+ dojo.doc.write("<td id='test_display_result_" + formatWidgetCount + "'></td>");
+ dojo.doc.write("<td style='white-space:normal'>" + comment + "</td>");
+ dojo.doc.write("</tr>");
+ formatWidgetCount++;
+}
+/*
+[
+ {attrs: {currency: "CNY", lang: "zh-cn"}, desc: "", value:"-123456789.46", expValue: "", comment: ""},
+ ...
+]
+*/
+function genFormatTestCases(title, dojoType, testCases){
+ dojo.doc.write("<h2 class=testTitle>" + title + "</h2>");
+ dojo.doc.write("<table border=1>");
+ dojo.doc.write("<tr>");
+ dojo.doc.write("<td class=title><b>Test Description</b></td>");
+ dojo.doc.write("<td class=title><b>Test</b></td>");
+ dojo.doc.write("<td class=title><b>Expected</b></td>");
+ dojo.doc.write("<td class=title><b>Result</b></td>");
+ dojo.doc.write("<td class=title><b>Comment</b></td>");
+ dojo.doc.write("</tr>");
+
+ for(var i = 0; i < testCases.length; i++){
+ var testCase = testCases[i];
+ genFormatTestCase(testCase.desc, dojoType, testCase.attrs, testCase.value, testCase.expValue, testCase.comment);
+ }
+
+ dojo.doc.write("</table>");
+}
+
+function genValidateTestCase(desc, dojoType, dojoAttrs, input, value, comment, isWrong){
+ dojo.doc.write("<tr>");
+ dojo.doc.write("<td>" + desc + "</td>");
+ dojo.doc.write("<td>");
+ dojo.doc.write("<input id='test_validate_" + validateWidgetCount + "' type='text' ");
+ dojo.doc.write("dojoType='" + dojoType + "' ");
+ for(var attr in dojoAttrs){
+ dojo.doc.write(attr + "=\"" + dojoAttrs[attr] + "\" ");
+ }
+ dojo.doc.write("/>");
+ dojo.doc.write("</td>");
+ dojo.doc.write("<td><input id='test_validate_input_" + validateWidgetCount + "' value='" + input + "'></td>");
+ dojo.doc.write("<td id='test_display_value_" + validateWidgetCount + "'></td>");
+ dojo.doc.write("<td id='test_validate_expected_" + validateWidgetCount + "'>" + (isWrong ? "Wrong" : "Correct") + "</td>");
+ dojo.doc.write("<td id='test_validate_result_" + validateWidgetCount + "'></td>");
+ dojo.doc.write("<td style='white-space:normal'>" + comment + "</td>");
+ dojo.doc.write("</tr>");
+ validateValues.push(value);
+ validateWidgetCount++;
+}
+/*
+[
+ {attrs: {currency: "CNY", lang: "zh-cn"}, desc: "", value:false, expValue: "-123456789.46", comment: ""},
+ ...
+]
+*/
+function genValidateTestCases(title, dojoType, testCases){
+ dojo.doc.write("<h2 class=testTitle>" + title + "</h2>");
+ dojo.doc.write("<table border=1>");
+ dojo.doc.write("<tr>");
+ dojo.doc.write("<td class=title><b>Test Description</b></td>");
+ dojo.doc.write("<td class=title><b>Test</b></td>");
+ dojo.doc.write("<td class=title><b>Input</b></td>");
+ dojo.doc.write("<td class=title><b>Parsed Value</b></td>");
+ dojo.doc.write("<td class=title><b>Expected</b></td>");
+ dojo.doc.write("<td class=title><b>Result</b></td>");
+ dojo.doc.write("<td class=title><b>Comment</b></td>");
+ dojo.doc.write("</tr>");
+
+ for(var i = 0; i < testCases.length; i++){
+ var testCase = testCases[i];
+ genValidateTestCase(testCase.desc, dojoType, testCase.attrs, testCase.expValue, testCase.value, testCase.comment, testCase.isWrong);
+ }
+
+ dojo.doc.write("</table>");
+}
diff --git a/includes/js/dijit/tests/i18n/textbox.html b/includes/js/dijit/tests/i18n/textbox.html
new file mode 100644
index 0000000..573496e
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/textbox.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test TextBox</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.NumberTextBox");
+ dojo.require("dijit.form.CurrencyTextBox");
+ dojo.require("dijit.form.DateTextBox");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test</h1>
+
+<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button>-->
+
+ <script>
+ (function() {
+ genFormatTestCases("Natural Language Casing Mapping", "dijit.form.TextBox", [
+
+ { attrs: {uppercase: "true"},
+ desc: "Upper casing: Basic Latin",
+ value: "abcdefghijklmnopqrstuvwxyz",
+ expValue: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+ comment: ""
+ },
+
+ { attrs: {uppercase: "true"},
+ desc: "Upper casing: Latin with accents",
+ value: "àáâãäåæçèéêëìíîïðñòóôõö",
+ expValue: "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ",
+ comment: ""
+ },
+
+ { attrs: {uppercase: "true"},
+ desc: "Upper casing: Turkish",
+ value: "ıi",
+ expValue: "Iİ",
+ comment: "<a href='#cmt_1'>See #1.</a>"
+ },
+
+ { attrs: {uppercase: "true"},
+ desc: "Upper casing: Russian",
+ value: "абвгдежз",
+ expValue: "АБВГДЕЖЗ",
+ comment: ""
+ },
+
+ { attrs: {uppercase: "true"},
+ desc: "Upper casing: German",
+ value: "ß",
+ expValue: "SS",
+ comment: "<a href='#cmt_1'>See #1.</a>"
+ },
+
+ { attrs: {lowercase: "true"},
+ desc: "Lower casing: Turkish",
+ value: "Iİ",
+ expValue: "ıi",
+ comment: "<a href='#cmt_1'>See #1.</a>"
+ },
+
+ { attrs: {propercase: "true"},
+ desc: "Title/Proper casing: Latin",
+ value: "\u01F1abc",
+ expValue: "\u01F2abc",
+ comment: "<a href='#cmt_1'>See #1.</a>"
+ }
+ ]);
+
+ genFormatTestCases("White-space Detecting", "dijit.form.TextBox", [
+
+ { attrs: {trim: "true"},
+ desc: "Normal space & tab",
+ value: " abc\t\t\t",
+ expValue: "abc",
+ comment: ""
+ },
+
+ { attrs: {trim: "true"},
+ desc: "NO-BREAK SPACE",
+ value: "\u00A0abc\u00A0",
+ expValue: "abc",
+ comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
+ },
+
+ { attrs: {trim: "true"},
+ desc: "EN QUAD",
+ value: "\u2000abc\u2000",
+ expValue: "abc",
+ comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
+ },
+
+ { attrs: {trim: "true"},
+ desc: "IDEOGRAPHIC SPACE",
+ value: "\u3000abc\u3000",
+ expValue: "abc",
+ comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
+ }
+
+
+ ]);
+
+ dojo.parser.parse();
+
+ })();
+ </script>
+
+ <h2 class="testTitle">Issues &amp; Comments </h2>
+ <a name="cmt_1"><h3 class="testTitle">Issue #1 <sup style="color:red">Not fixed. Avoid using this function of TextBox.</sup></h3></a>
+ <p>
+ Strictly speaking, all casing manipulation must use ICU case mapping rules (routine). However, the default JavaScript routines used by Dojo
+ do not support ICU case mapping rules in all browsers.
+ </p>
+
+ <a name="cmt_2"><h3 class="testTitle">Issue #2 <sup style="color:red">Not fixed. Avoid using this function of TextBox.</sup></h3></a>
+ <p>
+ Trimming must get rid of all Unicode characters with the white space property. However, the default JavaScript routines used by Dojo
+ do not support get character properties in some browsers like IE. Other browsers like Firefox might support trimming more white space
+ characters.
+ </p>
+
+ </body>
+</html>
+
+
diff --git a/includes/js/dijit/tests/i18n/time.html b/includes/js/dijit/tests/i18n/time.html
new file mode 100644
index 0000000..0a972b9
--- /dev/null
+++ b/includes/js/dijit/tests/i18n/time.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>Test TextBox for Time</title>
+
+ <script type="text/javascript" src="../../../dojo/dojo.js"
+ djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp','ar-eg','ru-ru','hi-in','en-us']"></script>
+ <script type="text/javascript" src="../../../dojo/currency.js"></script>
+ <script type="text/javascript" src="../../../dojo/number.js"></script>
+ <script type="text/javascript">
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dojo.date.locale");
+ dojo.require("dojo.date.stamp");
+ dojo.require("dojo.date");
+ dojo.require("dojo.string");
+ dojo.require("dojo.parser"); // scan page for widgets and instantiate them
+ dojo.require("doh.runner");
+ </script>
+ <script src="test_i18n.js"></script>
+ <script type="text/javascript">
+ dojo.addOnLoad(function(){
+ doh.register("t", getAllTestCases());
+ doh.run();
+ });
+ </script>
+
+ <style type="text/css">
+ @import "../../../dojo/resources/dojo.css";
+ @import "../../themes/tundra/tundra.css";
+ @import "../css/dijitTests.css";
+
+ .title {
+ background-color:#ddd;
+ }
+
+ .hint {
+ background-color:#eee;
+ }
+
+ .testExample {
+ background-color:#fbfbfb;
+ padding:1em;
+ margin-bottom:1em;
+ border:1px solid #bfbfbf;
+ }
+
+ .dojoTitlePaneLabel label {
+ font-weight:bold;
+ }
+
+ td {white-space:nowrap}
+ </style>
+ <script>
+ dojo.declare(
+ "dijit.form.TimeTextBox",
+ dijit.form.ValidationTextBox,
+ {
+ regExpGen: dojo.date.locale.regexp,
+ format: dojo.date.locale.format,
+ parse: dojo.date.locale.parse,
+ value: new Date()
+ }
+ );
+
+ var tz_s = dojo.date.getTimezoneName(new Date());
+ if (!tz_s) {
+ var offset = new Date().getTimezoneOffset();
+ var tz = [
+ (offset <= 0 ? "+" : "-"),
+ dojo.string.pad(Math.floor(Math.abs(offset) / 60), 2),
+ dojo.string.pad(Math.abs(offset) % 60, 2)
+ ];
+ tz.splice(0, 0, "GMT");
+ tz.splice(3, 0, ":");
+ tz_s = tz.join("");
+ }
+
+ function gen4DateFormat(testCases, language, locale, date, short, shortCmt, medium, mediumCmt, long, longCmt, full, fullCmt) {
+ var tz_l = language.indexOf("hi") == 0 && dojo.number.normalizeDigitChars ?
+ dojo.number.normalizeDigitChars(tz_s, language) : tz_s;
+
+ short = short.replace(/UTC/, tz_l);
+ medium = medium.replace(/UTC/, tz_l);
+ long = long.replace(/UTC/g, tz_l);
+ full = full.replace(/UTC/, tz_l);
+
+ var shortDate = null;
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', selector:'time', localeDigit:true}" : "{formatLength:'short', selector:'time'}",
+ lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
+ value: typeof(date) == "string" ? date : shortDate = new Date(date.getYear(), date.getMonth(), date.getDay() - 5, date.getHours(), date.getMinutes()),
+ expValue: short,
+ comment: shortCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', selector:'time', localeDigit:true}" : "{formatLength:'medium', selector:'time'}",
+ lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
+ value: date,
+ expValue: medium,
+ comment: mediumCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', selector:'time', localeDigit:true}" : "{formatLength:'long', selector:'time'}",
+ lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
+ value: date,
+ expValue: long,
+ comment: longCmt
+ });
+ testCases.push({
+ attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', selector:'time', localeDigit:true}" : "{formatLength:'full', selector:'time'}",
+ lang: language},
+ desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
+ //value: typeof(date) == "string" || language.indexOf("fr") ? date : shortDate,
+ value: date,
+ expValue: full,
+ comment: fullCmt
+ });
+
+ date.processValue = function (value) {
+ return value ? new Date(1970, 0, 1, value.getHours(), value.getMinutes(), value.getSeconds()) : value;
+ };
+ if (shortDate) {
+ shortDate.processValue = date.processValue;
+ }
+ }
+ </script>
+ </head>
+
+ <body class="tundra">
+ <h1 class="testTitle">Dijit TextBox Globalization Test for Time</h1>
+
+ <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
+ <button id="startButton" onclick="startTest()">Start Test</button>
+ <p>
+ Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ja-jp", "ru-ru", "hi-in", "en-us" and "ar-eg". If not, convert these CLDR data and put them there.
+ </p>
+
+ <script>
+ (function() {
+ var testCases = [];
+ gen4DateFormat(testCases, "ru-ru", "ru_RU", "1970-01-01T15:25:35",
+ "15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "zh-cn", "zh_CN", "1970-01-01T15:25:35",
+ "下午3:25", "", "下午03:25:35", "", "下午03时25分35秒", "", "下午03时25分35秒 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "en-us", "en_US", "1970-01-01T15:25:35",
+ "3:25 PM", "", "3:25:35 PM", "", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "fr-fr", "fr_FR", "1970-01-01T15:25:35",
+ "15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "ja-jp", "ja_JP", "1970-01-01T15:25:35",
+ "15:25", "", "15:25:35", "", "15:25:35:UTC", "<a href='#cmt_1'>See #1.</a>", "15時25分35秒UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "ar-eg", "ar_EG", "1970-01-01T15:25:35",
+ "3:25 \u0645", "", "3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "hi-in", "hi_IN", "1970-01-01T15:25:35",
+ "१५:२५", "<a href='#cmt_2'>See #2.</a>", "१५:२५:३५", "<a href='#cmt_2'>See #2.</a>", "१५:२५:३५ UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>", "१५:२५:३५ UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>");
+ genFormatTestCases("Time Format", "dijit.form.TimeTextBox", testCases);
+
+ testCases = [];
+ gen4DateFormat(testCases, "ru-ru", "ru_RU", new Date(1970, 0, 1, 15, 25, 35),
+ "15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "zh-cn", "zh_CN", new Date(1970, 0, 1, 15, 25, 35),
+ "下午3:25", "<a href='#cmt_3'>See #3.</a>", "下午03:25:35", "<a href='#cmt_3'>See #3.</a>", "下午03时25分35秒", "<a href='#cmt_3'>See #3.</a>", "下午03时25分35秒 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "en-us", "en_US", new Date(1970, 0, 1, 15, 25, 35),
+ "3:25 PM", "", "3:25:35 PM", "", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "fr-fr", "fr_FR", new Date(1970, 0, 1, 15, 25, 35),
+ "15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "ja-jp", "ja_JP", new Date(1970, 0, 1, 15, 25, 35),
+ "15:25", "", "15:25:35", "", "15:25:35:UTC", "<a href='#cmt_1'>See #1.</a>", "15時25分35秒UTC", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "ar-eg", "ar_EG", new Date(1970, 0, 1, 15, 25, 35),
+ "3:25 \u0645", "", "3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "<a href='#cmt_1'>See #1.</a>");
+ gen4DateFormat(testCases, "hi-in", "hi_IN", new Date(1970, 0, 1, 15, 25, 35),
+ "१५:२५", "<a href='#cmt_2'>See #2.</a>", "१५:२५:३५", "<a href='#cmt_2'>See #2.</a>", "१५:२५:३५ UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>", "१५:२५:३५ UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>");
+ genValidateTestCases("Time Validate", "dijit.form.TimeTextBox", testCases);
+
+ dojo.parser.parse();
+ })();
+ </script>
+
+ <h2 class="testTitle">Issues &amp; Comments</h2>
+ <h3 class="testTitle"><a name="cmt_1">Issue #1 <sup style="color:blue">Fixed</sup></a></h3>
+ <p>
+ Currently Dojo do not support parsing for most "long" and "full" time format which have a timezone mark in it.
+ </p>
+
+ <h3 class="testTitle"><a name="cmt_2">Issue #2 <sup style="color:blue">Fixed: added a "localeDigit" to the options</sup></a></h3>
+ <p>
+ Strictly speaking, the data conversion must support non-European number characters in some locales like Arabic and Hindi.
+ For example, ICU formats a number data into Indic number characters by default in the Arabic locale.
+ However, currently Dojo does not support this feature (Dojo uses the default number conversion of the browser).
+ </p>
+
+ <h3 class="testTitle"><a name="cmt_3">Issue #3 <sup style="color:blue">Fixed</sup></a></h3>
+ <p>
+ This defect only occurs on the "zh-cn" locale. Dojo accepts "下午"(pm) in the textbox, but it automatically changes it to
+ "上午"(am) after the focus changed. The date value of the textbox is also changed.
+ </p>
+ <p>
+ The root cause of this issue is that the parser method's code assumes am/pm symbol always appears after the hour value.
+ But this is not true, for example, the pattern for "zh-cn" puts am/pm field before all the other fields.
+ </p>
+ </body>
+</html>
+