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 }