Index: test/codegen/lib/convert/json_util_test.dart |
diff --git a/test/codegen/lib/convert/json_util_test.dart b/test/codegen/lib/convert/json_util_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ad811d792614a303ce251db2085dcb1420663267 |
--- /dev/null |
+++ b/test/codegen/lib/convert/json_util_test.dart |
@@ -0,0 +1,178 @@ |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
+// 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. |
+ |
+library jsonTest; |
+ |
+import "package:expect/expect.dart"; |
+import 'dart:convert'; |
+ |
+main() { |
+ testEscaping(); |
+ testParse(); |
+ testParseInvalid(); |
+} |
+ |
+void testParse() { |
+ // Scalars. |
+ Expect.equals(5, JSON.decode(' 5 ')); |
+ Expect.equals(-42, JSON.decode(' -42 ')); |
+ Expect.equals(3, JSON.decode(' 3e0 ')); |
+ Expect.equals(3.14, JSON.decode(' 3.14 ')); |
+ Expect.equals(1.0E-06, JSON.decode(' 1.0E-06 ')); |
+ Expect.equals(0, JSON.decode("0")); |
+ Expect.equals(1, JSON.decode("1")); |
+ Expect.equals(0.1, JSON.decode("0.1")); |
+ Expect.equals(1.1, JSON.decode("1.1")); |
+ Expect.equals(1.1, JSON.decode("1.100000")); |
+ Expect.equals(1.111111, JSON.decode("1.111111")); |
+ Expect.equals(-0, JSON.decode("-0")); |
+ Expect.equals(-1, JSON.decode("-1")); |
+ Expect.equals(-0.1, JSON.decode("-0.1")); |
+ Expect.equals(-1.1, JSON.decode("-1.1")); |
+ Expect.equals(-1.1, JSON.decode("-1.100000")); |
+ Expect.equals(-1.111111, JSON.decode("-1.111111")); |
+ Expect.equals(11, JSON.decode("1.1e1")); |
+ Expect.equals(11, JSON.decode("1.1e+1")); |
+ Expect.equals(0.11, JSON.decode("1.1e-1")); |
+ Expect.equals(11, JSON.decode("1.1E1")); |
+ Expect.equals(11, JSON.decode("1.1E+1")); |
+ Expect.equals(0.11, JSON.decode("1.1E-1")); |
+ Expect.equals(1E0, JSON.decode(" 1E0")); |
+ Expect.equals(1E+0, JSON.decode(" 1E+0")); |
+ Expect.equals(1E-0, JSON.decode(" 1E-0")); |
+ Expect.equals(1E00, JSON.decode(" 1E00")); |
+ Expect.equals(1E+00, JSON.decode(" 1E+00")); |
+ Expect.equals(1E-00, JSON.decode(" 1E-00")); |
+ Expect.equals(1E+10, JSON.decode(" 1E+10")); |
+ Expect.equals(1E+010, JSON.decode(" 1E+010")); |
+ Expect.equals(1E+0010, JSON.decode(" 1E+0010")); |
+ Expect.equals(1E10, JSON.decode(" 1E10")); |
+ Expect.equals(1E010, JSON.decode(" 1E010")); |
+ Expect.equals(1E0010, JSON.decode(" 1E0010")); |
+ Expect.equals(1E-10, JSON.decode(" 1E-10")); |
+ Expect.equals(1E-0010, JSON.decode(" 1E-0010")); |
+ Expect.equals(1E0, JSON.decode(" 1e0")); |
+ Expect.equals(1E+0, JSON.decode(" 1e+0")); |
+ Expect.equals(1E-0, JSON.decode(" 1e-0")); |
+ Expect.equals(1E00, JSON.decode(" 1e00")); |
+ Expect.equals(1E+00, JSON.decode(" 1e+00")); |
+ Expect.equals(1E-00, JSON.decode(" 1e-00")); |
+ Expect.equals(1E+10, JSON.decode(" 1e+10")); |
+ Expect.equals(1E+010, JSON.decode(" 1e+010")); |
+ Expect.equals(1E+0010, JSON.decode(" 1e+0010")); |
+ Expect.equals(1E10, JSON.decode(" 1e10")); |
+ Expect.equals(1E010, JSON.decode(" 1e010")); |
+ Expect.equals(1E0010, JSON.decode(" 1e0010")); |
+ Expect.equals(1E-10, JSON.decode(" 1e-10")); |
+ Expect.equals(1E-0010, JSON.decode(" 1e-0010")); |
+ Expect.equals(true, JSON.decode(' true ')); |
+ Expect.equals(false, JSON.decode(' false')); |
+ Expect.equals(null, JSON.decode(' null ')); |
+ Expect.equals(null, JSON.decode('\n\rnull\t')); |
+ Expect.equals('hi there" bob', JSON.decode(' "hi there\\" bob" ')); |
+ Expect.equals('', JSON.decode(' "" ')); |
+ |
+ // Lists. |
+ Expect.listEquals([], JSON.decode(' [] ')); |
+ Expect.listEquals(["entry"], JSON.decode(' ["entry"] ')); |
+ Expect.listEquals([true, false], JSON.decode(' [true, false] ')); |
+ Expect.listEquals([1, 2, 3], JSON.decode(' [ 1 , 2 , 3 ] ')); |
+ |
+ // Maps. |
+ Expect.mapEquals({}, JSON.decode(' {} ')); |
+ Expect.mapEquals({"key": "value"}, JSON.decode(' {"key": "value" } ')); |
+ Expect.mapEquals({"key1": 1, "key2": 2}, |
+ JSON.decode(' {"key1": 1, "key2": 2} ')); |
+ Expect.mapEquals({"key1": 1}, |
+ JSON.decode(' { "key1" : 1 } ')); |
+} |
+ |
+void testParseInvalid() { |
+ void testString(String s) { |
+ Expect.throws(() => JSON.decode(s), (e) => e is FormatException); |
+ } |
+ // Scalars |
+ testString(""); |
+ testString("-"); |
+ testString("-."); |
+ testString("3.a"); |
+ testString("{ key: value }"); |
+ testString("tru"); |
+ testString("1E--6"); |
+ testString("1E-+6"); |
+ testString("1E+-6"); |
+ testString("1E++6"); |
+ testString("1E6.6"); |
+ testString("1E-6.6"); |
+ testString("1E+6.6"); |
+ |
+ // JavaScript number literals not valid in JSON. |
+ testString('[01]'); |
+ testString('[.1]'); |
+ testString('[1.]'); |
+ testString('[1.e1]'); |
+ testString('[-.1]'); |
+ testString('[-1.]'); |
+ |
+ // Plain invalid number literals. |
+ testString('-'); |
+ testString('--1'); |
+ testString('-1e'); |
+ testString('1e--1]'); |
+ testString('1e+-1'); |
+ testString('1e-+1'); |
+ testString('1e++1'); |
+ |
+ // Lists |
+ testString('[, ]'); |
+ testString('["", ]'); |
+ testString('["", "]'); |
+ testString('["" ""]'); |
+ |
+ // Maps |
+ testString('{"" ""}'); |
+ testString('{"": "",}'); |
+} |
+ |
+void testEscaping() { |
+ Expect.stringEquals('""', JSON.encode('')); |
+ Expect.stringEquals('"\\u0000"', JSON.encode('\u0000')); |
+ Expect.stringEquals('"\\u0001"', JSON.encode('\u0001')); |
+ Expect.stringEquals('"\\u0002"', JSON.encode('\u0002')); |
+ Expect.stringEquals('"\\u0003"', JSON.encode('\u0003')); |
+ Expect.stringEquals('"\\u0004"', JSON.encode('\u0004')); |
+ Expect.stringEquals('"\\u0005"', JSON.encode('\u0005')); |
+ Expect.stringEquals('"\\u0006"', JSON.encode('\u0006')); |
+ Expect.stringEquals('"\\u0007"', JSON.encode('\u0007')); |
+ Expect.stringEquals('"\\b"', JSON.encode('\u0008')); |
+ Expect.stringEquals('"\\t"', JSON.encode('\u0009')); |
+ Expect.stringEquals('"\\n"', JSON.encode('\u000a')); |
+ Expect.stringEquals('"\\u000b"', JSON.encode('\u000b')); |
+ Expect.stringEquals('"\\f"', JSON.encode('\u000c')); |
+ Expect.stringEquals('"\\r"', JSON.encode('\u000d')); |
+ Expect.stringEquals('"\\u000e"', JSON.encode('\u000e')); |
+ Expect.stringEquals('"\\u000f"', JSON.encode('\u000f')); |
+ Expect.stringEquals('"\\u0010"', JSON.encode('\u0010')); |
+ Expect.stringEquals('"\\u0011"', JSON.encode('\u0011')); |
+ Expect.stringEquals('"\\u0012"', JSON.encode('\u0012')); |
+ Expect.stringEquals('"\\u0013"', JSON.encode('\u0013')); |
+ Expect.stringEquals('"\\u0014"', JSON.encode('\u0014')); |
+ Expect.stringEquals('"\\u0015"', JSON.encode('\u0015')); |
+ Expect.stringEquals('"\\u0016"', JSON.encode('\u0016')); |
+ Expect.stringEquals('"\\u0017"', JSON.encode('\u0017')); |
+ Expect.stringEquals('"\\u0018"', JSON.encode('\u0018')); |
+ Expect.stringEquals('"\\u0019"', JSON.encode('\u0019')); |
+ Expect.stringEquals('"\\u001a"', JSON.encode('\u001a')); |
+ Expect.stringEquals('"\\u001b"', JSON.encode('\u001b')); |
+ Expect.stringEquals('"\\u001c"', JSON.encode('\u001c')); |
+ Expect.stringEquals('"\\u001d"', JSON.encode('\u001d')); |
+ Expect.stringEquals('"\\u001e"', JSON.encode('\u001e')); |
+ Expect.stringEquals('"\\u001f"', JSON.encode('\u001f')); |
+ Expect.stringEquals('"\\\""', JSON.encode('"')); |
+ Expect.stringEquals('"\\\\"', JSON.encode('\\')); |
+ Expect.stringEquals('"Got \\b, \\f, \\n, \\r, \\t, \\u0000, \\\\, and \\"."', |
+ JSON.encode('Got \b, \f, \n, \r, \t, \u0000, \\, and ".')); |
+ Expect.stringEquals('"Got \\b\\f\\n\\r\\t\\u0000\\\\\\"."', |
+ JSON.encode('Got \b\f\n\r\t\u0000\\".')); |
+} |