comparison UnitTestsSources/TestMessageBroker.cpp @ 267:89d02de83c03 am-2

added declaretion of messages handled/emitted
author am@osimis.io
date Wed, 22 Aug 2018 14:59:20 +0200
parents c9cf95b49a86
children 5bd4161bf11b
comparison
equal deleted inserted replaced
266:c9cf95b49a86 267:89d02de83c03
26 #include "../Framework/Messages/IObservable.h" 26 #include "../Framework/Messages/IObservable.h"
27 #include "../Framework/Messages/IObserver.h" 27 #include "../Framework/Messages/IObserver.h"
28 #include "../Framework/StoneEnumerations.h" 28 #include "../Framework/StoneEnumerations.h"
29 29
30 30
31 static int globalCounter = 0; 31 static int test1Counter = 0;
32 class MyObserver : public OrthancStone::IObserver 32 static int test2Counter = 0;
33 class MyFullObserver : public OrthancStone::IObserver
33 { 34 {
34 35
35 public: 36 public:
36 MyObserver(OrthancStone::MessageBroker& broker) 37 MyFullObserver(OrthancStone::MessageBroker& broker)
37 : OrthancStone::IObserver(broker) 38 : OrthancStone::IObserver(broker)
38 {} 39 {
40 DeclareHandledMessage(OrthancStone::MessageType_Test1);
41 DeclareIgnoredMessage(OrthancStone::MessageType_Test2);
42 }
39 43
40 44
41 void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { 45 void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) {
42 if (message.GetType() == OrthancStone::MessageType_Generic) { 46 switch (message.GetType())
43 globalCounter++; 47 {
48 case OrthancStone::MessageType_Test1:
49 test1Counter++;
50 break;
51 case OrthancStone::MessageType_Test2:
52 test2Counter++;
53 break;
54 default:
55 throw OrthancStone::MessageNotDeclaredException(message.GetType());
44 } 56 }
57 }
45 58
59 };
60
61 class MyPartialObserver : public OrthancStone::IObserver
62 {
63
64 public:
65 MyPartialObserver(OrthancStone::MessageBroker& broker)
66 : OrthancStone::IObserver(broker)
67 {
68 DeclareHandledMessage(OrthancStone::MessageType_Test1);
69 // don't declare Test2 on purpose
70 }
71
72
73 void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) {
74 switch (message.GetType())
75 {
76 case OrthancStone::MessageType_Test1:
77 test1Counter++;
78 break;
79 case OrthancStone::MessageType_Test2:
80 test2Counter++;
81 break;
82 default:
83 throw OrthancStone::MessageNotDeclaredException(message.GetType());
84 }
85 }
86
87 };
88
89
90 class MyObservable : public OrthancStone::IObservable
91 {
92
93 public:
94 MyObservable(OrthancStone::MessageBroker& broker)
95 : OrthancStone::IObservable(broker)
96 {
97 DeclareEmittableMessage(OrthancStone::MessageType_Test1);
98 DeclareEmittableMessage(OrthancStone::MessageType_Test2);
46 } 99 }
47 100
48 }; 101 };
49 102
50 103
51 TEST(MessageBroker, NormalUsage) 104 TEST(MessageBroker, NormalUsage)
52 { 105 {
53 OrthancStone::MessageBroker broker; 106 OrthancStone::MessageBroker broker;
54 OrthancStone::IObservable observable(broker); 107 MyObservable observable(broker);
55 108
56 globalCounter = 0; 109 test1Counter = 0;
57
58 OrthancStone::IMessage genericMessage(OrthancStone::MessageType_Generic);
59 110
60 // no observers have been registered -> nothing shall happen 111 // no observers have been registered -> nothing shall happen
61 observable.EmitMessage(genericMessage); 112 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
62 113
63 ASSERT_EQ(0, globalCounter); 114 ASSERT_EQ(0, test1Counter);
64 115
65 // register an observer, check it is called 116 // register an observer, check it is called
66 MyObserver observer(broker); 117 MyFullObserver fullObserver(broker);
67 observable.RegisterObserver(observer); 118 ASSERT_NO_THROW(observable.RegisterObserver(fullObserver));
68 119
69 observable.EmitMessage(genericMessage); 120 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
70 121
71 ASSERT_EQ(1, globalCounter); 122 ASSERT_EQ(1, test1Counter);
72 123
73 // check the observer is not called when another message is issued 124 // register an invalid observer, check it raises an exception
74 OrthancStone::IMessage wrongMessage(OrthancStone::MessageType_GeometryReady); 125 MyPartialObserver partialObserver(broker);
75 // no observers have been registered 126 ASSERT_THROW(observable.RegisterObserver(partialObserver), OrthancStone::MessageNotDeclaredException);
76 observable.EmitMessage(wrongMessage);
77 127
78 ASSERT_EQ(1, globalCounter); 128 // check an exception is thrown when the observable emits an undeclared message
129 ASSERT_THROW(observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_LayerSource_GeometryReady)), OrthancStone::MessageNotDeclaredException);
79 130
80 // unregister the observer, make sure nothing happens afterwards 131 // unregister the observer, make sure nothing happens afterwards
81 observable.UnregisterObserver(observer); 132 observable.UnregisterObserver(fullObserver);
82 observable.EmitMessage(genericMessage); 133 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
83 ASSERT_EQ(1, globalCounter); 134 ASSERT_EQ(1, test1Counter);
84 } 135 }
85 136
86 TEST(MessageBroker, DeleteObserverWhileRegistered) 137 TEST(MessageBroker, DeleteObserverWhileRegistered)
87 { 138 {
88 OrthancStone::MessageBroker broker; 139 OrthancStone::MessageBroker broker;
89 OrthancStone::IObservable observable(broker); 140 MyObservable observable(broker);
90 141
91 globalCounter = 0; 142 test1Counter = 0;
92
93 OrthancStone::IMessage genericMessage(OrthancStone::MessageType_Generic);
94 143
95 { 144 {
96 // register an observer, check it is called 145 // register an observer, check it is called
97 MyObserver observer(broker); 146 MyFullObserver observer(broker);
98 observable.RegisterObserver(observer); 147 observable.RegisterObserver(observer);
99 148
100 observable.EmitMessage(genericMessage); 149 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
101 150
102 ASSERT_EQ(1, globalCounter); 151 ASSERT_EQ(1, test1Counter);
103 } 152 }
104 153
105 // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !) 154 // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !)
106 observable.EmitMessage(genericMessage); 155 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1));
107 156
108 ASSERT_EQ(1, globalCounter); 157 ASSERT_EQ(1, test1Counter);
109 } 158 }