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 spec.serialization.AssociativeArrayReference;
8 
9 import dspec.Dsl;
10 
11 import mambo.core..string;
12 import mambo.serialization.Serializer;
13 import mambo.serialization.archives.XmlArchive;
14 import spec.serialization.Util;
15 
16 Serializer serializer;
17 XmlArchive!(char) archive;
18 
19 class K
20 {
21 	int[int] a;
22 	int[int] b;
23 }
24 
25 K k;
26 
27 unittest
28 {
29 	archive = new XmlArchive!(char);
30 	serializer = new Serializer(archive);
31 
32 	k = new K;
33 	k.a = [3 : 4, 1 : 2, 39 : 472, 6 : 7];
34 	k.b = k.a;
35 
36 	describe! "serialize associative array references" in {
37 		it! "should return a serialized associative array and a serialized reference" in {
38 			serializer.reset();
39 			serializer.serialize(k);
40 	
41 			assert(archive.data().containsDefaultXmlContent());
42 			assert(archive.data().containsXmlTag("object", `runtimeType="spec.serialization.AssociativeArrayReference.K" type="spec.serialization.AssociativeArrayReference.K" key="0" id="0"`));
43 			assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="a" id="1"`));
44 	
45 			assert(archive.data().containsXmlTag("key", `key="0"`));
46 			assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "1"));
47 			assert(archive.data().containsXmlTag("value", `key="0"`));
48 			assert(archive.data().containsXmlTag("int", `key="0" id="3"`, "2"));
49 			
50 			assert(archive.data().containsXmlTag("key", `key="1"`));
51 			assert(archive.data().containsXmlTag("int", `key="1" id="4"`, "3"));
52 			assert(archive.data().containsXmlTag("value", `key="1"`));
53 			assert(archive.data().containsXmlTag("int", `key="1" id="5"`, "4"));
54 			
55 			assert(archive.data().containsXmlTag("key", `key="2"`));
56 			assert(archive.data().containsXmlTag("int", `key="2" id="6"`, "6"));
57 			assert(archive.data().containsXmlTag("value", `key="2"`));
58 			assert(archive.data().containsXmlTag("int", `key="2" id="7"`, "7"));
59 			
60 			assert(archive.data().containsXmlTag("key", `key="3"`));
61 			assert(archive.data().containsXmlTag("int", `key="3" id="8"`, "39"));
62 			assert(archive.data().containsXmlTag("value", `key="3"`));
63 			assert(archive.data().containsXmlTag("int", `key="3" id="9"`, "472"));
64 	
65 			assert(archive.data().containsXmlTag("reference", `key="b"`, "1"));
66 		};
67 	};
68 	
69 	describe! "deserialize associative array references" in {
70 		it! "should return two deserialized associative arrays pointing to the same data" in {
71 			auto kDeserialized = serializer.deserialize!(K)(archive.untypedData);
72 			
73 			assert(kDeserialized.a is kDeserialized.b);
74 		};
75 	};
76 }