annotate UnitTestsSources/TestMessageBroker.cpp @ 267:89d02de83c03 am-2

added declaretion of messages handled/emitted
author am@osimis.io
date Wed, 22 Aug 2018 14:59:20 +0200
parents c9cf95b49a86
children 5bd4161bf11b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
1 /**
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
2 * Stone of Orthanc
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
6 *
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
10 * the License, or (at your option) any later version.
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
11 *
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
15 * Affero General Public License for more details.
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
16 *
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
19 **/
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
20
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
21
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
22 #include "gtest/gtest.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
23
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
24 #include "../Framework/Messages/MessageBroker.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
25 #include "../Framework/Messages/IMessage.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
26 #include "../Framework/Messages/IObservable.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
27 #include "../Framework/Messages/IObserver.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
28 #include "../Framework/StoneEnumerations.h"
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
29
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
30
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
31 static int test1Counter = 0;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
32 static int test2Counter = 0;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
33 class MyFullObserver : public OrthancStone::IObserver
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
34 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
35
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
36 public:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
37 MyFullObserver(OrthancStone::MessageBroker& broker)
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
38 : OrthancStone::IObserver(broker)
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
39 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
40 DeclareHandledMessage(OrthancStone::MessageType_Test1);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
41 DeclareIgnoredMessage(OrthancStone::MessageType_Test2);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
42 }
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
43
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
44
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
45 void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
46 switch (message.GetType())
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
47 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
48 case OrthancStone::MessageType_Test1:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
49 test1Counter++;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
50 break;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
51 case OrthancStone::MessageType_Test2:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
52 test2Counter++;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
53 break;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
54 default:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
55 throw OrthancStone::MessageNotDeclaredException(message.GetType());
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
56 }
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
57 }
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
58
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
59 };
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
60
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
61 class MyPartialObserver : public OrthancStone::IObserver
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
62 {
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
63
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
64 public:
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
65 MyPartialObserver(OrthancStone::MessageBroker& broker)
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
66 : OrthancStone::IObserver(broker)
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
67 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
68 DeclareHandledMessage(OrthancStone::MessageType_Test1);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
69 // don't declare Test2 on purpose
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
70 }
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
71
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
72
266
c9cf95b49a86 removed OrthancSlicesLoader::ISliceLoaderObserver; now using standard messages instead
am@osimis.io
parents: 258
diff changeset
73 void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) {
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
74 switch (message.GetType())
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
75 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
76 case OrthancStone::MessageType_Test1:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
77 test1Counter++;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
78 break;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
79 case OrthancStone::MessageType_Test2:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
80 test2Counter++;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
81 break;
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
82 default:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
83 throw OrthancStone::MessageNotDeclaredException(message.GetType());
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
84 }
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
85 }
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
86
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
87 };
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
88
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
89
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
90 class MyObservable : public OrthancStone::IObservable
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
91 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
92
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
93 public:
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
94 MyObservable(OrthancStone::MessageBroker& broker)
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
95 : OrthancStone::IObservable(broker)
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
96 {
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
97 DeclareEmittableMessage(OrthancStone::MessageType_Test1);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
98 DeclareEmittableMessage(OrthancStone::MessageType_Test2);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
99 }
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
100
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
101 };
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
102
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
103
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
104 TEST(MessageBroker, NormalUsage)
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
105 {
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
106 OrthancStone::MessageBroker broker;
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
107 MyObservable observable(broker);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
108
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
109 test1Counter = 0;
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
110
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
111 // no observers have been registered -> nothing shall happen
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
112 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
113
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
114 ASSERT_EQ(0, test1Counter);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
115
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
116 // register an observer, check it is called
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
117 MyFullObserver fullObserver(broker);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
118 ASSERT_NO_THROW(observable.RegisterObserver(fullObserver));
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
119
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
120 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
121
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
122 ASSERT_EQ(1, test1Counter);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
123
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
124 // register an invalid observer, check it raises an exception
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
125 MyPartialObserver partialObserver(broker);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
126 ASSERT_THROW(observable.RegisterObserver(partialObserver), OrthancStone::MessageNotDeclaredException);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
127
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
128 // check an exception is thrown when the observable emits an undeclared message
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
129 ASSERT_THROW(observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_LayerSource_GeometryReady)), OrthancStone::MessageNotDeclaredException);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
130
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
131 // unregister the observer, make sure nothing happens afterwards
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
132 observable.UnregisterObserver(fullObserver);
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
133 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
134 ASSERT_EQ(1, test1Counter);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
135 }
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
136
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
137 TEST(MessageBroker, DeleteObserverWhileRegistered)
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
138 {
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
139 OrthancStone::MessageBroker broker;
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
140 MyObservable observable(broker);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
141
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
142 test1Counter = 0;
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
143
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
144 {
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
145 // register an observer, check it is called
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
146 MyFullObserver observer(broker);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
147 observable.RegisterObserver(observer);
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
148
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
149 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
150
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
151 ASSERT_EQ(1, test1Counter);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
152 }
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
153
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
154 // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !)
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
155 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
156
267
89d02de83c03 added declaretion of messages handled/emitted
am@osimis.io
parents: 266
diff changeset
157 ASSERT_EQ(1, test1Counter);
251
192e6e349e69 first usage of new message system (in SDL only)
am@osimis.io
parents:
diff changeset
158 }