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

Unified Diff: pkg/serialization/test/serialization_test.dart

Issue 11820032: Make input/output formats pluggable, adapt to new libraries (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 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: pkg/serialization/test/serialization_test.dart
diff --git a/pkg/serialization/test/serialization_test.dart b/pkg/serialization/test/serialization_test.dart
index 206651bca61c89222eb29440daf1e192540710e7..bfc700101074286202c6846804373fb05aba42d1 100644
--- a/pkg/serialization/test/serialization_test.dart
+++ b/pkg/serialization/test/serialization_test.dart
@@ -4,6 +4,7 @@
library serialization_test;
+import 'dart:json' as json;
import 'package:unittest/unittest.dart';
import 'package:serialization/serialization.dart';
import 'package:serialization/src/serialization_helpers.dart';
@@ -236,6 +237,10 @@ main() {
runRoundTripTest(nodeSerializerUsingMaps);
});
+ test('round-trip, flat format, using maps', () {
+ runRoundTripTestFlat(nodeSerializerUsingMaps);
+ });
+
test('round-trip with Node CustomRule', () {
runRoundTripTestFlat(nodeSerializerCustom);
});
@@ -309,7 +314,7 @@ main() {
constructor: 'withData',
constructorFields: ["street", "Kirkland", "WA", "98103"],
fields: []);
- var out = s.write(a1);
+ String out = s.write(a1);
var newAddress = s.read(out);
expect(newAddress.street, a1.street);
expect(newAddress.city, "Kirkland");
@@ -317,6 +322,64 @@ main() {
expect(newAddress.zip, "98103");
});
+// test("Straight JSON format", () {
Jennifer Messerly 2013/01/11 02:21:53 what's the status of this test?
Alan Knight 2013/01/11 19:18:11 Oops. Restored.
+// var s = new Serialization();
+// var writer = s.newWriter(new SimpleJSONFormat());
+// var out = writer.write(a1);
+// var reconstituted = JSON.parse(out);
+// expect(reconstituted.length, 4);
+// expect(reconstituted[0], "Seattle");
+// });
+
+ test("Straight JSON format, nested objects", () {
+ var p1 = new Person()..name = 'Alice'..address = a1;
+ var s = new Serialization()
+ ..addRuleFor(a1).configureForMaps()
+ ..addRuleFor(p1).configureForMaps();
+ var writer = s.newWriter(new SimpleJSONFormat(true));
+ var out = writer.write(p1);
+ var reconstituted = json.parse(out);
Jennifer Messerly 2013/01/11 02:21:53 it would be interesting to see the full JSON map h
Alan Knight 2013/01/11 19:18:11 Nice. Done.
+ expect(reconstituted.length, 5);
+ expect(reconstituted["name"], "Alice");
+ var address = reconstituted["address"];
+ expect(address.length, 5);
+ expect(address["street"], "N 34th");
+ });
+
+ test("Straight JSON format, round-trip", () {
+ // Note that we can't use the usual round-trip test because it has cycles.
+ var p1 = new Person()..name = 'Alice'..address = a1;
+ // Use maps for one rule, lists for the other.
+ var s = new Serialization()
+ ..addRuleFor(a1)
+ ..addRuleFor(p1).configureForMaps();
+ var writer = s.newWriter(new SimpleJSONFormat(true));
+ var out = writer.write(p1);
+ var reader = s.newReader(new SimpleJSONFormat(true));
+ var p2 = reader.read(out);
+ expect(p2.name, "Alice");
+ var a2 = p2.address;
+ expect(a2.street, "N 34th");
+ expect(a2.city, "Seattle");
+ });
+
+ test("Straight JSON format, round-trip with named objects", () {
+ // Note that we can't use the usual round-trip test because it has cycles.
+ var p1 = new Person()..name = 'Alice'..address = a1;
+ // Use maps for one rule, lists for the other.
+ var s = new Serialization()
+ ..addRule(new NamedObjectRule())
+ ..addRuleFor(a1)
+ ..addRuleFor(p1).configureForMaps()
+ ..namedObjects["foo"] = a1;
+ var writer = s.newWriter(new SimpleJSONFormat(true));
+ var out = writer.write(p1);
+ var reader = s.newReader(new SimpleJSONFormat(true));
+ var p2 = reader.read(out, {"foo" : 12});
+ expect(p2.name, "Alice");
+ var a2 = p2.address;
+ expect(a2, 12);
+ });
}
/******************************************************************************
@@ -355,9 +418,9 @@ Serialization metaSerialization() {
* reader.
*/
readBackSimple(Serialization s, object, Reader reader) {
- var rule = s.rulesFor(object, null)[0];
+ var rule = s.rulesFor(object, null).first;
reader.inflateForRule(rule);
- var list2 = reader.allObjectsForRule(rule)[0];
+ var list2 = reader.allObjectsForRule(rule).first;
return list2;
}
@@ -470,11 +533,11 @@ runRoundTripTestFlat(serializerSetUp) {
n2.parent = n1;
n3.parent = n1;
var s = serializerSetUp(n1);
- var output = s.writeFlat(n2);
+ var output = s.write(n2, new SimpleFlatFormat());
expect(output is List, isTrue);
var s2 = serializerSetUp(n1);
- var reader = new Reader(s2);
- var m2 = reader.readFlat(output);
+ var reader = new Reader(s2, new SimpleFlatFormat());
+ var m2 = reader.read(output);
var m1 = m2.parent;
expect(m1 is Node, isTrue);
var children = m1.children;
@@ -495,7 +558,7 @@ states(object, Serialization s) {
/** A hard-coded rule for serializing Node instances. */
class NodeRule extends CustomRule {
- bool appliesTo(instance, _) => instance is Node;
+ bool appliesTo(instance, _) => instance.runtimeType == Node;
getState(instance) => [instance.parent, instance.name, instance.children];
create(state) => new Node(state[1]);
setState(Node node, state) {

Powered by Google App Engine
This is Rietveld 408576698