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

Side by Side Diff: pkg/intl/test/number_format_test.dart

Issue 605343002: Per-mille parsing was dividing by 100, not 1000 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /** 1 /**
2 * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 * for details. All rights reserved. Use of this source code is governed by a 3 * for details. All rights reserved. Use of this source code is governed by a
4 * BSD-style license that can be found in the LICENSE file. 4 * BSD-style license that can be found in the LICENSE file.
5 */ 5 */
6 6
7 library number_format_test; 7 library number_format_test;
8 8
9 import 'package:unittest/unittest.dart'; 9 import 'package:unittest/unittest.dart';
10 import 'package:intl/number_symbols_data.dart'; 10 import 'package:intl/number_symbols_data.dart';
11 import 'package:intl/intl.dart'; 11 import 'package:intl/intl.dart';
12 import 'number_test_data.dart'; 12 import 'number_test_data.dart';
13 import 'dart:math'; 13 import 'dart:math';
14 14
15 /** 15 /**
16 * Tests the Numeric formatting library in dart. 16 * Tests the Numeric formatting library in dart.
17 */ 17 */
18 var testNumbersWeCanReadBack = { 18 var testNumbersWeCanReadBack = {
19 "-1" : -1, 19 "-1" : -1,
20 "-2" : -2.0, 20 "-2" : -2.0,
21 "-0.01" : -0.01, 21 "-0.01" : -0.01,
22 "0.001": 0.001, 22 "0.001": 0.001,
23 "0.01": 0.01, 23 "0.01": 0.01,
24 "0.1": 0.1, 24 "0.1": 0.1,
25 "1": 1, 25 "1": 1,
26 "2": 2.0, 26 "2": 2.0,
27 "10": 10, 27 "10": 10,
28 "100": 100, 28 "100": 100,
29 "1,000": 1000, 29 "1,000": 1000,
30 "2,000,000,000,000": 2000000000000, 30 "2,000,000,000,000": 2000000000000,
31 "0.123": 0.123, 31 "0.123": 0.123,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 new NumberFormat.percentPattern(locale), 69 new NumberFormat.percentPattern(locale),
70 ]; 70 ];
71 } 71 }
72 72
73 // Pay no attention to the hint. This is here deliberately to have different 73 // Pay no attention to the hint. This is here deliberately to have different
74 // behavior in the Dart VM versus Javascript so we can distinguish the two. 74 // behavior in the Dart VM versus Javascript so we can distinguish the two.
75 inJavaScript() => 1 is double; 75 inJavaScript() => 1 is double;
76 76
77 main() { 77 main() {
78 // For data from a list of locales, run each locale's data as a separate 78 // For data from a list of locales, run each locale's data as a separate
79 // test so we can see exactly which ones pass or fail. The test data is 79 // test so we can see exactly which ones pass or fail. The test data is
80 // hard-coded as printing 123, -12.3, %12,300, -1,230% in each locale. 80 // hard-coded as printing 123, -12.3, %12,300, -1,230% in each locale.
81 var mainList = numberTestData; 81 var mainList = numberTestData;
82 var sortedLocales = new List.from(numberFormatSymbols.keys); 82 var sortedLocales = new List.from(numberFormatSymbols.keys);
83 sortedLocales.sort((a, b) => a.compareTo(b)); 83 sortedLocales.sort((a, b) => a.compareTo(b));
84 for (var locale in sortedLocales) { 84 for (var locale in sortedLocales) {
85 var testFormats = standardFormats(locale); 85 var testFormats = standardFormats(locale);
86 var testLength = (testFormats.length * 3) + 1; 86 var testLength = (testFormats.length * 3) + 1;
87 var list = mainList.take(testLength).iterator; 87 var list = mainList.take(testLength).iterator;
88 mainList = mainList.skip(testLength); 88 mainList = mainList.skip(testLength);
89 var nextLocaleFromList = (list..moveNext()).current; 89 var nextLocaleFromList = (list..moveNext()).current;
90 test("Test against ICU data for $locale", () { 90 test("Test against ICU data for $locale", () {
91 expect(locale, nextLocaleFromList); 91 expect(locale, nextLocaleFromList);
92 for (var format in testFormats) { 92 for (var format in testFormats) {
93 var formatted = format.format(123); 93 var formatted = format.format(123);
94 var negative = format.format(-12.3); 94 var negative = format.format(-12.3);
95 var large = format.format(1234567890); 95 var large = format.format(1234567890);
96 var expected = (list..moveNext()).current; 96 var expected = (list..moveNext()).current;
97 expect(formatted, expected); 97 expect(formatted, expected);
98 var expectedNegative = (list..moveNext()).current; 98 var expectedNegative = (list..moveNext()).current;
99 // Some of these results from CLDR have a leading LTR/RTL indicator, 99 // Some of these results from CLDR have a leading LTR/RTL indicator,
100 // which we don't want. We also treat the difference between Unicode 100 // which we don't want. We also treat the difference between Unicode
101 // minus sign (2212) and hyphen-minus (45) as not significant. 101 // minus sign (2212) and hyphen-minus (45) as not significant.
102 expectedNegative = expectedNegative 102 expectedNegative = expectedNegative
103 .replaceAll("\u200e", "") 103 .replaceAll("\u200e", "")
104 .replaceAll("\u200f", "") 104 .replaceAll("\u200f", "")
105 .replaceAll("\u2212", "-"); 105 .replaceAll("\u2212", "-");
106 expect(negative, expectedNegative); 106 expect(negative, expectedNegative);
107 var expectedLarge = (list..moveNext()).current; 107 var expectedLarge = (list..moveNext()).current;
108 expect(large, expectedLarge); 108 expect(large, expectedLarge);
109 var readBack = format.parse(formatted); 109 var readBack = format.parse(formatted);
110 expect(readBack, 123); 110 expect(readBack, 123);
(...skipping 25 matching lines...) Expand all
136 test('Exponential form', () { 136 test('Exponential form', () {
137 var number = new NumberFormat("#.###E0"); 137 var number = new NumberFormat("#.###E0");
138 for (var x in testExponential.keys) { 138 for (var x in testExponential.keys) {
139 var formatted = number.format(testExponential[x]); 139 var formatted = number.format(testExponential[x]);
140 expect(formatted, x); 140 expect(formatted, x);
141 var readBack = number.parse(formatted); 141 var readBack = number.parse(formatted);
142 expect(testExponential[x], readBack); 142 expect(testExponential[x], readBack);
143 } 143 }
144 }); 144 });
145 145
146 // We can't do these in the normal tests because those also format the
147 // numbers and we're reading them in a format where they won't print
148 // back the same way.
149 test('Parsing modifiers,e.g. percent, in the base format', () {
150 var number = new NumberFormat();
151 var modified = { "12%" : 0.12, "12\u2030" : 0.012};
152 modified.addAll(testExponential);
153 for (var x in modified.keys) {
154 var parsed = number.parse(x);
155 expect(parsed, modified[x]);
156 }
157 });
158
146 test('Explicit currency name', () { 159 test('Explicit currency name', () {
147 var amount = 1000000.32; 160 var amount = 1000000.32;
148 var usConvention = new NumberFormat.currencyPattern('en_US', '€'); 161 var usConvention = new NumberFormat.currencyPattern('en_US', '€');
149 var formatted = usConvention.format(amount); 162 var formatted = usConvention.format(amount);
150 expect(formatted, '€1,000,000.32'); 163 expect(formatted, '€1,000,000.32');
151 var readBack = usConvention.parse(formatted); 164 var readBack = usConvention.parse(formatted);
152 expect(readBack, amount); 165 expect(readBack, amount);
153 var swissConvention = new NumberFormat.currencyPattern('de_CH', r'$'); 166 var swissConvention = new NumberFormat.currencyPattern('de_CH', r'$');
154 formatted = swissConvention.format(amount); 167 formatted = swissConvention.format(amount);
155 var nbsp = new String.fromCharCode(0xa0); 168 var nbsp = new String.fromCharCode(0xa0);
(...skipping 19 matching lines...) Expand all
175 }); 188 });
176 189
177 test('Unparseable', () { 190 test('Unparseable', () {
178 var format = new NumberFormat.currencyPattern(); 191 var format = new NumberFormat.currencyPattern();
179 expect(() => format.parse("abcdefg"), throwsFormatException); 192 expect(() => format.parse("abcdefg"), throwsFormatException);
180 expect(() => format.parse(""), throwsFormatException); 193 expect(() => format.parse(""), throwsFormatException);
181 expect(() => format.parse("1.0zzz"), throwsFormatException); 194 expect(() => format.parse("1.0zzz"), throwsFormatException);
182 expect(() => format.parse("-∞+1"), throwsFormatException); 195 expect(() => format.parse("-∞+1"), throwsFormatException);
183 }); 196 });
184 } 197 }
OLDNEW
« pkg/intl/lib/src/intl/number_format.dart ('K') | « pkg/intl/lib/src/intl/number_format.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698