1 /** 2 * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. 3 * Authors: Jacob Carlborg 4 * Version: Initial created: Aug 7, 2011 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module tests.Events; 8 9 import orange.serialization.Serializer; 10 import orange.serialization.Events; 11 import orange.serialization.archives.XmlArchive; 12 import orange.test.UnitTester; 13 import tests.Util; 14 15 Serializer serializer; 16 XmlArchive!(char) archive; 17 18 int b; 19 int c; 20 21 int udaB; 22 int udaC; 23 24 class Events 25 { 26 int a; 27 int d; 28 29 int udaA; 30 int udaD; 31 32 void serializing () 33 { 34 a = 3; 35 } 36 37 mixin OnSerializing!(serializing); 38 39 @onSerializing void udaSerializing () 40 { 41 udaA = 3; 42 } 43 44 void serialized () 45 { 46 b = 4; 47 } 48 49 mixin OnSerialized!(serialized); 50 51 @onSerialized void udaSerialized () 52 { 53 udaB = 4; 54 } 55 56 void deserializing () 57 { 58 c = 5; 59 } 60 61 mixin OnDeserializing!(deserializing); 62 63 @onDeserializing void udaDeserializing () 64 { 65 udaC = 5; 66 } 67 68 void deserialized () 69 { 70 d = 6; 71 } 72 73 mixin OnDeserialized!(deserialized); 74 75 @onDeserialized void udaDeserialized () 76 { 77 udaD = 6; 78 } 79 } 80 81 Events events; 82 83 unittest 84 { 85 archive = new XmlArchive!(char); 86 serializer = new Serializer(archive); 87 88 events = new Events; 89 90 describe("serialize a class with event handlers") in { 91 it("should return serialized class with the correct values set by the event handlers") in { 92 auto expected =q"xml 93 <?xml version="1.0" encoding="UTF-8"?> 94 <archive version="1.0.0" type="org.dsource.orange.xml"> 95 <data> 96 <object runtimeType="tests.Events.Events" type="tests.Events.Events" key="0" id="0"> 97 <int key="a" id="1">3</int> 98 <int key="d" id="2">0</int> 99 <int key="udaA" id="3">3</int> 100 <int key="udaD" id="4">0</int> 101 </object> 102 </data> 103 </archive> 104 xml"; 105 serializer.reset; 106 serializer.serialize(events); 107 108 assert(b == 4); 109 assert(udaB == 4); 110 assert(expected.equalToXml(archive.data)); 111 }; 112 }; 113 114 describe("deserialize class with a base class") in { 115 it("should return a deserialized string equal to the original string") in { 116 auto eventsDeserialized = serializer.deserialize!(Events)(archive.untypedData); 117 118 assert(eventsDeserialized.a == 3); 119 assert(eventsDeserialized.d == 6); 120 121 assert(eventsDeserialized.udaA == 3); 122 assert(eventsDeserialized.udaD == 6); 123 124 assert(c == 5); 125 assert(udaC == 5); 126 }; 127 }; 128 }