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

Side by Side Diff: test/codegen/lib/convert/json_chunk_test.dart

Issue 1965563003: Update dart:convert and dart:core Uri. (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
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(testName, expect, action(sink)) {
13 var sink = new ChunkedConversionSink.withCallback((values) {
14 var value = values[0];
15 Expect.equals(expect, value, "$testName:$value");
16 });
17 var decoderSink = JSON.decoder.startChunkedConversion(sink);
18 action(decoderSink);
19 }
20
21 jsonThrowsTest(testName, action(sink)) {
22 var sink = new ChunkedConversionSink.withCallback((values) {
23 Expect.fail("Should have thrown: $testName");
24 });
25 var decoderSink = JSON.decoder.startChunkedConversion(sink);
26 Expect.throws(() { action(decoderSink); }, (e) => e is FormatException,
27 testName);
28 }
29
30 main() {
31 testNumbers();
32 testStrings();
33 testKeywords();
34 }
35
36 void testStrings() {
37 var s = r'"abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff"';
38 var expected = "abc\f\n\r\t\b\"\/\\\u0001\u9999\uffff";
39 for (var i = 1; i < s.length - 1; i++) {
40 var s1 = s.substring(0, i);
41 var s2 = s.substring(i);
42 jsonTest("$s1|$s2", expected, (sink) {
43 sink.add(s1);
44 sink.add(s2);
45 sink.close();
46 });
47 jsonTest("$s1|$s2", expected, (sink) {
48 sink.addSlice(s, 0, i, false);
49 sink.addSlice(s, i, s.length, true);
50 });
51 for (var j = i; j < s.length - 1; j++) {
52 var s2a = s.substring(i, j);
53 var s2b = s.substring(j);
54 jsonTest("$s1|$s2a|$s2b", expected, (sink) {
55 sink.add(s1);
56 sink.add(s2a);
57 sink.add(s2b);
58 sink.close();
59 });
60 }
61 }
62 }
63
64 void testNumbers() {
65 void testNumber(number) {
66 var expected = num.parse(number);
67 for (int i = 1; i < number.length - 1; i++) {
68 var p1 = number.substring(0, i);
69 var p2 = number.substring(i);
70 jsonTest("$p1|$p2", expected, (sink) {
71 sink.add(p1);
72 sink.add(p2);
73 sink.close();
74 });
75
76 jsonTest("$p1|$p2/slice", expected, (sink) {
77 sink.addSlice(number, 0, i, false);
78 sink.addSlice(number, i, number.length, true);
79 });
80
81 for (int j = i; j < number.length - 1; j++) {
82 var p2a = number.substring(i, j);
83 var p2b = number.substring(j);
84 jsonTest("$p1|$p2a|$p2b", expected, (sink) {
85 sink.add(p1);
86 sink.add(p2a);
87 sink.add(p2b);
88 sink.close();
89 });
90 }
91 }
92 }
93 for (var sign in ["-", ""]) {
94 for (var intPart in ["0", "1", "99"]) {
95 for (var decimalPoint in [".", ""]) {
96 for (var decimals in decimalPoint.isEmpty ? [""] : ["0", "99"]) {
97 for (var e in ["e", "e-", "e+", ""]) {
98 for (var exp in e.isEmpty ? [""] : ["0", "2", "22", "34"]) {
99 testNumber("$sign$intPart$decimalPoint$decimals$e$exp");
100 }
101 }
102 }
103 }
104 }
105 }
106
107 void negativeTest(number) {
108 for (int i = 1; i < number.length - 1; i++) {
109 var p1 = number.substring(0, i);
110 var p2 = number.substring(i);
111 jsonThrowsTest("$p1|$p2", (sink) {
112 sink.add(p1);
113 sink.add(p2);
114 sink.close();
115 });
116
117 jsonThrowsTest("$p1|$p2/slice", (sink) {
118 sink.addSlice(number, 0, i, false);
119 sink.addSlice(number, i, number.length, true);
120 });
121
122 for (int j = i; j < number.length - 1; j++) {
123 var p2a = number.substring(i, j);
124 var p2b = number.substring(j);
125 jsonThrowsTest("$p1|$p2a|$p2b", (sink) {
126 sink.add(p1);
127 sink.add(p2a);
128 sink.add(p2b);
129 sink.close();
130 });
131 }
132 }
133 }
134
135 negativeTest("+1e");
136 negativeTest("-00");
137 negativeTest("01");
138 negativeTest(".1");
139 negativeTest("0.");
140 negativeTest("0.e1");
141 negativeTest("1e");
142 negativeTest("1e+");
143 negativeTest("1e-");
144 }
145
146 void testKeywords() {
147 for (var expected in [null, true, false]) {
148 var s = "$expected";
149 for (int i = 1; i < s.length - 1; i++) {
150 var s1 = s.substring(0, i);
151 var s2 = s.substring(i);
152 jsonTest("$s1|$s2", expected, (sink) {
153 sink.add(s1);
154 sink.add(s2);
155 sink.close();
156 });
157 jsonTest("$s1|$s2", expected, (sink) {
158 sink.addSlice(s, 0, i, false);
159 sink.addSlice(s, i, s.length, true);
160 });
161 for (var j = i; j < s.length - 1; j++) {
162 var s2a = s.substring(i, j);
163 var s2b = s.substring(j);
164 jsonTest("$s1|$s2a|$s2b", expected, (sink) {
165 sink.add(s1);
166 sink.add(s2a);
167 sink.add(s2b);
168 sink.close();
169 });
170 }
171 }
172 }
173 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698