Mercurial > hg > orthanc-stone
diff UnitTestsSources/TestMessageBroker2.cpp @ 302:4a79193ffb58 am-callable-and-promise
support for custom messages + no leaks in unit-tests
author | am@osimis.io |
---|---|
date | Tue, 18 Sep 2018 18:04:53 +0200 |
parents | b4abaeb783b1 |
children | dbfe2e9e5020 |
line wrap: on
line diff
--- a/UnitTestsSources/TestMessageBroker2.cpp Tue Sep 18 15:34:28 2018 +0200 +++ b/UnitTestsSources/TestMessageBroker2.cpp Tue Sep 18 18:04:53 2018 +0200 @@ -286,22 +286,22 @@ // } // }; + using namespace OrthancStone; -// enum CustomMessageType -// { -// CustomMessageType_First = MessageType_LastGenericStoneMessage + 1, + enum CustomMessageType + { + CustomMessageType_First = MessageType_CustomMessage + 1, -// CustomMessageType_Completed, -// CustomMessageType_Increment -// }; + CustomMessageType_Completed, + CustomMessageType_Increment + }; - using namespace OrthancStone; class MyObservable : public IObservable { public: - struct MyCustomMessage: public BaseMessage<MessageType_Test1> + struct MyCustomMessage: public BaseMessage<CustomMessageType_Completed> { int payload_; @@ -467,6 +467,46 @@ } +TEST(MessageBroker2, TestMessageForwarderDeleteIntermediate) +{ + MessageBroker broker; + MyObservable observable(broker); + MyIntermediate* intermediate = new MyIntermediate(broker, observable); + MyObserver observer(broker); + + // let the observer observers the intermediate that is actually forwarding the messages from the observable + intermediate->RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); + + testCounter = 0; + observable.EmitMessage(MyObservable::MyCustomMessage(12)); + ASSERT_EQ(12, testCounter); + + delete intermediate; + + observable.EmitMessage(MyObservable::MyCustomMessage(20)); + ASSERT_EQ(12, testCounter); +} + +TEST(MessageBroker2, TestCustomMessage) +{ + MessageBroker broker; + MyObservable observable(broker); + MyIntermediate intermediate(broker, observable); + MyObserver observer(broker); + + // let the observer observers the intermediate that is actually forwarding the messages from the observable + intermediate.RegisterObserverCallback(new Callable<MyObserver, MyObservable::MyCustomMessage>(observer, &MyObserver::HandleCompletedMessage)); + + testCounter = 0; + observable.EmitMessage(MyObservable::MyCustomMessage(12)); + ASSERT_EQ(12, testCounter); + + // the connection is permanent; if we emit the same message again, the observer will be notified again + testCounter = 0; + observable.EmitMessage(MyObservable::MyCustomMessage(20)); + ASSERT_EQ(20, testCounter); +} + TEST(MessageBroker2, TestPromiseSuccessFailure) {