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 }