Mercurial > hg > orthanc-stone
comparison UnitTestsSources/TestMessageBroker.cpp @ 1066:b537002f83a9 broker
removing broker from deprecated classes
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 15 Oct 2019 15:39:39 +0200 |
parents | 5df50e0f0390 |
children | 05b2e71ed145 |
comparison
equal
deleted
inserted
replaced
1065:9d42f89b8c3c | 1066:b537002f83a9 |
---|---|
19 **/ | 19 **/ |
20 | 20 |
21 | 21 |
22 #include "gtest/gtest.h" | 22 #include "gtest/gtest.h" |
23 | 23 |
24 #include "Framework/Messages/MessageBroker.h" | |
25 #include "Framework/Messages/IObservable.h" | 24 #include "Framework/Messages/IObservable.h" |
26 #include "Framework/Messages/IObserver.h" | 25 #include "Framework/Messages/IObserver.h" |
27 #include "Framework/Messages/MessageForwarder.h" | 26 #include "Framework/Messages/MessageForwarder.h" |
28 | 27 |
29 | 28 |
45 MyCustomMessage(int payload) : | 44 MyCustomMessage(int payload) : |
46 payload_(payload) | 45 payload_(payload) |
47 { | 46 { |
48 } | 47 } |
49 }; | 48 }; |
50 | |
51 MyObservable(MessageBroker& broker) : | |
52 IObservable(broker) | |
53 { | |
54 } | |
55 }; | 49 }; |
56 | 50 |
57 class MyObserver : public IObserver | 51 class MyObserver : public IObserver |
58 { | 52 { |
59 public: | 53 public: |
60 MyObserver(MessageBroker& broker) | |
61 : IObserver(broker) | |
62 {} | |
63 | |
64 void HandleCompletedMessage(const MyObservable::MyCustomMessage& message) | 54 void HandleCompletedMessage(const MyObservable::MyCustomMessage& message) |
65 { | 55 { |
66 testCounter += message.payload_; | 56 testCounter += message.payload_; |
67 } | 57 } |
68 | 58 |
71 | 61 |
72 class MyIntermediate : public IObserver, public IObservable | 62 class MyIntermediate : public IObserver, public IObservable |
73 { | 63 { |
74 IObservable& observedObject_; | 64 IObservable& observedObject_; |
75 public: | 65 public: |
76 MyIntermediate(MessageBroker& broker, IObservable& observedObject) | 66 MyIntermediate(IObservable& observedObject) |
77 : IObserver(broker), | 67 : observedObject_(observedObject) |
78 IObservable(broker), | 68 { |
79 observedObject_(observedObject) | 69 observedObject_.RegisterObserverCallback(new MessageForwarder<MyObservable::MyCustomMessage>(*this)); |
80 { | |
81 observedObject_.RegisterObserverCallback(new MessageForwarder<MyObservable::MyCustomMessage>(broker, *this)); | |
82 } | 70 } |
83 }; | 71 }; |
84 } | 72 } |
85 | 73 |
86 | 74 |
87 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase) | 75 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase) |
88 { | 76 { |
89 MessageBroker broker; | 77 MyObservable observable; |
90 MyObservable observable(broker); | 78 MyObserver observer; |
91 MyObserver observer(broker); | |
92 | 79 |
93 // create a permanent connection between an observable and an observer | 80 // create a permanent connection between an observable and an observer |
94 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); | 81 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); |
95 | 82 |
96 testCounter = 0; | 83 testCounter = 0; |
109 ASSERT_EQ(0, testCounter); | 96 ASSERT_EQ(0, testCounter); |
110 } | 97 } |
111 | 98 |
112 TEST(MessageBroker, TestMessageForwarderSimpleUseCase) | 99 TEST(MessageBroker, TestMessageForwarderSimpleUseCase) |
113 { | 100 { |
114 MessageBroker broker; | 101 MyObservable observable; |
115 MyObservable observable(broker); | 102 MyIntermediate intermediate(observable); |
116 MyIntermediate intermediate(broker, observable); | 103 MyObserver observer; |
117 MyObserver observer(broker); | |
118 | 104 |
119 // let the observer observers the intermediate that is actually forwarding the messages from the observable | 105 // let the observer observers the intermediate that is actually forwarding the messages from the observable |
120 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); | 106 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); |
121 | 107 |
122 testCounter = 0; | 108 testCounter = 0; |
129 ASSERT_EQ(20, testCounter); | 115 ASSERT_EQ(20, testCounter); |
130 } | 116 } |
131 | 117 |
132 TEST(MessageBroker, TestPermanentConnectionDeleteObserver) | 118 TEST(MessageBroker, TestPermanentConnectionDeleteObserver) |
133 { | 119 { |
134 MessageBroker broker; | 120 MyObservable observable; |
135 MyObservable observable(broker); | 121 MyObserver* observer(new MyObserver); |
136 MyObserver* observer = new MyObserver(broker); | |
137 | 122 |
138 // create a permanent connection between an observable and an observer | 123 // create a permanent connection between an observable and an observer |
139 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(*observer, &MyObserver::HandleCompletedMessage)); | 124 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(*observer, &MyObserver::HandleCompletedMessage)); |
140 | 125 |
141 testCounter = 0; | 126 testCounter = 0; |
151 ASSERT_EQ(0, testCounter); | 136 ASSERT_EQ(0, testCounter); |
152 } | 137 } |
153 | 138 |
154 TEST(MessageBroker, TestMessageForwarderDeleteIntermediate) | 139 TEST(MessageBroker, TestMessageForwarderDeleteIntermediate) |
155 { | 140 { |
156 MessageBroker broker; | 141 MyObservable observable; |
157 MyObservable observable(broker); | 142 MyIntermediate* intermediate(new MyIntermediate(observable)); |
158 MyIntermediate* intermediate = new MyIntermediate(broker, observable); | 143 MyObserver observer; |
159 MyObserver observer(broker); | |
160 | 144 |
161 // let the observer observers the intermediate that is actually forwarding the messages from the observable | 145 // let the observer observers the intermediate that is actually forwarding the messages from the observable |
162 intermediate->RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); | 146 intermediate->RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); |
163 | 147 |
164 testCounter = 0; | 148 testCounter = 0; |
171 ASSERT_EQ(12, testCounter); | 155 ASSERT_EQ(12, testCounter); |
172 } | 156 } |
173 | 157 |
174 TEST(MessageBroker, TestCustomMessage) | 158 TEST(MessageBroker, TestCustomMessage) |
175 { | 159 { |
176 MessageBroker broker; | 160 MyObservable observable; |
177 MyObservable observable(broker); | 161 MyIntermediate intermediate(observable); |
178 MyIntermediate intermediate(broker, observable); | 162 MyObserver observer; |
179 MyObserver observer(broker); | |
180 | 163 |
181 // let the observer observers the intermediate that is actually forwarding the messages from the observable | 164 // let the observer observers the intermediate that is actually forwarding the messages from the observable |
182 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); | 165 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); |
183 | 166 |
184 testCounter = 0; | 167 testCounter = 0; |
194 | 177 |
195 #if 0 /* __cplusplus >= 201103L*/ | 178 #if 0 /* __cplusplus >= 201103L*/ |
196 | 179 |
197 TEST(MessageBroker, TestLambdaSimpleUseCase) | 180 TEST(MessageBroker, TestLambdaSimpleUseCase) |
198 { | 181 { |
199 MessageBroker broker; | 182 MyObservable observable; |
200 MyObservable observable(broker); | 183 MyObserver* observer(new MyObserver); |
201 MyObserver* observer = new MyObserver(broker); | |
202 | 184 |
203 // create a permanent connection between an observable and an observer | 185 // create a permanent connection between an observable and an observer |
204 observable.RegisterObserverCallback(new LambdaCallable<MyObservable::MyCustomMessage>(*observer, [&](const MyObservable::MyCustomMessage& message) {testCounter += 2 * message.payload_;})); | 186 observable.RegisterObserverCallback(new LambdaCallable<MyObservable::MyCustomMessage>(*observer, [&](const MyObservable::MyCustomMessage& message) {testCounter += 2 * message.payload_;})); |
205 | 187 |
206 testCounter = 0; | 188 testCounter = 0; |
220 class MyObserverWithLambda : public IObserver { | 202 class MyObserverWithLambda : public IObserver { |
221 private: | 203 private: |
222 int multiplier_; // this is a private variable we want to access in a lambda | 204 int multiplier_; // this is a private variable we want to access in a lambda |
223 | 205 |
224 public: | 206 public: |
225 MyObserverWithLambda(MessageBroker& broker, int multiplier, MyObservable& observable) | 207 MyObserverWithLambda(int multiplier, MyObservable& observable) |
226 : IObserver(broker), | 208 : multiplier_(multiplier) |
227 multiplier_(multiplier) | |
228 { | 209 { |
229 // register a callable to a lambda that access private members | 210 // register a callable to a lambda that access private members |
230 observable.RegisterObserverCallback(new LambdaCallable<MyObservable::MyCustomMessage>(*this, [this](const MyObservable::MyCustomMessage& message) { | 211 observable.RegisterObserverCallback(new LambdaCallable<MyObservable::MyCustomMessage>(*this, [this](const MyObservable::MyCustomMessage& message) { |
231 testCounter += multiplier_ * message.payload_; | 212 testCounter += multiplier_ * message.payload_; |
232 })); | 213 })); |
235 }; | 216 }; |
236 } | 217 } |
237 | 218 |
238 TEST(MessageBroker, TestLambdaCaptureThisAndAccessPrivateMembers) | 219 TEST(MessageBroker, TestLambdaCaptureThisAndAccessPrivateMembers) |
239 { | 220 { |
240 MessageBroker broker; | 221 MyObservable observable; |
241 MyObservable observable(broker); | 222 MyObserverWithLambda* observer = new MyObserverWithLambda(3, observable); |
242 MyObserverWithLambda* observer = new MyObserverWithLambda(broker, 3, observable); | |
243 | 223 |
244 testCounter = 0; | 224 testCounter = 0; |
245 observable.BroadcastMessage(MyObservable::MyCustomMessage(12)); | 225 observable.BroadcastMessage(MyObservable::MyCustomMessage(12)); |
246 ASSERT_EQ(36, testCounter); | 226 ASSERT_EQ(36, testCounter); |
247 | 227 |