1 /**
2  * Copyright: Copyright (c) 2015 Jacob Carlborg. All rights reserved.
3  * Authors: Jacob Carlborg
4  * Version: Initial created: Aug 28, 2015
5  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
6  */
7 module tests.Interface;
8 
9 import orange.serialization.Serializer;
10 import orange.serialization.archives.XmlArchive;
11 import orange.test.UnitTester;
12 import tests.Util;
13 
14 Serializer serializer;
15 XmlArchive!(char) archive;
16 
17 interface Interface
18 {
19     int b ();
20 }
21 
22 class Foo : Interface
23 {
24     int b_;
25     int b () { return b_; }
26 }
27 
28 class Bar
29 {
30     Interface inter;
31 }
32 
33 Bar bar;
34 
35 unittest
36 {
37     archive = new XmlArchive!(char);
38     serializer = new Serializer(archive);
39 
40     auto foo = new Foo;
41     foo.b_ = 3;
42 
43     bar = new Bar;
44     bar.inter = foo;
45 
46     describe("serialize object") in {
47         it("should return a serialized object") in {
48             auto expected = q"xml
49 <?xml version="1.0" encoding="UTF-8"?>
50 <archive version="1.0.0" type="org.dsource.orange.xml">
51     <data>
52         <object runtimeType="tests.Interface.Bar" type="tests.Interface.Bar" id="0" key="0">
53             <object runtimeType="tests.Interface.Foo" type="tests.Interface.Interface" id="1" key="inter">
54                 <int id="2" key="b_">3</int>
55             </object>
56         </object>
57     </data>
58 </archive>
59 xml";
60             Serializer.register!(Foo);
61             serializer.reset;
62             serializer.serialize(bar);
63 
64             assert(expected.equalToXml(archive.data));
65         };
66     };
67 
68     describe("deserialize object") in {
69         it("should return a deserialized object equal to the original object") in {
70             auto barDeserialized = serializer.deserialize!(Bar)(archive.untypedData);
71             assert(bar.inter.b == barDeserialized.inter.b);
72         };
73     };
74 }