diff --git a/Modules/IGT/Testing/mitkClaronTrackingDeviceTest.cpp b/Modules/IGT/Testing/mitkClaronTrackingDeviceTest.cpp index 402a086c01..9c2d1e156c 100644 --- a/Modules/IGT/Testing/mitkClaronTrackingDeviceTest.cpp +++ b/Modules/IGT/Testing/mitkClaronTrackingDeviceTest.cpp @@ -1,149 +1,149 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2008-02-25 17:27:17 +0100 (Mo, 25 Feb 2008) $ Version: $Revision: 7837 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkClaronTrackingDevice.h" #include "mitkClaronTool.h" #include "mitkTestingMacros.h" #include "mitkStandardFileLocations.h" class mitkClaronTrackingDeviceTestClass { public: static bool TestIsMicronTrackerInstalled() { mitk::ClaronTrackingDevice::Pointer myClaronTrackingDevice = mitk::ClaronTrackingDevice::New(); bool returnValue = myClaronTrackingDevice->IsMicronTrackerInstalled(); if (returnValue) {MITK_TEST_OUTPUT(<< "MicronTracker is installed on this system!")} else {MITK_TEST_OUTPUT(<< "MicronTracker is not installed on this system!")} return returnValue; } static void TestInstantiation() { // let's create an object of our class mitk::ClaronTrackingDevice::Pointer testInstance; testInstance = mitk::ClaronTrackingDevice::New(); MITK_TEST_CONDITION_REQUIRED(testInstance.IsNotNull(),"Testing instantiation:") } static void TestToolConfiguration() { std::string toolFileName = mitk::StandardFileLocations::GetInstance()->FindFile("ClaronTool", "Modules/IGT/Testing/Data/"); MITK_TEST_CONDITION(toolFileName.empty() == false, "Check if tool calibration file exists"); mitk::ClaronTrackingDevice::Pointer testInstance = mitk::ClaronTrackingDevice::New(); MITK_TEST_CONDITION(testInstance->AddTool("Tool1", toolFileName.c_str()) != NULL, "Testing AddTool() for tool 1"); MITK_TEST_CONDITION(testInstance->GetToolCount() == 1, "Testing adding tool 1"); MITK_TEST_CONDITION(testInstance->AddTool("Tool2", toolFileName.c_str()) != NULL, "Testing AddTool() for tool 2"); MITK_TEST_CONDITION(testInstance->GetToolCount() == 2, "Testing adding tool 2"); MITK_TEST_CONDITION(testInstance->AddTool("Tool3", toolFileName.c_str()) != NULL, "Testing AddTool() for tool 3"); MITK_TEST_CONDITION(testInstance->GetToolCount() == 3, "Testing adding tool 3"); //std::vector myTools = testInstance->GetAllTools(); MITK_TEST_CONDITION(testInstance->GetTool(0)->GetToolName() == std::string("Tool1"), "Testing GetTool() for tool 1"); MITK_TEST_CONDITION(testInstance->GetTool(1)->GetToolName() == std::string("Tool2"), "Testing GetTool() for tool 2"); MITK_TEST_CONDITION(testInstance->GetTool(2)->GetToolName() == std::string("Tool3"), "Testing GetTool() for tool 3"); //Testing 100 tools (maximum by MicronTracker) testInstance = NULL; testInstance = mitk::ClaronTrackingDevice::New(); for (unsigned int i = 0; i < 100; i++) testInstance->AddTool("Tool", toolFileName.c_str()); MITK_TEST_CONDITION(testInstance->GetToolCount() == 100, "Testing adding 100 tools"); bool failed = false; unsigned int max = 100; testInstance = mitk::ClaronTrackingDevice::New(); for (unsigned int i = 0; i < max; i++) testInstance->AddTool("Tool", toolFileName.c_str()); if ((testInstance->GetToolCount() != max)) failed = true; MITK_TEST_CONDITION(!failed, "Testing tool configuration (maximum of 100 tools):"); } static void TestAllMethodsOnSystemsWithoutMicronTracker() { //In this case we won't receive valid data but defined invalid return values. //initialize mitk::ClaronTrackingDevice::Pointer myClaronTrackingDevice = mitk::ClaronTrackingDevice::New(); //OpenConnection MITK_TEST_CONDITION( (!myClaronTrackingDevice->OpenConnection()), "Testing behavior of method OpenConnection() (Errors should occur because MicronTracker is not activated).\n"); std::string toolFileName = mitk::StandardFileLocations::GetInstance()->FindFile("ClaronTool", "Testing/Data/"); MITK_TEST_CONDITION(toolFileName.empty() == false, "Check if tool calibration file exists"); //add a few tools myClaronTrackingDevice->AddTool("Tool1", toolFileName.c_str()); myClaronTrackingDevice->AddTool("Tool2", toolFileName.c_str()); myClaronTrackingDevice->AddTool("Tool3", toolFileName.c_str()); //test IsMicronTrackerInstalled MITK_TEST_CONDITION(!myClaronTrackingDevice->IsMicronTrackerInstalled(),"Testing method IsMicronTrackerInstalled().\n") - //test getToolCount - int toolCount = myClaronTrackingDevice->GetToolCount(); + //test getToolCount + int toolCount = myClaronTrackingDevice->GetToolCount(); MITK_TEST_CONDITION((toolCount==3), "Testing method GetToolCount().\n"); //test getTool mitk::TrackingTool* myTool = myClaronTrackingDevice->GetTool(2); - MITK_TEST_CONDITION((std::string(myTool->GetToolName()) == "Tool3"), "Testing method GetTool().\n"); + MITK_TEST_CONDITION((std::string(myTool->GetToolName()) == "Tool3"), "Testing method GetTool().\n"); //StartTracking MITK_TEST_CONDITION( (!myClaronTrackingDevice->StartTracking()), "Testing behavior of method StartTracking().\n"); //StopTracking MITK_TEST_CONDITION( (myClaronTrackingDevice->StopTracking()), "Testing behavior of method StopTracking().\n"); //CloseConnection MITK_TEST_CONDITION( (myClaronTrackingDevice->CloseConnection()), "Testing behavior of method CloseConnection().\n"); } }; /** * This function is testing methods of the class ClaronTrackingDevice which are independent from the hardware. For more tests we would need * the MicronTracker hardware, so only a few simple tests, which can run without the hardware are tested here. More tests can be found in the * class ClaronTrackingDeviceHardwareTests which tests the interaction with the hardware. */ int mitkClaronTrackingDeviceTest(int /* argc */, char* /*argv*/[]) { MITK_TEST_BEGIN("ClaronTrackingDevice"); mitkClaronTrackingDeviceTestClass::TestInstantiation(); mitkClaronTrackingDeviceTestClass::TestToolConfiguration(); /* The following tests don't run under linux environments. This is or could be caused by the fact that the MicronTracker interface * is developed under windows and not tested under linux yet (26.2.2009). So - in my opinion - the best approach is to first test * the MicronTracker code under linux (and make the necessary changes of course) and in parallel write the linux tests or make this * tests runnable under linux. */ #ifdef WIN32 if (mitkClaronTrackingDeviceTestClass::TestIsMicronTrackerInstalled()) { MITK_TEST_OUTPUT(<< "... MicronTracker is installed on your System, so we don't run any further tests. (All tests run on systems without MicronTracker)"); } else { MITK_TEST_OUTPUT(<< ".Test"); mitkClaronTrackingDeviceTestClass::TestAllMethodsOnSystemsWithoutMicronTracker(); } #endif MITK_TEST_END(); } \ No newline at end of file diff --git a/Modules/IGT/Testing/mitkTrackingDeviceSourceTest.cpp b/Modules/IGT/Testing/mitkTrackingDeviceSourceTest.cpp index a3cbd8b5ee..22dbcb9c6e 100644 --- a/Modules/IGT/Testing/mitkTrackingDeviceSourceTest.cpp +++ b/Modules/IGT/Testing/mitkTrackingDeviceSourceTest.cpp @@ -1,121 +1,138 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-13 14:52:01 +0200 (Mi, 13. Mai 2009) $ Version: $Revision: 17230 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "mitkTrackingDeviceSource.h" #include "mitkVirtualTrackingDevice.h" #include "mitkTestingMacros.h" #include #include "itksys/SystemTools.hxx" /**Documentation * test for the class "NavigationDataSource". */ int mitkTrackingDeviceSourceTest(int /* argc */, char* /*argv*/[]) { MITK_TEST_BEGIN("TrackingDeviceSource"); // let's create an object of our class mitk::TrackingDeviceSource::Pointer mySource = mitk::TrackingDeviceSource::New(); // first test: did this work? // using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since // it makes no sense to continue without an object. MITK_TEST_CONDITION_REQUIRED(mySource.IsNotNull(), "Testing instantiation"); mySource->SetTrackingDevice(NULL); MITK_TEST_CONDITION(mySource->GetTrackingDevice() == NULL, "Testing Set/GetTrackingDevice(NULL)"); MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 0, "Testing GetNumberOfOutputs with NULL td"); MITK_TEST_FOR_EXCEPTION(std::invalid_argument, mySource->Connect()); MITK_TEST_FOR_EXCEPTION(std::invalid_argument, mySource->StartTracking()); mitk::VirtualTrackingDevice::Pointer tracker = mitk::VirtualTrackingDevice::New(); tracker->SetRefreshRate(10); mySource->SetTrackingDevice(tracker); MITK_TEST_CONDITION(mySource->GetTrackingDevice() == tracker.GetPointer(), "Testing Set/GetTrackingDevice(tracker)"); MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 0, "Testing GetNumberOfOutputs with no tool tracker"); tracker = mitk::VirtualTrackingDevice::New(); mitk::ReferenceCountWatcher::Pointer watch = new mitk::ReferenceCountWatcher(tracker); tracker->AddTool("T0"); tracker->AddTool("T1"); mySource->SetTrackingDevice(tracker); MITK_TEST_CONDITION(mySource->GetTrackingDevice() == tracker.GetPointer(), "Testing Set/GetTrackingDevice(tracker2)"); MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 2, "Testing GetNumberOfOutputs with 2 tools tracker"); MITK_TEST_CONDITION(mySource->IsConnected() == false, "Testing IsConnected()"); mySource->Connect(); MITK_TEST_CONDITION(mySource->IsConnected() == true, "Testing Connect()/IsConnected()"); MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Ready, "Testing Connect()/IsConnected() 2"); mySource->Disconnect(); MITK_TEST_CONDITION(mySource->IsConnected() == false, "Testing Disconnect()/IsConnected()"); MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Setup, "Testing Disconnect()/IsConnected() 2"); mySource->Connect(); mySource->StartTracking(); MITK_TEST_CONDITION(mySource->IsConnected() == true, "Testing StartTracking()/IsConnected()"); MITK_TEST_CONDITION(mySource->IsTracking() == true, "Testing StartTracking()/IsTracking()"); MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Tracking, "Testing StartTracking()/IsTracking() 2"); unsigned long modTime = mySource->GetMTime(); mySource->UpdateOutputInformation(); MITK_TEST_CONDITION(mySource->GetMTime() != modTime, "Testing if UpdateOutputInformation() modifies the object"); + //test getOutput() mitk::NavigationData* nd0 = mySource->GetOutput(0); + MITK_TEST_CONDITION(nd0!=NULL,"Testing GetOutput() [1]"); + nd0 = mySource->GetOutput(nd0->GetName()); + MITK_TEST_CONDITION(nd0!=NULL,"Testing GetOutput() [2]"); + + //test getOutputIndex() + MITK_TEST_CONDITION(mySource->GetOutputIndex(nd0->GetName())==0,"Testing GetOutputIndex()"); + //test GraftNthOutput() + mitk::NavigationData::Pointer ndCopy = mitk::NavigationData::New(); + mySource->GraftNthOutput(1,nd0); + ndCopy = mySource->GetOutput(1); + MITK_TEST_CONDITION(std::string(ndCopy->GetName())==std::string(nd0->GetName()),"Testing GraftNthOutput()"); + + //test GetParameters() + mitk::PropertyList::ConstPointer p = mySource->GetParameters(); + MITK_TEST_CONDITION(p.IsNotNull(),"Testing GetParameters()"); + nd0->Update(); mitk::NavigationData::PositionType pos = nd0->GetPosition(); unsigned long tmpMTime0 = nd0->GetMTime(); itksys::SystemTools::Delay(500); // allow the tracking thread to advance the tool position nd0->Update(); mitk::NavigationData::PositionType newPos = nd0->GetPosition(); if(nd0->GetMTime() == tmpMTime0) //tool not modified yet { MITK_TEST_CONDITION(mitk::Equal(newPos, pos) == true, "Testing if output changes on each update"); } else { MITK_TEST_CONDITION(mitk::Equal(newPos, pos) == false, "Testing if output changes on each update"); } mySource->StopTracking(); mySource->Disconnect(); tracker = mitk::VirtualTrackingDevice::New(); mySource->SetTrackingDevice(tracker); MITK_TEST_CONDITION(watch->GetReferenceCount() == 0, "Testing if reference to previous tracker object is released"); watch = NULL; MITK_TEST_FOR_EXCEPTION(std::runtime_error, mySource->StartTracking()); // new tracker, needs Connect() before StartTracking() mySource->Connect(); mySource->StartTracking(); // itksys::SystemTools::Delay(800); // wait for tracking thread to start properly //DEBUG ONLY --> race condition. will the thread start before the object is destroyed? --> maybe hold a smartpointer? try { mySource = NULL; // delete source tracker = NULL; // delete tracker --> both should not result in any exceptions or deadlocks } catch (...) { MITK_TEST_FAILED_MSG(<< "exception during destruction of source or tracker!"); } // always end with this! MITK_TEST_END(); }