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 }