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

Unified Diff: tests/lib/convert/json_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 side-by-side diff with in-line comments
Download patch
Index: tests/lib/convert/json_test.dart
diff --git a/tests/lib/convert/json_test.dart b/tests/lib/convert/json_test.dart
index 0cf304897263aa76bb5f2a55a6fe9e7f3e8eb692..cfed8d9e0429edf0824cc47985043b3a82f63ab4 100644
--- a/tests/lib/convert/json_test.dart
+++ b/tests/lib/convert/json_test.dart
@@ -27,22 +27,52 @@ void testJson(json, expected) {
} else if (expected is num) {
Expect.equals(expected is int, actual is int, "$path: same number type");
Expect.isTrue(expected.compareTo(actual) == 0,
- "$path: $expected vs. $actual");
+ "$path: Expected: $expected, was: $actual");
} else {
// String, bool, null.
Expect.equals(expected, actual, path);
}
}
for (var reviver in [null, (k, v) => v]) {
- var name = (reviver == null) ? "" : "reviver:";
- var value = JSON.decode(json, reviver: reviver);
- compare(expected, value, "$name$value");
- value = JSON.decode(" $json ", reviver: reviver);
- compare(expected, value, "$name-$value-");
- value = JSON.decode("[$json]", reviver: reviver);
- compare([expected], value, "$name[$value]");
- value = JSON.decode('{"x":$json}', reviver: reviver);
- compare({"x":expected}, value, "$name{x:$value}");
+ for (var split in [0, 1, 2, 3]) {
+ var name = (reviver == null) ? "" : "reviver:";
+ var sink = new ChunkedConversionSink.withCallback((values) {
+ var value = values[0];
+ compare(expected, value, "$name$value");
+ });
+ var decoderSink = JSON.decoder.startChunkedConversion(sink);
+ switch (split) {
+ case 0:
+ // Split after first char.
+ decoderSink.add(json.substring(0, 1));
+ decoderSink.add(json.substring(1));
+ decoderSink.close();
+ break;
+ case 1:
+ // Split before last char.
+ int length = json.length;
+ decoderSink.add(json.substring(0, length - 1));
+ decoderSink.add(json.substring(length - 1));
+ decoderSink.close();
+ break;
+ case 2:
+ // Split in middle.
+ int half = json.length ~/ 2;
+ decoderSink.add(json.substring(0, half));
+ decoderSink.add(json.substring(half));
+ decoderSink.close();
+ break;
+ case 3:
+ // Split in three chunks.
+ int length = json.length;
+ int third = length ~/ 3;
+ decoderSink.add(json.substring(0, third));
+ decoderSink.add(json.substring(third, 2 * third));
+ decoderSink.add(json.substring(2 * third));
+ decoderSink.close();
+ break;
+ }
+ }
}
}
@@ -81,9 +111,11 @@ testNumbers() {
for (var sign in signList) {
for (var fraction in fractionList) {
for (var exp in exponentList) {
- var literal = "$sign$integer$fraction$exp";
- var expectedValue = num.parse(literal);
- testJson(literal, expectedValue);
+ for (var ws in ["", " ", "\t"]) {
+ var literal = "$ws$sign$integer$fraction$exp$ws";
+ var expectedValue = num.parse(literal);
+ testJson(literal, expectedValue);
+ }
}
}
}

Powered by Google App Engine
This is Rietveld 408576698