# HG changeset patch # User Jacob Carlborg # Date 1313241783 -7200 # Node ID 9c9bbef6bf5e0553b7e8c2b3d8d10bf6906f0877 # Parent d6fbd0b3586e99200359f14b1238d130b52114e5 Implemented unarchiveBaseClass. Enabled the unit tests for deserialize subclasses. diff -r d6fbd0b3586e -r 9c9bbef6bf5e orange/serialization/Serializer.d --- 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); } diff -r d6fbd0b3586e -r 9c9bbef6bf5e orange/serialization/archives/Archive.d --- 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); diff -r d6fbd0b3586e -r 9c9bbef6bf5e orange/serialization/archives/XMLArchive.d --- 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 { diff -r d6fbd0b3586e -r 9c9bbef6bf5e tests/Subclass.d --- 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