Mercurial > hg > orthanc-stone
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 { |