1 /** 2 * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. 3 * Authors: Jacob Carlborg 4 * Version: Initial created: Aug 6, 2011 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module tests.AssociativeArrayReference; 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 K 18 { 19 int[int] a; 20 int[int] b; 21 } 22 23 K k; 24 25 unittest 26 { 27 archive = new XmlArchive!(char); 28 serializer = new Serializer(archive); 29 30 k = new K; 31 k.a = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; 32 k.b = k.a; 33 34 describe("serialize associative array references") in { 35 it("should return a serialized associative array and a serialized reference") in { 36 auto expected2066 = q"xml 37 <?xml version="1.0" encoding="UTF-8"?> 38 <archive version="1.0.0" type="org.dsource.orange.xml"> 39 <data> 40 <object runtimeType="tests.AssociativeArrayReference.K" type="tests.AssociativeArrayReference.K" key="0" id="0"> 41 <associativeArray keyType="int" length="4" valueType="int" key="a" id="1"> 42 <key key="0"> 43 <int key="0" id="2">1</int> 44 </key> 45 <value key="0"> 46 <int key="0" id="3">2</int> 47 </value> 48 <key key="1"> 49 <int key="1" id="4">3</int> 50 </key> 51 <value key="1"> 52 <int key="1" id="5">4</int> 53 </value> 54 <key key="2"> 55 <int key="2" id="6">6</int> 56 </key> 57 <value key="2"> 58 <int key="2" id="7">7</int> 59 </value> 60 <key key="3"> 61 <int key="3" id="8">39</int> 62 </key> 63 <value key="3"> 64 <int key="3" id="9">472</int> 65 </value> 66 </associativeArray> 67 <reference key="b">1</reference> 68 </object> 69 </data> 70 </archive> 71 xml"; 72 73 auto expected2067 = q"xml 74 <?xml version="1.0" encoding="UTF-8"?> 75 <archive version="1.0.0" type="org.dsource.orange.xml"> 76 <data> 77 <object runtimeType="tests.AssociativeArrayReference.K" type="tests.AssociativeArrayReference.K" id="0" key="0"> 78 <associativeArray valueType="int" length="4" id="1" keyType="int" key="a"> 79 <key key="0"> 80 <int id="2" key="0">6</int> 81 </key> 82 <value key="0"> 83 <int id="3" key="0">7</int> 84 </value> 85 <key key="1"> 86 <int id="4" key="1">3</int> 87 </key> 88 <value key="1"> 89 <int id="5" key="1">4</int> 90 </value> 91 <key key="2"> 92 <int id="6" key="2">1</int> 93 </key> 94 <value key="2"> 95 <int id="7" key="2">2</int> 96 </value> 97 <key key="3"> 98 <int id="8" key="3">39</int> 99 </key> 100 <value key="3"> 101 <int id="9" key="3">472</int> 102 </value> 103 </associativeArray> 104 <reference key="b">1</reference> 105 </object> 106 </data> 107 </archive> 108 xml"; 109 static if (__VERSION__ >= 2067) auto expected = expected2067; 110 else auto expected = expected2066; 111 112 serializer.reset(); 113 serializer.serialize(k); 114 115 assert(expected.equalToXml(archive.data)); 116 }; 117 }; 118 119 describe("deserialize associative array references") in { 120 it("should return two deserialized associative arrays pointing to the same data") in { 121 auto kDeserialized = serializer.deserialize!(K)(archive.untypedData); 122 123 assert(kDeserialized.a is kDeserialized.b); 124 }; 125 }; 126 }