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