Mercurial > hg > orthanc-stone
diff 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 |
line wrap: on
line diff
--- a/UnitTestsSources/TestMessageBroker.cpp Tue Aug 21 18:14:22 2018 +0200 +++ b/UnitTestsSources/TestMessageBroker.cpp Wed Aug 22 14:59:20 2018 +0200 @@ -28,21 +28,74 @@ #include "../Framework/StoneEnumerations.h" -static int globalCounter = 0; -class MyObserver : public OrthancStone::IObserver +static int test1Counter = 0; +static int test2Counter = 0; +class MyFullObserver : public OrthancStone::IObserver +{ + +public: + MyFullObserver(OrthancStone::MessageBroker& broker) + : OrthancStone::IObserver(broker) + { + DeclareHandledMessage(OrthancStone::MessageType_Test1); + DeclareIgnoredMessage(OrthancStone::MessageType_Test2); + } + + + void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { + switch (message.GetType()) + { + case OrthancStone::MessageType_Test1: + test1Counter++; + break; + case OrthancStone::MessageType_Test2: + test2Counter++; + break; + default: + throw OrthancStone::MessageNotDeclaredException(message.GetType()); + } + } + +}; + +class MyPartialObserver : public OrthancStone::IObserver { public: - MyObserver(OrthancStone::MessageBroker& broker) + MyPartialObserver(OrthancStone::MessageBroker& broker) : OrthancStone::IObserver(broker) - {} + { + DeclareHandledMessage(OrthancStone::MessageType_Test1); + // don't declare Test2 on purpose + } void HandleMessage(const OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { - if (message.GetType() == OrthancStone::MessageType_Generic) { - globalCounter++; + switch (message.GetType()) + { + case OrthancStone::MessageType_Test1: + test1Counter++; + break; + case OrthancStone::MessageType_Test2: + test2Counter++; + break; + default: + throw OrthancStone::MessageNotDeclaredException(message.GetType()); } + } +}; + + +class MyObservable : public OrthancStone::IObservable +{ + +public: + MyObservable(OrthancStone::MessageBroker& broker) + : OrthancStone::IObservable(broker) + { + DeclareEmittableMessage(OrthancStone::MessageType_Test1); + DeclareEmittableMessage(OrthancStone::MessageType_Test2); } }; @@ -51,59 +104,55 @@ TEST(MessageBroker, NormalUsage) { OrthancStone::MessageBroker broker; - OrthancStone::IObservable observable(broker); + MyObservable observable(broker); - globalCounter = 0; - - OrthancStone::IMessage genericMessage(OrthancStone::MessageType_Generic); + test1Counter = 0; // no observers have been registered -> nothing shall happen - observable.EmitMessage(genericMessage); + observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); - ASSERT_EQ(0, globalCounter); + ASSERT_EQ(0, test1Counter); // register an observer, check it is called - MyObserver observer(broker); - observable.RegisterObserver(observer); + MyFullObserver fullObserver(broker); + ASSERT_NO_THROW(observable.RegisterObserver(fullObserver)); - observable.EmitMessage(genericMessage); + observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); - ASSERT_EQ(1, globalCounter); + ASSERT_EQ(1, test1Counter); - // check the observer is not called when another message is issued - OrthancStone::IMessage wrongMessage(OrthancStone::MessageType_GeometryReady); - // no observers have been registered - observable.EmitMessage(wrongMessage); + // register an invalid observer, check it raises an exception + MyPartialObserver partialObserver(broker); + ASSERT_THROW(observable.RegisterObserver(partialObserver), OrthancStone::MessageNotDeclaredException); - ASSERT_EQ(1, globalCounter); + // check an exception is thrown when the observable emits an undeclared message + ASSERT_THROW(observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_LayerSource_GeometryReady)), OrthancStone::MessageNotDeclaredException); // unregister the observer, make sure nothing happens afterwards - observable.UnregisterObserver(observer); - observable.EmitMessage(genericMessage); - ASSERT_EQ(1, globalCounter); + observable.UnregisterObserver(fullObserver); + observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); + ASSERT_EQ(1, test1Counter); } TEST(MessageBroker, DeleteObserverWhileRegistered) { OrthancStone::MessageBroker broker; - OrthancStone::IObservable observable(broker); + MyObservable observable(broker); - globalCounter = 0; - - OrthancStone::IMessage genericMessage(OrthancStone::MessageType_Generic); + test1Counter = 0; { // register an observer, check it is called - MyObserver observer(broker); + MyFullObserver observer(broker); observable.RegisterObserver(observer); - observable.EmitMessage(genericMessage); + observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); - ASSERT_EQ(1, globalCounter); + ASSERT_EQ(1, test1Counter); } // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !) - observable.EmitMessage(genericMessage); + observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); - ASSERT_EQ(1, globalCounter); + ASSERT_EQ(1, test1Counter); }