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