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 }