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.String; 8 9 import dspec.Dsl; 10 11 import mambo.core._; 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 C 20 { 21 string str; 22 wstring wstr; 23 dstring dstr; 24 } 25 26 C c; 27 C u; 28 29 unittest 30 { 31 archive = new XmlArchive!(char); 32 serializer = new Serializer(archive); 33 34 c = new C; 35 c.str = "foo"; 36 c.wstr = "bar"; 37 c.dstr = "foobar"; 38 39 describe! "serialize strings" in { 40 it! "should return serialized strings" in { 41 serializer.reset; 42 serializer.serialize(c); 43 44 assert(archive.data().containsDefaultXmlContent()); 45 assert(archive.data().containsXmlTag("object", `runtimeType="spec.serialization.String.C" type="spec.serialization.String.C" key="0" id="0"`)); 46 47 assert(archive.data().containsXmlTag("string", `type="immutable(char)" length="3" key="str" id="1"`, "foo")); 48 assert(archive.data().containsXmlTag("string", `type="immutable(wchar)" length="3" key="wstr" id="2"`, "bar")); 49 assert(archive.data().containsXmlTag("string", `type="immutable(dchar)" length="6" key="dstr" id="3"`, "foobar")); 50 }; 51 }; 52 53 describe! "deserialize string" in { 54 it! "should return a deserialized string equal to the original string" in { 55 auto cDeserialized = serializer.deserialize!(C)(archive.untypedData); 56 57 assert(c.str == cDeserialized.str); 58 assert(c.wstr == cDeserialized.wstr); 59 assert(c.dstr == cDeserialized.dstr); 60 }; 61 }; 62 63 u = new C; 64 u.str = "foo åäö"; 65 u.wstr = "foo ÅÄÖ"; 66 u.dstr = "foo åäö ÅÄÖ"; 67 68 describe! "serialize Unicode strings" in { 69 it! "should return a serialized string containing proper Unicode" in { 70 serializer.reset; 71 serializer.serialize(u); 72 73 assert(archive.data().containsDefaultXmlContent()); 74 assert(archive.data().containsXmlTag("object", `runtimeType="spec.serialization.String.C" type="spec.serialization.String.C" key="0" id="0"`)); 75 76 assert(archive.data().containsXmlTag("string", `type="immutable(char)" length="10" key="str" id="1"`, "foo åäö")); 77 assert(archive.data().containsXmlTag("string", `type="immutable(wchar)" length="7" key="wstr" id="2"`, "foo ÅÄÖ")); 78 assert(archive.data().containsXmlTag("string", `type="immutable(dchar)" length="11" key="dstr" id="3"`, "foo åäö ÅÄÖ")); 79 }; 80 }; 81 82 describe! "deserialize Unicode string" in { 83 it! "should return a deserialize Unicode string equal to the original strings" in { 84 auto uDeserialized = serializer.deserialize!(C)(archive.untypedData); 85 86 assert(u.str == uDeserialized.str); 87 assert(u.wstr == uDeserialized.wstr); 88 assert(u.dstr == uDeserialized.dstr); 89 }; 90 }; 91 }