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 }