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 }