diff tests/Serializer.d @ 28:bffcbc8c392b experimental

Associative arrays are now treated as references.
author Jacob Carlborg <doob@me.com>
date Fri, 19 Nov 2010 11:55:04 +0100
parents fc315d786f24
children 9df3b7a46a51
line wrap: on
line diff
--- a/tests/Serializer.d	Fri Nov 19 11:14:55 2010 +0100
+++ b/tests/Serializer.d	Fri Nov 19 11:55:04 2010 +0100
@@ -246,7 +246,7 @@
 	k = new K;
 	k.a = [3 : 4, 1 : 2, 39 : 472, 6 : 7];
 	k.b = k.a;
-
+	
 	describe("Serializer") in {
 		describe("serialize object") in {
 			it("should return a serialized object") in {
@@ -330,7 +330,7 @@
 				
 				assert(archive.data().containsDefaultXmlContent());
 				assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.E" type="E" key="0" id="0"`));
-				assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="aa"`));
+				assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="aa" id="1"`));
 				
 				assert(archive.data().containsXmlTag("key", `key="0"`));
 				assert(archive.data().containsXmlTag("int", `key="0"`, "1"));
@@ -497,11 +497,44 @@
 			};
 		};
 		
-		describe("associative array references") in {
-			it("should return ") in {
+		describe("serialize associative array references") in {
+			it("should return a serialized associative array and a serialized reference") in {
 				serializer.reset();
 				serializer.serialize(k);
-				println(archive.data);
+				
+				assert(archive.data().containsDefaultXmlContent());
+				assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.K" type="K" key="0" id="0"`));
+				assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="a" id="1"`));
+				
+				assert(archive.data().containsXmlTag("key", `key="0"`));
+				assert(archive.data().containsXmlTag("int", `key="0"`, "1"));
+				assert(archive.data().containsXmlTag("value", `key="0"`));
+				assert(archive.data().containsXmlTag("int", `key="0"`, "2"));
+				
+				assert(archive.data().containsXmlTag("key", `key="1"`));
+				assert(archive.data().containsXmlTag("int", `key="1"`, "3"));
+				assert(archive.data().containsXmlTag("value", `key="1"`));
+				assert(archive.data().containsXmlTag("int", `key="1"`, "4"));
+				
+				assert(archive.data().containsXmlTag("key", `key="2"`));
+				assert(archive.data().containsXmlTag("int", `key="2"`, "6"));
+				assert(archive.data().containsXmlTag("value", `key="2"`));
+				assert(archive.data().containsXmlTag("int", `key="2"`, "7"));
+				
+				assert(archive.data().containsXmlTag("key", `key="3"`));
+				assert(archive.data().containsXmlTag("int", `key="3"`, "39"));
+				assert(archive.data().containsXmlTag("value", `key="3"`));
+				assert(archive.data().containsXmlTag("int", `key="3"`, "472"));
+
+				assert(archive.data().containsXmlTag("reference", `key="b"`, "1"));
+			};
+		};
+		
+		describe("deserialize associative array references") in {
+			it("should return two deserialized associative arrays pointing to the same data") in {
+				auto kDeserialized = serializer.deserialize!(K)(archive.data);
+				
+				assert(kDeserialized.a is kDeserialized.b);
 			};
 		};
 	};