diff --git a/Modules/Core/test/mitkWeakPointerTest.cpp b/Modules/Core/test/mitkWeakPointerTest.cpp index 2d033c535a..276208a074 100644 --- a/Modules/Core/test/mitkWeakPointerTest.cpp +++ b/Modules/Core/test/mitkWeakPointerTest.cpp @@ -1,60 +1,132 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ +// Testing +#include "mitkTestFixture.h" #include "mitkTestingMacros.h" -#include +// std includes +#include + +// MITK includes #include -int mitkWeakPointerTest(int /*argc*/, char * /*argv*/ []) +// ITK includes +#include + +class mitkWeakPointerTestSuite : public mitk::TestFixture { - MITK_TEST_BEGIN("WeakPointer") - - int deleteEventCallbackCalled = 0; - - mitk::WeakPointer weakPointer; - - weakPointer.SetDeleteEventCallback([&deleteEventCallbackCalled]() - { - ++deleteEventCallbackCalled; - }); - - mitk::WeakPointer weakPointer2; - - // Testing constructors and reference counting - itk::Object::Pointer smartPointer = itk::Object::New(); - mitk::WeakPointer weakPointer3(smartPointer); - mitk::WeakPointer weakPointer4(weakPointer); - { - itk::Object::Pointer tmpSmartPointer(weakPointer.Lock()); - itk::Object::Pointer tmpSmartPointer2(weakPointer2.Lock()); - MITK_TEST_CONDITION_REQUIRED(tmpSmartPointer.GetPointer() == tmpSmartPointer2.GetPointer(), - "Testing equal pointers"); - } - - weakPointer = smartPointer; - weakPointer2 = weakPointer; - - MITK_TEST_CONDITION_REQUIRED(1 == smartPointer->GetReferenceCount(), "Testing reference count"); - smartPointer = nullptr; - MITK_TEST_CONDITION_REQUIRED(weakPointer.IsExpired(), "Testing expired weak pointer (smart pointer assignment)"); - MITK_TEST_CONDITION_REQUIRED(weakPointer2.IsExpired(), "Testing expired weak pointer (weak pointer assignment)"); - MITK_TEST_CONDITION_REQUIRED(weakPointer3.IsExpired(), "Testing expired weak pointer (smart pointer constructor)"); - MITK_TEST_CONDITION_REQUIRED(weakPointer4.IsExpired(), "Testing expired weak pointer (copy constructor)"); - MITK_TEST_CONDITION_REQUIRED(1 == deleteEventCallbackCalled, "Testing call of delete event callback"); - - MITK_TEST_END() -} + CPPUNIT_TEST_SUITE(mitkWeakPointerTestSuite); + + MITK_TEST(EqualPointers_Success); + MITK_TEST(ExpiredWeakPointerWithSmartPointerAssignment_Success); + MITK_TEST(ExpiredWeakPointerWithWeakPointerAssignment_Success); + MITK_TEST(ExpiredWeakPointerWithSmartPointerConstructor_Success); + MITK_TEST(ExpiredWeakPointerWithWeakPointerConstructor_Success); + MITK_TEST(DeleteEventCall_Success); + + CPPUNIT_TEST_SUITE_END(); + + +private: + mitk::WeakPointer m_WeakPointer; + mitk::WeakPointer m_WeakPointer2; + itk::Object::Pointer m_SmartPointer; + +public: + void setUp() + { + m_SmartPointer = itk::Object::New(); + m_WeakPointer = m_SmartPointer; + m_WeakPointer2 = m_WeakPointer; + } + + void tearDown() + { + m_SmartPointer = nullptr; + m_WeakPointer = nullptr; + m_WeakPointer2 = nullptr; + } + + void EqualPointers_Success() + { + int deleteEventCallbackCalled = deleteEventCallbackCalled = 0; + m_WeakPointer.SetDeleteEventCallback([&deleteEventCallbackCalled]() + { + ++deleteEventCallbackCalled; + }); + itk::Object::Pointer tmpSmartPointer(m_WeakPointer.Lock()); + itk::Object::Pointer tmpSmartPointer2(m_WeakPointer2.Lock()); + CPPUNIT_ASSERT_MESSAGE("Testing equal pointers", tmpSmartPointer.GetPointer() == tmpSmartPointer2.GetPointer()); + } + + void ReferenceCountOfPointers_Success() + { + CPPUNIT_ASSERT_MESSAGE("Testing reference count", 1 == m_SmartPointer->GetReferenceCount()); + } + + void ExpiredWeakPointerWithSmartPointerAssignment_Success() + { + m_SmartPointer = nullptr; + CPPUNIT_ASSERT_MESSAGE("Testing expired weak pointer (smart pointer assignment)", m_WeakPointer.IsExpired()); + } + + void ExpiredWeakPointerWithWeakPointerAssignment_Success() + { + m_SmartPointer = nullptr; + CPPUNIT_ASSERT_MESSAGE("Testing expired weak pointer (weak pointer assignment)", m_WeakPointer2.IsExpired()); + } + + + void ExpiredWeakPointerWithSmartPointerConstructor_Success() + { + int deleteEventCallbackCalled = 0; + mitk::WeakPointer weakPointer3(m_SmartPointer); + m_WeakPointer.SetDeleteEventCallback([&deleteEventCallbackCalled]() + { + ++deleteEventCallbackCalled; + }); + m_SmartPointer = nullptr; + CPPUNIT_ASSERT_MESSAGE("Testing expired weak pointer (smart pointer constructor)", weakPointer3.IsExpired()); + } + + void ExpiredWeakPointerWithWeakPointerConstructor_Success() + { + int deleteEventCallbackCalled = 0; + m_WeakPointer.SetDeleteEventCallback([&deleteEventCallbackCalled]() + { + ++deleteEventCallbackCalled; + }); + mitk::WeakPointer weakPointer4(m_WeakPointer); + m_WeakPointer = m_SmartPointer; + m_SmartPointer = nullptr; + CPPUNIT_ASSERT_MESSAGE("Testing expired weak pointer (copy constructor)", weakPointer4.IsExpired()); + } + + void DeleteEventCall_Success() + { + int deleteEventCallbackCalled = 0; + m_WeakPointer.SetDeleteEventCallback([&deleteEventCallbackCalled]() + { + ++deleteEventCallbackCalled; + }); + m_WeakPointer = m_SmartPointer; + m_SmartPointer = nullptr; + CPPUNIT_ASSERT_MESSAGE("Testing call of delete event callback", 1 == deleteEventCallbackCalled); + } + +}; +MITK_TEST_SUITE_REGISTRATION(mitkWeakPointer)