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 }