1 /** 2 * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. 3 * Authors: Jacob Carlborg 4 * Version: Initial created: Aug 7, 2011 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module spec.serialization.Subclass; 8 9 import dspec.Dsl; 10 11 import mambo.core..string; 12 import mambo.serialization.Serializer; 13 import mambo.serialization.archives.XmlArchive; 14 import spec.serialization.Util; 15 16 Serializer serializer; 17 XmlArchive!(char) archive; 18 19 class Base 20 { 21 int a; 22 } 23 24 class Sub : Base 25 { 26 int b; 27 } 28 29 Sub sub; 30 31 unittest 32 { 33 archive = new XmlArchive!(char); 34 serializer = new Serializer(archive); 35 36 sub = new Sub; 37 sub.a = 3; 38 sub.b = 4; 39 40 describe! "serialize a subclass" in { 41 it! "should return serialized subclass" in { 42 serializer.reset; 43 serializer.serialize(sub); 44 45 assert(archive.data().containsDefaultXmlContent()); 46 assert(archive.data().containsXmlTag("object", `runtimeType="spec.serialization.Subclass.Sub" type="spec.serialization.Subclass.Sub" key="0" id="0"`)); 47 assert(archive.data().containsXmlTag("int", `key="b" id="1"`, "4")); 48 assert(archive.data().containsXmlTag("base", `type="spec.serialization.Subclass.Base" key="1" id="2"`)); 49 assert(archive.data().containsXmlTag("int", `key="a" id="3"`, "3")); 50 }; 51 }; 52 53 describe! "deserialize class with a base class" in { 54 it! "should return a deserialized string equal to the original string" in { 55 auto subDeserialized = serializer.deserialize!(Sub)(archive.untypedData); 56 57 assert(sub.a == subDeserialized.a); 58 assert(sub.b == subDeserialized.b); 59 }; 60 }; 61 }