| Index: packages/intl/test/number_closure_test.dart
|
| diff --git a/packages/intl/test/number_closure_test.dart b/packages/intl/test/number_closure_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8f4410cae522dbb14f7855f7c68fda8fe12d7c8c
|
| --- /dev/null
|
| +++ b/packages/intl/test/number_closure_test.dart
|
| @@ -0,0 +1,398 @@
|
| +// 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 'dart:async';
|
| +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("testLocaleSwitchAsync", testLocaleSwitchAsync);
|
| +}
|
| +
|
| +/**
|
| + * 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,560,000,000,000,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.maximumFractionDigits = 1;
|
| + fmt.minimumFractionDigits = 1;
|
| + var str = fmt.format(0.1291);
|
| + expect('12.9%', str);
|
| + fmt.maximumFractionDigits = 2;
|
| + fmt.minimumFractionDigits = 1;
|
| + str = fmt.format(0.129);
|
| + expect('12.9%', str);
|
| + fmt.maximumFractionDigits = 2;
|
| + fmt.minimumFractionDigits = 1;
|
| + str = fmt.format(0.12);
|
| + expect('12.0%', str);
|
| + fmt.maximumFractionDigits = 2;
|
| + fmt.minimumFractionDigits = 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\'ob123', str);
|
| +
|
| + fmt = new NumberFormat('a\'\'b#');
|
| + str = fmt.format(-123);
|
| + expect('-a\'b123', 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);
|
| +}
|
| +
|
| +testLocaleSwitchAsync() {
|
| + Intl.withLocale("fr", () {
|
| + new Timer(new Duration(milliseconds: 10), expectAsync(verifyFrenchLocale));
|
| + });
|
| + // Verify that things running outside the zone still get en_US.
|
| + testStandardFormat();
|
| +}
|
| +
|
| +void verifyFrenchLocale() {
|
| + var fmt = new NumberFormat('#,###');
|
| + var str = fmt.format(1234567890);
|
| + expect(str, '1\u00a0234\u00a0567\u00a0890');
|
| +}
|
|
|