comparison UnitTestsSources/TestMessageBroker.cpp @ 1067:05b2e71ed145 broker

removed MessageForwarder, unit tests are ok
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 15 Oct 2019 18:11:40 +0200
parents b537002f83a9
children 008dbc4ceb62
comparison
equal deleted inserted replaced
1066:b537002f83a9 1067:05b2e71ed145
20 20
21 21
22 #include "gtest/gtest.h" 22 #include "gtest/gtest.h"
23 23
24 #include "Framework/Messages/IObservable.h" 24 #include "Framework/Messages/IObservable.h"
25 #include "Framework/Messages/IObserver.h" 25 #include "Framework/Messages/ObserverBase.h"
26 #include "Framework/Messages/MessageForwarder.h"
27 26
28 27
29 int testCounter = 0; 28 int testCounter = 0;
30 namespace { 29 namespace {
31 30
46 { 45 {
47 } 46 }
48 }; 47 };
49 }; 48 };
50 49
51 class MyObserver : public IObserver 50 class MyObserver : public ObserverBase<MyObserver>
52 { 51 {
53 public: 52 public:
54 void HandleCompletedMessage(const MyObservable::MyCustomMessage& message) 53 void HandleCompletedMessage(const MyObservable::MyCustomMessage& message)
55 { 54 {
56 testCounter += message.payload_; 55 testCounter += message.payload_;
57 }
58
59 };
60
61
62 class MyIntermediate : public IObserver, public IObservable
63 {
64 IObservable& observedObject_;
65 public:
66 MyIntermediate(IObservable& observedObject)
67 : observedObject_(observedObject)
68 {
69 observedObject_.RegisterObserverCallback(new MessageForwarder<MyObservable::MyCustomMessage>(*this));
70 } 56 }
71 }; 57 };
72 } 58 }
73 59
74 60
75 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase) 61 TEST(MessageBroker, TestPermanentConnectionSimpleUseCase)
76 { 62 {
77 MyObservable observable; 63 MyObservable observable;
78 MyObserver observer; 64 boost::shared_ptr<MyObserver> observer(new MyObserver);
79 65
80 // create a permanent connection between an observable and an observer 66 // create a permanent connection between an observable and an observer
81 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); 67 observer->Register<MyObservable::MyCustomMessage>(observable, &MyObserver::HandleCompletedMessage);
82 68
83 testCounter = 0; 69 testCounter = 0;
84 observable.BroadcastMessage(MyObservable::MyCustomMessage(12)); 70 observable.BroadcastMessage(MyObservable::MyCustomMessage(12));
85 ASSERT_EQ(12, testCounter); 71 ASSERT_EQ(12, testCounter);
86 72
88 testCounter = 0; 74 testCounter = 0;
89 observable.BroadcastMessage(MyObservable::MyCustomMessage(20)); 75 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
90 ASSERT_EQ(20, testCounter); 76 ASSERT_EQ(20, testCounter);
91 77
92 // Unregister the observer; make sure it's not called anymore 78 // Unregister the observer; make sure it's not called anymore
93 observable.Unregister(&observer); 79 observer.reset();
94 testCounter = 0; 80 testCounter = 0;
95 observable.BroadcastMessage(MyObservable::MyCustomMessage(20)); 81 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
96 ASSERT_EQ(0, testCounter); 82 ASSERT_EQ(0, testCounter);
97 } 83 }
98 84
99 TEST(MessageBroker, TestMessageForwarderSimpleUseCase)
100 {
101 MyObservable observable;
102 MyIntermediate intermediate(observable);
103 MyObserver observer;
104
105 // let the observer observers the intermediate that is actually forwarding the messages from the observable
106 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage));
107
108 testCounter = 0;
109 observable.BroadcastMessage(MyObservable::MyCustomMessage(12));
110 ASSERT_EQ(12, testCounter);
111
112 // the connection is permanent; if we emit the same message again, the observer will be notified again
113 testCounter = 0;
114 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
115 ASSERT_EQ(20, testCounter);
116 }
117
118 TEST(MessageBroker, TestPermanentConnectionDeleteObserver) 85 TEST(MessageBroker, TestPermanentConnectionDeleteObserver)
119 { 86 {
120 MyObservable observable; 87 MyObservable observable;
121 MyObserver* observer(new MyObserver); 88 boost::shared_ptr<MyObserver> observer(new MyObserver);
122 89
123 // create a permanent connection between an observable and an observer 90 // create a permanent connection between an observable and an observer
124 observable.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(*observer, &MyObserver::HandleCompletedMessage)); 91 observer->Register<MyObservable::MyCustomMessage>(observable, &MyObserver::HandleCompletedMessage);
125 92
126 testCounter = 0; 93 testCounter = 0;
127 observable.BroadcastMessage(MyObservable::MyCustomMessage(12)); 94 observable.BroadcastMessage(MyObservable::MyCustomMessage(12));
128 ASSERT_EQ(12, testCounter); 95 ASSERT_EQ(12, testCounter);
129 96
130 // delete the observer and check that the callback is not called anymore 97 // delete the observer and check that the callback is not called anymore
131 delete observer; 98 observer.reset();
132 99
133 // the connection is permanent; if we emit the same message again, the observer will be notified again 100 // the connection is permanent; if we emit the same message again, the observer will be notified again
134 testCounter = 0; 101 testCounter = 0;
135 observable.BroadcastMessage(MyObservable::MyCustomMessage(20)); 102 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
136 ASSERT_EQ(0, testCounter); 103 ASSERT_EQ(0, testCounter);
137 } 104 }
138 105
139 TEST(MessageBroker, TestMessageForwarderDeleteIntermediate)
140 {
141 MyObservable observable;
142 MyIntermediate* intermediate(new MyIntermediate(observable));
143 MyObserver observer;
144
145 // let the observer observers the intermediate that is actually forwarding the messages from the observable
146 intermediate->RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage));
147
148 testCounter = 0;
149 observable.BroadcastMessage(MyObservable::MyCustomMessage(12));
150 ASSERT_EQ(12, testCounter);
151
152 delete intermediate;
153
154 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
155 ASSERT_EQ(12, testCounter);
156 }
157
158 TEST(MessageBroker, TestCustomMessage)
159 {
160 MyObservable observable;
161 MyIntermediate intermediate(observable);
162 MyObserver observer;
163
164 // let the observer observers the intermediate that is actually forwarding the messages from the observable
165 intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage));
166
167 testCounter = 0;
168 observable.BroadcastMessage(MyObservable::MyCustomMessage(12));
169 ASSERT_EQ(12, testCounter);
170
171 // the connection is permanent; if we emit the same message again, the observer will be notified again
172 testCounter = 0;
173 observable.BroadcastMessage(MyObservable::MyCustomMessage(20));
174 ASSERT_EQ(20, testCounter);
175 }
176 106
177 107
178 #if 0 /* __cplusplus >= 201103L*/ 108 #if 0 /* __cplusplus >= 201103L*/
179 109
180 TEST(MessageBroker, TestLambdaSimpleUseCase) 110 TEST(MessageBroker, TestLambdaSimpleUseCase)