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