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

Side by Side Diff: tests/lib/convert/json_chunk_test.dart

Issue 649113005: Make JSON parsing work as a chunked conversion sink. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Also add an UTF-8 base JSON parser, without intermediate string representations. 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
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
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.
4
5 library json_test;
6
7 import "package:expect/expect.dart";
8 import "dart:convert";
9
10 bool badFormat(e) => e is FormatException;
11
12 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.
13 var sink = new ChunkedConversionSink.withCallback((values) {
14 var value = values[0];
15 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.
16 });
17 var decoderSink = JSON.decoder.startChunkedConversion(sink);
18 action(decoderSink);
19 }
20
21 main() {
22 testNumbers();
23 testStrings();
24 testKeywords();
25 }
26
27 void testStrings() {
28 var s = r'"abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff"';
29 var expected = "abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff";
30 for (var i = 1; i < s.length - 1; i++) {
31 var s1 = s.substring(0, i);
32 var s2 = s.substring(i);
33 jsonTest("$s1|$s2", expected, (sink) {
34 sink.add(s1);
35 sink.add(s2);
36 sink.close();
37 });
38 jsonTest("$s1|$s2", expected, (sink) {
39 sink.addSlice(s, 0, i, false);
40 sink.addSlice(s, i, s.length, true);
41 });
42 for (var j = i; j < s.length - 1; j++) {
43 var s2a = s.substring(i, j);
44 var s2b = s.substring(j);
45 jsonTest("$s1|$s2a|$s2b", expected, (sink) {
46 sink.add(s1);
47 sink.add(s2a);
48 sink.add(s2b);
49 sink.close();
50 });
51 }
52 }
53 }
54
55 void testNumbers() {
56 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
57 var expected = double.parse(number);
58 for (int i = 1; i < number.length - 1; i++) {
59 var p1 = number.substring(0, i);
60 var p2 = number.substring(i);
61 jsonTest("$p1|$p2", expected, (sink) {
62 sink.add(p1);
63 sink.add(p2);
64 sink.close();
65 });
66
67 jsonTest("$p1|$p2/slice", expected, (sink) {
68 sink.addSlice(number, 0, i, false);
69 sink.addSlice(number, i, number.length, true);
70 });
71
72 for (int j = i; j < number.length - 1; j++) {
73 var p2a = number.substring(i, j);
74 var p2b = number.substring(j);
75 jsonTest("$p1|$p2a|$p2b", expected, (sink) {
76 sink.add(p1);
77 sink.add(p2a);
78 sink.add(p2b);
79 sink.close();
80 });
81 }
82 }
83 }
84 }
85
86 void testKeywords() {
87 for (var expected in [null, true, false]) {
88 var s = "$expected";
89 for (int i = 1; i < s.length - 1; i++) {
90 var s1 = s.substring(0, i);
91 var s2 = s.substring(i);
92 jsonTest("$s1|$s2", expected, (sink) {
93 sink.add(s1);
94 sink.add(s2);
95 sink.close();
96 });
97 jsonTest("$s1|$s2", expected, (sink) {
98 sink.addSlice(s, 0, i, false);
99 sink.addSlice(s, i, s.length, true);
100 });
101 for (var j = i; j < s.length - 1; j++) {
102 var s2a = s.substring(i, j);
103 var s2b = s.substring(j);
104 jsonTest("$s1|$s2a|$s2b", expected, (sink) {
105 sink.add(s1);
106 sink.add(s2a);
107 sink.add(s2b);
108 sink.close();
109 });
110 }
111 }
112 }
113 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698