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

Side by Side Diff: tests/corelib/json_test.dart

Issue 12320072: Revert "Revert "Use browsers JSON.parse for parsing JSON (#3)"" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 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
« no previous file with comments | « tests/corelib/corelib.status ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library json_test; 5 library json_test;
6 6
7 import "dart:json"; 7 import "dart:json";
8 8
9 bool badFormat(e) => e is FormatException; 9 bool badFormat(e) => e is FormatException;
10 10
(...skipping 18 matching lines...) Expand all
29 Expect.isTrue(expected.compareTo(actual) == 0, 29 Expect.isTrue(expected.compareTo(actual) == 0,
30 "$path: $expected vs. $actual"); 30 "$path: $expected vs. $actual");
31 } else { 31 } else {
32 // String, bool, null. 32 // String, bool, null.
33 Expect.equals(expected, actual, path); 33 Expect.equals(expected, actual, path);
34 } 34 }
35 } 35 }
36 compare(expected, value, "value"); 36 compare(expected, value, "value");
37 } 37 }
38 38
39 String escape(String s) {
40 var sb = new StringBuffer();
41 for (int i = 0; i < s.length; i++) {
42 int code = s.codeUnitAt(i);
43 if (code == '\\'.charCodeAt(0)) sb.write(r'\\');
44 else if (code == '\"'.charCodeAt(0)) sb.write(r'\"');
45 else if (code >= 32 && code < 127) sb.writeCharCode(code);
46 else {
47 String hex = '000${code.toRadixString(16)}';
48 sb.write(r'\u' '${hex.substring(hex.length - 4)}');
49 }
50 }
51 return '$sb';
52 }
53
39 void testThrows(json) { 54 void testThrows(json) {
40 Expect.throws(() => parse(json), badFormat); 55 Expect.throws(() => parse(json), badFormat, "json = '${escape(json)}'");
41 } 56 }
42 57
43 testNumbers() { 58 testNumbers() {
44 // Positive tests for number formats. 59 // Positive tests for number formats.
45 var integerList = ["0","9","9999"]; 60 var integerList = ["0","9","9999"];
46 var signList = ["", "-"]; 61 var signList = ["", "-"];
47 var fractionList = ["", ".0", ".1", ".99999"]; 62 var fractionList = ["", ".0", ".1", ".99999"];
48 var exponentList = [""]; 63 var exponentList = [""];
49 for (var exphead in ["e", "E", "e-", "E-", "e+", "E+"]) { 64 for (var exphead in ["e", "E", "e-", "E-", "e+", "E+"]) {
50 for (var expval in ["0", "1", "200"]) { 65 for (var expval in ["0", "1", "200"]) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 105 }
91 } 106 }
92 } 107 }
93 } 108 }
94 // Doubles overflow to Infinity. 109 // Doubles overflow to Infinity.
95 testJson("1e+400", double.INFINITY); 110 testJson("1e+400", double.INFINITY);
96 // (Integers do not, but we don't have those on dart2js). 111 // (Integers do not, but we don't have those on dart2js).
97 112
98 // Integer part cannot be omitted: 113 // Integer part cannot be omitted:
99 testError(integers: ""); 114 testError(integers: "");
100 // Initial zero only allowed for zero integer part. 115
101 testError(integers: ["00", "01"]); 116 // Test for "Initial zero only allowed for zero integer part" moved to
117 // json_strict_test.dart because IE's JSON.parse accepts additional initial
118 // zeros.
119
102 // Only minus allowed as sign. 120 // Only minus allowed as sign.
103 testError(signs: "+"); 121 testError(signs: "+");
104 // Requires digits after decimal point. 122 // Requires digits after decimal point.
105 testError(fractions: "."); 123 testError(fractions: ".");
106 // Requires exponent digts, and only digits. 124 // Requires exponent digts, and only digits.
107 testError(exponents: ["e", "e+", "e-", "e.0"]); 125 testError(exponents: ["e", "e+", "e-", "e.0"]);
108 126
109 // No whitespace inside numbers. 127 // No whitespace inside numbers.
110 testThrows("- 2.2e+2"); 128 // Additional case "- 2.2e+2" in json_strict_test.dart.
111 testThrows("-2 .2e+2"); 129 testThrows("-2 .2e+2");
112 testThrows("-2. 2e+2"); 130 testThrows("-2. 2e+2");
113 testThrows("-2.2 e+2"); 131 testThrows("-2.2 e+2");
114 testThrows("-2.2e +2"); 132 testThrows("-2.2e +2");
115 testThrows("-2.2e+ 2"); 133 testThrows("-2.2e+ 2");
116 134
117 testThrows("[2.,2]"); 135 testThrows("[2.,2]");
118 testThrows("{2.:2}"); 136 testThrows("{2.:2}");
119 } 137 }
120 138
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 testWhitespace() { 234 testWhitespace() {
217 // Valid white-space characters. 235 // Valid white-space characters.
218 var v = '\t\r\n\ '; 236 var v = '\t\r\n\ ';
219 // Invalid white-space and non-recognized characters. 237 // Invalid white-space and non-recognized characters.
220 var invalids = ['\x00', '\f', '\x08', '\\', '\xa0','\u2028', '\u2029']; 238 var invalids = ['\x00', '\f', '\x08', '\\', '\xa0','\u2028', '\u2029'];
221 239
222 // Valid whitespace accepted "everywhere". 240 // Valid whitespace accepted "everywhere".
223 testJson('$v[${v}-2.2e2$v,$v{$v"key"$v:${v}true$v}$v,$v"ab"$v]$v', 241 testJson('$v[${v}-2.2e2$v,$v{$v"key"$v:${v}true$v}$v,$v"ab"$v]$v',
224 [-2.2e2, {"key": true}, "ab"]); 242 [-2.2e2, {"key": true}, "ab"]);
225 243
244 // IE9 accepts invalid characters at the end, so some of these tests have been
245 // moved to json_strict_test.dart.
226 for (var i in invalids) { 246 for (var i in invalids) {
227 testThrows('${i}"s"'); 247 testThrows('${i}"s"');
228 testThrows('"s"${i}');
229 testThrows('42${i}'); 248 testThrows('42${i}');
230 testThrows('$i[]'); 249 testThrows('$i[]');
231 testThrows('[$i]'); 250 testThrows('[$i]');
232 testThrows('[$i"s"]'); 251 testThrows('[$i"s"]');
233 testThrows('["s"$i]'); 252 testThrows('["s"$i]');
234 testThrows('[]$i');
235 testThrows('$i{"k":"v"}'); 253 testThrows('$i{"k":"v"}');
236 testThrows('{$i"k":"v"}'); 254 testThrows('{$i"k":"v"}');
237 testThrows('{"k"$i:"v"}'); 255 testThrows('{"k"$i:"v"}');
238 testThrows('{"k":$i"v"}'); 256 testThrows('{"k":$i"v"}');
239 testThrows('{"k":"v"$i}'); 257 testThrows('{"k":"v"$i}');
240 testThrows('{"k":"v"}$i');
241 } 258 }
242 } 259 }
243 260
244 main() { 261 main() {
245 testNumbers(); 262 testNumbers();
246 testStrings(); 263 testStrings();
247 testWords(); 264 testWords();
248 testObjects(); 265 testObjects();
249 testArrays(); 266 testArrays();
250 testWhitespace(); 267 testWhitespace();
251 } 268 }
OLDNEW
« no previous file with comments | « tests/corelib/corelib.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698