diff UnitTestsSources/GenericToolboxTests.cpp @ 1328:fd616c4a5904 broker

Added mechanism to prevent callbacks from being sent on dead WebAssemblyViewport objects
author Benjamin Golinvaux <bgo@osimis.io>
date Fri, 27 Mar 2020 12:54:27 +0100
parents 7ec8fea061b9
children 8d3e669f01a2
line wrap: on
line diff
--- a/UnitTestsSources/GenericToolboxTests.cpp	Wed Mar 25 14:34:27 2020 +0100
+++ b/UnitTestsSources/GenericToolboxTests.cpp	Fri Mar 27 12:54:27 2020 +0100
@@ -22,6 +22,7 @@
 
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/lexical_cast.hpp>
+#include <boost/enable_shared_from_this.hpp>
 
 #include "gtest/gtest.h"
 
@@ -4243,3 +4244,51 @@
   EXPECT_EQ(0, green);
   EXPECT_EQ(0, blue);
 }
+
+static int Test_GenericToolbox_HoldingRef_ctor_trace = 100;
+static int Test_GenericToolbox_HoldingRef_dtor_trace = 1000;
+
+class Test_GenericToolbox_HoldingRef : public boost::enable_shared_from_this<Test_GenericToolbox_HoldingRef>
+{
+public:
+  Test_GenericToolbox_HoldingRef() : answer_(42) { Test_GenericToolbox_HoldingRef_ctor_trace++; }
+  unsigned int answer_;
+
+  ~Test_GenericToolbox_HoldingRef()
+  {
+    Test_GenericToolbox_HoldingRef_dtor_trace--;
+  }
+};
+
+TEST(GenericToolbox, HoldingRef)
+{
+  using namespace OrthancStone::GenericToolbox;
+
+  void* userData = NULL;
+
+  {
+    boost::shared_ptr<Test_GenericToolbox_HoldingRef> test(new Test_GenericToolbox_HoldingRef() );
+    Test_GenericToolbox_HoldingRef* This = test.get();
+    userData = HoldingRef<Test_GenericToolbox_HoldingRef>::Wrap(This);
+    EXPECT_EQ(42u,This->answer_);
+    This->answer_ = 0xdeadbeef;
+    EXPECT_EQ(0xdeadbeef,This->answer_);
+  }
+  
+  EXPECT_EQ(101,Test_GenericToolbox_HoldingRef_ctor_trace);
+  EXPECT_EQ(1000,Test_GenericToolbox_HoldingRef_dtor_trace);
+  
+  {
+    boost::shared_ptr<Test_GenericToolbox_HoldingRef> test2 = HoldingRef<Test_GenericToolbox_HoldingRef>::Unwrap(userData);
+    EXPECT_EQ(0xdeadbeef,test2->answer_);
+  }
+  
+  EXPECT_EQ(1001,Test_GenericToolbox_HoldingRef_dtor_trace); // make sure wrapper was deleted once
+}
+
+
+
+
+
+
+