1 /**
2  * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved.
3  * Authors: Jacob Carlborg
4  * Version: Initial created: Aug 20, 2011
5  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
6  */
7 module spec.serialization.NonSerialized;
8 
9 import dspec.Dsl;
10 
11 import mambo.core._;
12 import mambo.serialization.Serializer;
13 import mambo.serialization.Serializable;
14 import mambo.serialization.archives.XmlArchive;
15 import spec.serialization.Util;
16 
17 Serializer serializer;
18 XmlArchive!(char) archive;
19 
20 class Bar
21 {
22 	mixin NonSerialized;
23 	
24 	int c;
25 }
26 
27 @nonSerialized class Baz
28 {
29 	int c;
30 }
31 
32 class Foo
33 {
34 	int a;
35 	int b;
36 	@nonSerialized int c;
37 	Bar bar;
38 	Baz baz;
39 	
40 	mixin NonSerialized!(a);
41 }
42 
43 Foo foo;
44 
45 unittest
46 {
47 	archive = new XmlArchive!(char);
48 	serializer = new Serializer(archive);
49 	
50 	foo = new Foo;
51 	foo.a = 3;
52 	foo.b = 4;
53 	foo.c = 5;
54 
55 	foo.bar = new Bar;
56 	foo.baz = new Baz;
57 
58 	describe! "serialize object with a non-serialized field" in {
59 		it! "should return serialized object with only one serialized field" in {
60 			serializer.serialize(foo);
61 
62 			assert(archive.data().containsDefaultXmlContent());
63 			assert(archive.data().containsXmlTag("object", `runtimeType="spec.serialization.NonSerialized.Foo" type="spec.serialization.NonSerialized.Foo" key="0" id="0"`));
64 			assert(archive.data().containsXmlTag("int", `key="b" id="1"`, "4"));
65 
66 			assert(!archive.data().containsXmlTag("int", `key="a" id="1"`, "3"));
67 			assert(!archive.data().containsXmlTag("int", `key="c" id="3"`, "5"));
68 
69 			assert(!archive.data().containsXmlTag("object", `runtimeType="spec.serialization.NonSerialized.Bar" type="Bar" key="bar" id="4"`));
70 			assert(!archive.data().containsXmlTag("int", `key="c" id="5"`, "0"));
71 
72 			assert(!archive.data().containsXmlTag("object", `runtimeType="spec.serialization.NonSerialized.Baz" type="Baz" key="bar" id="6"`));
73 			assert(!archive.data().containsXmlTag("int", `key="c" id="7"`, "0"));
74 		};
75 	};
76 	
77 	describe! "deserialize object with a non-serialized field" in {
78 		it! "short return deserialized object equal to the original object, where only one field is deserialized" in {
79 			auto f = serializer.deserialize!(Foo)(archive.untypedData);
80 
81 			assert(f.a == foo.a.init);
82 			assert(f.b == foo.b);
83 			assert(f.c == foo.c.init);
84 			assert(f.bar is foo.bar.init);
85 			assert(f.baz is foo.baz.init);
86 		};
87 	};
88 }