1 /**
2  * Copyright: Copyright (c) 2013 Jacob Carlborg. All rights reserved.
3  * Authors: Juan Manuel
4  * Version: Initial created: Apr 14, 2013
5  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
6  */
7 module tests.ArrayOfObject;
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 class A
18 {
19     int a;
20 
21     this (int value)
22     {
23         this.a = value;
24     }
25 }
26 
27 class D
28 {
29     Object[] arr;
30 }
31 
32 D d;
33 
34 unittest
35 {
36     archive = new XmlArchive!(char);
37     serializer = new Serializer(archive);
38 
39     d = new D;
40     d.arr = [cast(Object) new A(1), cast(Object) new A(2)].dup;
41 
42 
43     describe("serialize array") in {
44         it("shouldn't fail to compile while serializing an Object[] array") in {
45             auto expected = q"xml
46 <?xml version="1.0" encoding="UTF-8"?>
47 <archive version="1.0.0" type="org.dsource.orange.xml">
48     <data>
49         <object runtimeType="tests.ArrayOfObject.D" type="tests.ArrayOfObject.D" key="0" id="0">
50             <array type="object.Object" length="2" key="arr" id="1">
51                 <object runtimeType="tests.ArrayOfObject.A" type="const(object.Object)" key="0" id="2">
52                     <int key="a" id="3">1</int>
53                 </object>
54                 <object runtimeType="tests.ArrayOfObject.A" type="const(object.Object)" key="1" id="4">
55                     <int key="a" id="5">2</int>
56                 </object>
57             </array>
58         </object>
59     </data>
60 </archive>
61 xml";
62             serializer.reset;
63             Serializer.register!(A);
64             serializer.serialize(d);
65 
66             assert(expected.equalToXml(archive.data));
67         };
68     };
69 
70     describe("deserialize array") in {
71         it("should return a deserialized Object[] array equal to the original array") in {
72             auto dDeserialized = serializer.deserialize!(D)(archive.untypedData);
73 
74             assert(d.arr.length == dDeserialized.arr.length);
75             assert((cast(A) d.arr[0]).a == (cast(A) dDeserialized.arr[0]).a);
76             assert((cast(A) d.arr[1]).a == (cast(A) dDeserialized.arr[1]).a);
77 
78             Serializer.resetRegisteredTypes();
79         };
80     };
81 }