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