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