| Index: tests/corelib/json_test.dart
|
| diff --git a/tests/corelib/json_test.dart b/tests/corelib/json_test.dart
|
| index 75d22a3bd89e1d7086ae60958646a29e13d7f681..8d0f2dacc5838c14a202ab25a1b943d9f7f5a5b5 100644
|
| --- a/tests/corelib/json_test.dart
|
| +++ b/tests/corelib/json_test.dart
|
| @@ -36,8 +36,23 @@ void testJson(json, expected) {
|
| compare(expected, value, "value");
|
| }
|
|
|
| +String escape(String s) {
|
| + var sb = new StringBuffer();
|
| + for (int i = 0; i < s.length; i++) {
|
| + int code = s.codeUnitAt(i);
|
| + if (code == '\\'.charCodeAt(0)) sb.write(r'\\');
|
| + else if (code == '\"'.charCodeAt(0)) sb.write(r'\"');
|
| + else if (code >= 32 && code < 127) sb.writeCharCode(code);
|
| + else {
|
| + String hex = '000${code.toRadixString(16)}';
|
| + sb.write(r'\u' '${hex.substring(hex.length - 4)}');
|
| + }
|
| + }
|
| + return '$sb';
|
| +}
|
| +
|
| void testThrows(json) {
|
| - Expect.throws(() => parse(json), badFormat);
|
| + Expect.throws(() => parse(json), badFormat, "json = '${escape(json)}'");
|
| }
|
|
|
| testNumbers() {
|
| @@ -97,8 +112,11 @@ testNumbers() {
|
|
|
| // Integer part cannot be omitted:
|
| testError(integers: "");
|
| - // Initial zero only allowed for zero integer part.
|
| - testError(integers: ["00", "01"]);
|
| +
|
| + // Test for "Initial zero only allowed for zero integer part" moved to
|
| + // json_strict_test.dart because IE's JSON.parse accepts additional initial
|
| + // zeros.
|
| +
|
| // Only minus allowed as sign.
|
| testError(signs: "+");
|
| // Requires digits after decimal point.
|
| @@ -107,7 +125,7 @@ testNumbers() {
|
| testError(exponents: ["e", "e+", "e-", "e.0"]);
|
|
|
| // No whitespace inside numbers.
|
| - testThrows("- 2.2e+2");
|
| + // Additional case "- 2.2e+2" in json_strict_test.dart.
|
| testThrows("-2 .2e+2");
|
| testThrows("-2. 2e+2");
|
| testThrows("-2.2 e+2");
|
| @@ -223,21 +241,20 @@ testWhitespace() {
|
| testJson('$v[${v}-2.2e2$v,$v{$v"key"$v:${v}true$v}$v,$v"ab"$v]$v',
|
| [-2.2e2, {"key": true}, "ab"]);
|
|
|
| + // IE9 accepts invalid characters at the end, so some of these tests have been
|
| + // moved to json_strict_test.dart.
|
| for (var i in invalids) {
|
| testThrows('${i}"s"');
|
| - testThrows('"s"${i}');
|
| testThrows('42${i}');
|
| testThrows('$i[]');
|
| testThrows('[$i]');
|
| testThrows('[$i"s"]');
|
| testThrows('["s"$i]');
|
| - testThrows('[]$i');
|
| testThrows('$i{"k":"v"}');
|
| testThrows('{$i"k":"v"}');
|
| testThrows('{"k"$i:"v"}');
|
| testThrows('{"k":$i"v"}');
|
| testThrows('{"k":"v"$i}');
|
| - testThrows('{"k":"v"}$i');
|
| }
|
| }
|
|
|
|
|