comparison UnitTestsSources/TestMessageBroker.cpp @ 1057:5df50e0f0390

removing unused class IPromise
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 11 Oct 2019 13:37:21 +0200
parents f0008c55e5f7
children b537002f83a9 287ec78f63b4
comparison
equal deleted inserted replaced
1055:af456106576c 1057:5df50e0f0390
20 20
21 21
22 #include "gtest/gtest.h" 22 #include "gtest/gtest.h"
23 23
24 #include "Framework/Messages/MessageBroker.h" 24 #include "Framework/Messages/MessageBroker.h"
25 #include "Framework/Messages/Promise.h"
26 #include "Framework/Messages/IObservable.h" 25 #include "Framework/Messages/IObservable.h"
27 #include "Framework/Messages/IObserver.h" 26 #include "Framework/Messages/IObserver.h"
28 #include "Framework/Messages/MessageForwarder.h" 27 #include "Framework/Messages/MessageForwarder.h"
29 28
30 29
80 observedObject_(observedObject) 79 observedObject_(observedObject)
81 { 80 {
82 observedObject_.RegisterObserverCallback(new MessageForwarder<MyObservable::MyCustomMessage>(broker, *this)); 81 observedObject_.RegisterObserverCallback(new MessageForwarder<MyObservable::MyCustomMessage>(broker, *this));
83 } 82 }
84 }; 83 };
85
86
87 class MyPromiseSource : public IObservable
88 {
89 Promise* currentPromise_;
90
91 public:
92 struct MyPromiseMessage: public IMessage
93 {
94 ORTHANC_STONE_MESSAGE(__FILE__, __LINE__);
95
96 int increment;
97
98 MyPromiseMessage(int increment) :
99 increment(increment)
100 {
101 }
102 };
103
104 MyPromiseSource(MessageBroker& broker)
105 : IObservable(broker),
106 currentPromise_(NULL)
107 {}
108
109 Promise& StartSomethingAsync()
110 {
111 currentPromise_ = new Promise(GetBroker());
112 return *currentPromise_;
113 }
114
115 void CompleteSomethingAsyncWithSuccess(int payload)
116 {
117 currentPromise_->Success(MyPromiseMessage(payload));
118 delete currentPromise_;
119 }
120
121 void CompleteSomethingAsyncWithFailure(int payload)
122 {
123 currentPromise_->Failure(MyPromiseMessage(payload));
124 delete currentPromise_;
125 }
126 };
127
128
129 class MyPromiseTarget : public IObserver
130 {
131 public:
132 MyPromiseTarget(MessageBroker& broker)
133 : IObserver(broker)
134 {}
135
136 void IncrementCounter(const MyPromiseSource::MyPromiseMessage& args)
137 {
138 testCounter += args.increment;
139 }
140
141 void DecrementCounter(const MyPromiseSource::MyPromiseMessage& args)
142 {
143 testCounter -= args.increment;
144 }
145 };
146 } 84 }
147 85
148 86
149 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase) 87 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase)
150 { 88 {
251 testCounter = 0; 189 testCounter = 0;
252 observable.BroadcastMessage(MyObservable::MyCustomMessage(20)); 190 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
253 ASSERT_EQ(20, testCounter); 191 ASSERT_EQ(20, testCounter);
254 } 192 }
255 193
256
257 TEST(MessageBroker, TestPromiseSuccessFailure)
258 {
259 MessageBroker broker;
260 MyPromiseSource source(broker);
261 MyPromiseTarget target(broker);
262
263 // test a successful promise
264 source.StartSomethingAsync()
265 .Then(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(target, &MyPromiseTarget::IncrementCounter))
266 .Else(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(target, &MyPromiseTarget::DecrementCounter));
267
268 testCounter = 0;
269 source.CompleteSomethingAsyncWithSuccess(10);
270 ASSERT_EQ(10, testCounter);
271
272 // test a failing promise
273 source.StartSomethingAsync()
274 .Then(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(target, &MyPromiseTarget::IncrementCounter))
275 .Else(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(target, &MyPromiseTarget::DecrementCounter));
276
277 testCounter = 0;
278 source.CompleteSomethingAsyncWithFailure(15);
279 ASSERT_EQ(-15, testCounter);
280 }
281
282 TEST(MessageBroker, TestPromiseDeleteTarget)
283 {
284 MessageBroker broker;
285 MyPromiseSource source(broker);
286 MyPromiseTarget* target = new MyPromiseTarget(broker);
287
288 // create the promise
289 source.StartSomethingAsync()
290 .Then(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(*target, &MyPromiseTarget::IncrementCounter))
291 .Else(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(*target, &MyPromiseTarget::DecrementCounter));
292
293 // delete the promise target
294 delete target;
295
296 // trigger the promise, make sure it does not throw and does not call the callback
297 testCounter = 0;
298 source.CompleteSomethingAsyncWithSuccess(10);
299 ASSERT_EQ(0, testCounter);
300
301 // test a failing promise
302 source.StartSomethingAsync()
303 .Then(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(*target, &MyPromiseTarget::IncrementCounter))
304 .Else(new Callable<MyPromiseTarget, MyPromiseSource::MyPromiseMessage>(*target, &MyPromiseTarget::DecrementCounter));
305
306 testCounter = 0;
307 source.CompleteSomethingAsyncWithFailure(15);
308 ASSERT_EQ(0, testCounter);
309 }
310 194
311 #if 0 /* __cplusplus >= 201103L*/ 195 #if 0 /* __cplusplus >= 201103L*/
312 196
313 TEST(MessageBroker, TestLambdaSimpleUseCase) 197 TEST(MessageBroker, TestLambdaSimpleUseCase)
314 { 198 {