changeset 47:9c9bbef6bf5e

Implemented unarchiveBaseClass. Enabled the unit tests for deserialize subclasses.
author Jacob Carlborg <doob@me.com>
date Sat, 13 Aug 2011 15:23:03 +0200
parents d6fbd0b3586e
children a7dea44fa9e3
files orange/serialization/Serializer.d orange/serialization/archives/Archive.d orange/serialization/archives/XMLArchive.d tests/Subclass.d
diffstat 4 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/orange/serialization/Serializer.d	Tue Aug 09 11:38:50 2011 +0200
+++ b/orange/serialization/Serializer.d	Sat Aug 13 15:23:03 2011 +0200
@@ -792,7 +792,7 @@
 		
 		static if (!is(Base == Object))
 		{
-			archive.unarchiveBaseClass!(Base)(nextKey);
+			archive.unarchiveBaseClass(nextKey);
 			Base base = value;
 			objectStructDeserializeHelper(base);
 		}
--- a/orange/serialization/archives/Archive.d	Tue Aug 09 11:38:50 2011 +0200
+++ b/orange/serialization/archives/Archive.d	Sat Aug 13 15:23:03 2011 +0200
@@ -138,7 +138,7 @@
 	ushort unarchiveEnumUshort (string key);
 	wchar unarchiveEnumWchar (string key);
 	
-	// Object unarchiveBaseClass (string key);
+	void unarchiveBaseClass (string key);
 	// void unarchiveNull (string key);
 	void unarchiveObject (string key, out Id id, out Object result, void delegate () dg);
 	Id unarchivePointer (string key, void delegate () dg);
--- a/orange/serialization/archives/XMLArchive.d	Tue Aug 09 11:38:50 2011 +0200
+++ b/orange/serialization/archives/XMLArchive.d	Sat Aug 13 15:23:03 2011 +0200
@@ -701,6 +701,14 @@
 		return fromData!(T)(element.value);
 	}
 	
+	void unarchiveBaseClass (string key)
+	{
+		auto element = getElement(Tags.baseTag, key);
+		
+		if (element.isValid)
+			lastElement = element;
+	}
+	
 	void unarchiveObject (string key, out Id id, out Object result, void delegate () dg)
 	{
 		restore(lastElement) in {
--- a/tests/Subclass.d	Tue Aug 09 11:38:50 2011 +0200
+++ b/tests/Subclass.d	Sat Aug 13 15:23:03 2011 +0200
@@ -49,12 +49,12 @@
 		};
 	};
 	
-	// describe("deserialize class with a base class") in {
-	// 	it("should return a deserialized string equal to the original string") in {
-	// 		auto subDeserialized = serializer.deserialize!(Sub)(archive.untypedData);
-	// 
-	// 		assert(sub.a == subDeserialized.a);
-	// 		assert(sub.b == subDeserialized.b);
-	// 	};
-	// };
+	describe("deserialize class with a base class") in {
+		it("should return a deserialized string equal to the original string") in {
+			auto subDeserialized = serializer.deserialize!(Sub)(archive.untypedData);
+	
+			assert(sub.a == subDeserialized.a);
+			assert(sub.b == subDeserialized.b);
+		};
+	};
 }
\ No newline at end of file