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)
 {