123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- <!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','ar-eg']"></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", "ja-jp" and "ar-eg"
- 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: "¥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: "-¥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 456 789,46 €",
- comment: "Failed in IE: the currency textbox should not reject the value generated by itself. <a href='#cmt_1'>See #1.</a>"
- },
- { attrs: {Currency: "EUR", lang: "fr-fr"},
- desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
- value: "-123456789.46",
- expValue: "-123 456 789,46 €",
- comment: "Failed in IE: the currency textbox should not reject the value generated by itself. <a href='#cmt_1'>See #1.</a>"
- },
- { attrs: {Currency: "JPY", lang: "ja-jp"},
- desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
- value: "123456789.46",
- expValue: "¥123,456,789",
- comment: ""
- },
- { attrs: {Currency: "JPY", lang: "ja-jp"},
- desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
- value: "-123456789.46",
- expValue: "-¥123,456,789",
- comment: ""
- },
- { attrs: {Currency: "EGP", lang: "ar-eg"},
- desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
- value: "123456789.46",
- expValue: "ج.م.\u200F 123٬456٬789٫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: "ج.م.\u200F 123٬456٬789٫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: "ج.م.\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: "ج.م.\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: "CNY", lang: "zh-cn"},
- desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
- value: 123456789.46,
- expValue: "¥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: "-¥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 456 789,46 €",
- comment: "Failed in IE. <a href='#cmt_1'>See #1.</a>"
- },
- { attrs: {Currency: "EUR", lang: "fr-fr"},
- desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
- value: -123456789.46,
- expValue: "-123 456 789,46 €",
- comment: "Failed in IE. <a href='#cmt_1'>See #1.</a>"
- },
- { attrs: {Currency: "JPY", lang: "ja-jp"},
- desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
- value: 123456789,
- expValue: "¥123,456,789",
- comment: ""
- },
- { attrs: {Currency: "JPY", lang: "ja-jp"},
- desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
- value: -123456789,
- expValue: "-¥123,456,789",
- comment: ""
- },
- { attrs: {Currency: "EGP", lang: "ar-eg"},
- desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
- value: 123456789.46,
- expValue: "ج.م.\u200F 123٬456٬789٫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: "ج.م.\u200F 123٬456٬789٫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: "ج.م.\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: "ج.م.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦-",
- comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
- }
- ]);
- dojo.parser.parse();
- })();
- </script>
- <h2 class="testTitle">Issues & 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>&nbsp;</b> or <b>&#160;</b> or
- <b>&#xA0;</b> in HTML).
- They always convert the NBSP character to a normal space (U+0020, <b>&#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>
- <li>Russian uses NBSP characters in their date format pattern (see <a href="test_validateDate.html">test_validateDate.html</a>)</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 & 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>
|