Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: pkg/intl/test/number_closure_test.dart

Issue 13814018: Make use of the patterns in Intl number formatting (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressing review comments Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/intl/lib/number_symbols_data.dart ('k') | pkg/intl/test/number_format_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/intl/test/number_closure_test.dart
diff --git a/pkg/intl/test/number_closure_test.dart b/pkg/intl/test/number_closure_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..8574e08dd6f2c663b0604fb383e1e08fc18e4f23
--- /dev/null
+++ b/pkg/intl/test/number_closure_test.dart
@@ -0,0 +1,388 @@
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/**
+ * Tests based on the closure number formatting tests.
+ */
+library number_closure_test;
+
+import "package:intl/intl.dart";
+import "package:unittest/unittest.dart";
+
+main() {
+ test("testVeryBigNumber", testVeryBigNumber);
+ test("testStandardFormat", testStandardFormat);
+ test("testNegativePercentage", testNegativePercentage);
+ test("testCustomPercentage", testCustomPercentage);
+ test("testBasicFormat", testBasicFormat);
+ test("testGrouping", testGrouping);
+ test("testPerMill", testPerMill);
+ test("testQuotes", testQuotes);
+ test("testZeros", testZeros);
+ test("testExponential", testExponential);
+ test("testPlusSignInExponentPart", testPlusSignInExponentPart);
+ test("testApis", testApis);
+ test("testLocaleSwitch", testLocaleSwitch);
+}
+
+/**
+ * Test two large numbers for equality, assuming that there may be some
+ * loss of precision in the less significant digits.
+ */
+veryBigNumberCompare(str1, str2) {
+ return str1.length == str2.length &&
+ str1.substring(0, 8) == str2.substring(0, 8);
+}
+
+testVeryBigNumber() {
+ var str;
+ var fmt;
+
+ fmt = new NumberFormat.decimalPattern();
+ str = fmt.format(1.3456E20);
+ expect(veryBigNumberCompare('134,559,999,999,999,000,000', str), isTrue);
+
+ fmt = new NumberFormat.percentPattern();
+ str = fmt.format(1.3456E20);
+ expect(veryBigNumberCompare('13,456,000,000,000,000,000,000%', str), isTrue);
+
+ // TODO(alanknight): Note that this disagrees with what ICU would print
+ // for this. We need significant digit support to do this properly.
+ fmt = new NumberFormat.scientificPattern();
+ str = fmt.format(1.3456E20);
+ expect('1E20', str);
+
+ fmt = new NumberFormat.decimalPattern();
+ str = fmt.format(-1.234567890123456e306);
+ expect(1 + 1 + 306 + 306 / 3, str.length);
+ expect('-1,234,567,890,123,45', str.substring(0, 21));
+
+ str = fmt.format(1 / 0);
+ expect('∞', str);
+ str = fmt.format(-1 / 0);
+ expect('-∞', str);
+}
+
+void testStandardFormat() {
+ var str;
+ var fmt;
+ fmt = new NumberFormat.decimalPattern();
+ str = fmt.format(1234.579);
+ expect('1,234.579', str);
+ fmt = new NumberFormat.percentPattern();
+ str = fmt.format(1234.579);
+ expect('123,458%', str);
+ fmt = new NumberFormat.scientificPattern();
+ str = fmt.format(1234.579);
+ expect('1E3', str);
+}
+
+void testNegativePercentage() {
+ var str;
+ var fmt = new NumberFormat('#,##0.00%');
+ str = fmt.format(-1234.56);
+ expect('-123,456.00%', str);
+
+ fmt = new NumberFormat.percentPattern();
+ str = fmt.format(-1234.579);
+ expect('-123,458%', str);
+}
+
+void testCustomPercentage() {
+ var fmt = new NumberFormat.percentPattern();
+ fmt.setMaximumFractionDigits(1);
+ fmt.setMinimumFractionDigits(1);
+ var str = fmt.format(0.1291);
+ expect('12.9%', str);
+ fmt.setMaximumFractionDigits(2);
+ fmt.setMinimumFractionDigits(1);
+ str = fmt.format(0.129);
+ expect('12.9%', str);
+ fmt.setMaximumFractionDigits(2);
+ fmt.setMinimumFractionDigits(1);
+ str = fmt.format(0.12);
+ expect('12.0%', str);
+ fmt.setMaximumFractionDigits(2);
+ fmt.setMinimumFractionDigits(1);
+ str = fmt.format(0.12911);
+ expect('12.91%', str);
+}
+
+void testBasicFormat() {
+ var fmt = new NumberFormat('0.0000');
+ var str = fmt.format(123.45789179565757);
+ expect('123.4579', str);
+}
+
+void testGrouping() {
+ var str;
+
+ var fmt = new NumberFormat('#,###');
+ str = fmt.format(1234567890);
+ expect('1,234,567,890', str);
+ fmt = new NumberFormat('#,####');
+ str = fmt.format(1234567890);
+ expect('12,3456,7890', str);
+
+ fmt = new NumberFormat('#');
+ str = fmt.format(1234567890);
+ expect('1234567890', str);
+}
+
+void testPerMill() {
+ var str;
+
+ var fmt = new NumberFormat('###.###\u2030');
+ str = fmt.format(0.4857);
+ expect('485.7\u2030', str);
+}
+
+void testQuotes() {
+ var str;
+
+ var fmt = new NumberFormat('a\'fo\'\'o\'b#');
+ str = fmt.format(123);
+ expect('afo\'ob123', str);
+
+ fmt = new NumberFormat('a\'\'b#');
+ str = fmt.format(123);
+ expect('a\'b123', str);
+
+ fmt = new NumberFormat('a\'fo\'\'o\'b#');
+ str = fmt.format(-123);
+ expect('afo\'ob-123', str);
+
+ fmt = new NumberFormat('a\'\'b#');
+ str = fmt.format(-123);
+ expect('a\'b-123', str);
+}
+
+void testZeros() {
+ var str;
+ var fmt;
+
+ fmt = new NumberFormat('#.#');
+ str = fmt.format(0);
+ expect('0', str);
+ fmt = new NumberFormat('#.');
+ str = fmt.format(0);
+ expect('0.', str);
+ fmt = new NumberFormat('.#');
+ str = fmt.format(0);
+ expect('.0', str);
+ fmt = new NumberFormat('#');
+ str = fmt.format(0);
+ expect('0', str);
+
+ fmt = new NumberFormat('#0.#');
+ str = fmt.format(0);
+ expect('0', str);
+ fmt = new NumberFormat('#0.');
+ str = fmt.format(0);
+ expect('0.', str);
+ fmt = new NumberFormat('#.0');
+ str = fmt.format(0);
+ expect('.0', str);
+ fmt = new NumberFormat('#');
+ str = fmt.format(0);
+ expect('0', str);
+ fmt = new NumberFormat('000');
+ str = fmt.format(0);
+ expect('000', str);
+}
+
+void testExponential() {
+ var str;
+ var fmt;
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(0.01234);
+ expect('1.234E-2', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(0.01234);
+ expect('12.340E-03', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(0.01234);
+ expect('12.34E-003', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(0.01234);
+ expect('1.234E-2', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(123456789);
+ expect('1.2346E8', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(123456789);
+ expect('12.346E07', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(123456789);
+ expect('123.456789E006', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(123456789);
+ expect('1.235E8', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(1.23e300);
+ expect('1.23E300', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(1.23e300);
+ expect('12.300E299', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(1.23e300);
+ expect('1.23E300', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(1.23e300);
+ expect('1.23E300', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(-3.141592653e-271);
+ expect('-3.1416E-271', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(-3.141592653e-271);
+ expect('-31.416E-272', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(-3.141592653e-271);
+ expect('-314.159265E-273', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(-3.141592653e-271);
+ expect('[3.142E-271]', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(0);
+ expect('0E0', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(0);
+ expect('00.000E00', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(0);
+ expect('0E000', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(0);
+ expect('0E0', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(-1);
+ expect('-1E0', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(-1);
+ expect('-10.000E-01', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(-1);
+ expect('-1E000', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(-1);
+ expect('[1E0]', str);
+
+ fmt = new NumberFormat('0.####E0');
+ str = fmt.format(1);
+ expect('1E0', str);
+ fmt = new NumberFormat('00.000E00');
+ str = fmt.format(1);
+ expect('10.000E-01', str);
+ fmt = new NumberFormat('##0.######E000');
+ str = fmt.format(1);
+ expect('1E000', str);
+ fmt = new NumberFormat('0.###E0;[0.###E0]');
+ str = fmt.format(1);
+ expect('1E0', str);
+
+ fmt = new NumberFormat('#E0');
+ str = fmt.format(12345.0);
+ expect('1E4', str);
+ fmt = new NumberFormat('0E0');
+ str = fmt.format(12345.0);
+ expect('1E4', str);
+ fmt = new NumberFormat('##0.###E0');
+ str = fmt.format(12345.0);
+ expect('12.345E3', str);
+ fmt = new NumberFormat('##0.###E0');
+ str = fmt.format(12345.00001);
+ expect('12.345E3', str);
+ fmt = new NumberFormat('##0.###E0');
+ str = fmt.format(12345);
+ expect('12.345E3', str);
+
+ fmt = new NumberFormat('##0.####E0');
+ str = fmt.format(789.12345e-9);
+ fmt = new NumberFormat('##0.####E0');
+ str = fmt.format(780e-9);
+ expect('780E-9', str);
+ fmt = new NumberFormat('.###E0');
+ str = fmt.format(45678.0);
+ expect('.457E5', str);
+ fmt = new NumberFormat('.###E0');
+ str = fmt.format(0);
+ expect('.0E0', str);
+
+ fmt = new NumberFormat('#E0');
+ str = fmt.format(45678000);
+ expect('5E7', str);
+ fmt = new NumberFormat('##E0');
+ str = fmt.format(45678000);
+ expect('46E6', str);
+ fmt = new NumberFormat('####E0');
+ str = fmt.format(45678000);
+ expect('4568E4', str);
+ fmt = new NumberFormat('0E0');
+ str = fmt.format(45678000);
+ expect('5E7', str);
+ fmt = new NumberFormat('00E0');
+ str = fmt.format(45678000);
+ expect('46E6', str);
+ fmt = new NumberFormat('000E0');
+ str = fmt.format(45678000);
+ expect('457E5', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(0.0000123);
+ expect('12E-6', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(0.000123);
+ expect('123E-6', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(0.00123);
+ expect('1E-3', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(0.0123);
+ expect('12E-3', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(0.123);
+ expect('123E-3', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(1.23);
+ expect('1E0', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(12.3);
+ expect('12E0', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(123.0);
+ expect('123E0', str);
+ fmt = new NumberFormat('###E0');
+ str = fmt.format(1230.0);
+ expect('1E3', str);
+}
+
+void testPlusSignInExponentPart() {
+ var fmt;
+ fmt = new NumberFormat('0E+0');
+ var str = fmt.format(45678000);
+ expect('5E+7', str);
+}
+
+void testApis() {
+ var fmt;
+ var str;
+
+ fmt = new NumberFormat('#,###');
+ str = fmt.format(1234567890);
+ expect('1,234,567,890', str);
+}
+
+testLocaleSwitch() {
+ Intl.withLocale("fr", verifyFrenchLocale);
+}
+
+void verifyFrenchLocale() {
+ var fmt = new NumberFormat('#,###');
+ var str = fmt.format(1234567890);
+ expect('1\u00a0234\u00a0567\u00a0890', str);
+}
« no previous file with comments | « pkg/intl/lib/number_symbols_data.dart ('k') | pkg/intl/test/number_format_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698