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 }