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 }