Index: tests/lib/convert/json_chunk_test.dart |
diff --git a/tests/lib/convert/json_chunk_test.dart b/tests/lib/convert/json_chunk_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f094bfa70e559e07d810062613e757d0773520ac |
--- /dev/null |
+++ b/tests/lib/convert/json_chunk_test.dart |
@@ -0,0 +1,113 @@ |
+// Copyright (c) 2014, 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 json_test; |
+ |
+import "package:expect/expect.dart"; |
+import "dart:convert"; |
+ |
+bool badFormat(e) => e is FormatException; |
+ |
+jsonTest(name, expect, action(sink)) { |
Søren Gjesse
2014/10/24 11:12:24
name -> testName or nameOftest
Lasse Reichstein Nielsen
2014/10/27 12:42:34
testName.
|
+ var sink = new ChunkedConversionSink.withCallback((values) { |
+ var value = values[0]; |
+ Expect.equals(expect, value, "$name$value"); |
Søren Gjesse
2014/10/24 11:12:24
Separator before $value
Lasse Reichstein Nielsen
2014/10/27 12:42:33
Done.
|
+ }); |
+ var decoderSink = JSON.decoder.startChunkedConversion(sink); |
+ action(decoderSink); |
+} |
+ |
+main() { |
+ testNumbers(); |
+ testStrings(); |
+ testKeywords(); |
+} |
+ |
+void testStrings() { |
+ var s = r'"abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff"'; |
+ var expected = "abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff"; |
+ for (var i = 1; i < s.length - 1; i++) { |
+ var s1 = s.substring(0, i); |
+ var s2 = s.substring(i); |
+ jsonTest("$s1|$s2", expected, (sink) { |
+ sink.add(s1); |
+ sink.add(s2); |
+ sink.close(); |
+ }); |
+ jsonTest("$s1|$s2", expected, (sink) { |
+ sink.addSlice(s, 0, i, false); |
+ sink.addSlice(s, i, s.length, true); |
+ }); |
+ for (var j = i; j < s.length - 1; j++) { |
+ var s2a = s.substring(i, j); |
+ var s2b = s.substring(j); |
+ jsonTest("$s1|$s2a|$s2b", expected, (sink) { |
+ sink.add(s1); |
+ sink.add(s2a); |
+ sink.add(s2b); |
+ sink.close(); |
+ }); |
+ } |
+ } |
+} |
+ |
+void testNumbers() { |
+ for (var number in ["-0.12e-12", "-34.12E+12", "0.0e0", "9.9E9"]) { |
Søren Gjesse
2014/10/24 11:12:24
How about more numbers as in the other test. Just
Lasse Reichstein Nielsen
2014/10/27 12:42:33
Adding more numbers.
The important part here is to
|
+ var expected = double.parse(number); |
+ for (int i = 1; i < number.length - 1; i++) { |
+ var p1 = number.substring(0, i); |
+ var p2 = number.substring(i); |
+ jsonTest("$p1|$p2", expected, (sink) { |
+ sink.add(p1); |
+ sink.add(p2); |
+ sink.close(); |
+ }); |
+ |
+ jsonTest("$p1|$p2/slice", expected, (sink) { |
+ sink.addSlice(number, 0, i, false); |
+ sink.addSlice(number, i, number.length, true); |
+ }); |
+ |
+ for (int j = i; j < number.length - 1; j++) { |
+ var p2a = number.substring(i, j); |
+ var p2b = number.substring(j); |
+ jsonTest("$p1|$p2a|$p2b", expected, (sink) { |
+ sink.add(p1); |
+ sink.add(p2a); |
+ sink.add(p2b); |
+ sink.close(); |
+ }); |
+ } |
+ } |
+ } |
+} |
+ |
+void testKeywords() { |
+ for (var expected in [null, true, false]) { |
+ var s = "$expected"; |
+ for (int i = 1; i < s.length - 1; i++) { |
+ var s1 = s.substring(0, i); |
+ var s2 = s.substring(i); |
+ jsonTest("$s1|$s2", expected, (sink) { |
+ sink.add(s1); |
+ sink.add(s2); |
+ sink.close(); |
+ }); |
+ jsonTest("$s1|$s2", expected, (sink) { |
+ sink.addSlice(s, 0, i, false); |
+ sink.addSlice(s, i, s.length, true); |
+ }); |
+ for (var j = i; j < s.length - 1; j++) { |
+ var s2a = s.substring(i, j); |
+ var s2b = s.substring(j); |
+ jsonTest("$s1|$s2a|$s2b", expected, (sink) { |
+ sink.add(s1); |
+ sink.add(s2a); |
+ sink.add(s2b); |
+ sink.close(); |
+ }); |
+ } |
+ } |
+ } |
+} |