Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkTrackingDeviceSource.h"
00019 #include "mitkVirtualTrackingDevice.h"
00020
00021 #include "mitkTestingMacros.h"
00022 #include <mitkReferenceCountWatcher.h>
00023 #include "itksys/SystemTools.hxx"
00024
00028 int mitkTrackingDeviceSourceTest(int , char* [])
00029 {
00030 MITK_TEST_BEGIN("TrackingDeviceSource");
00031
00032
00033 mitk::TrackingDeviceSource::Pointer mySource = mitk::TrackingDeviceSource::New();
00034
00035
00036
00037
00038 MITK_TEST_CONDITION_REQUIRED(mySource.IsNotNull(), "Testing instantiation");
00039
00040 mySource->SetTrackingDevice(NULL);
00041 MITK_TEST_CONDITION(mySource->GetTrackingDevice() == NULL, "Testing Set/GetTrackingDevice(NULL)");
00042 MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 0, "Testing GetNumberOfOutputs with NULL td");
00043 MITK_TEST_FOR_EXCEPTION(std::invalid_argument, mySource->Connect());
00044 MITK_TEST_FOR_EXCEPTION(std::invalid_argument, mySource->StartTracking());
00045
00046 mitk::VirtualTrackingDevice::Pointer tracker = mitk::VirtualTrackingDevice::New();
00047
00048
00049 mySource->SetTrackingDevice(tracker);
00050 MITK_TEST_CONDITION(mySource->GetTrackingDevice() == tracker.GetPointer(), "Testing Set/GetTrackingDevice(tracker)");
00051 MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 0, "Testing GetNumberOfOutputs with no tool tracker");
00052 tracker = mitk::VirtualTrackingDevice::New();
00053 mitk::ReferenceCountWatcher::Pointer watch = new mitk::ReferenceCountWatcher(tracker);
00054
00055 tracker->AddTool("T0");
00056 tracker->AddTool("T1");
00057 mySource->SetTrackingDevice(tracker);
00058 MITK_TEST_CONDITION(mySource->GetTrackingDevice() == tracker.GetPointer(), "Testing Set/GetTrackingDevice(tracker2)");
00059 MITK_TEST_CONDITION(mySource->GetNumberOfOutputs() == 2, "Testing GetNumberOfOutputs with 2 tools tracker");
00060 MITK_TEST_CONDITION(mySource->IsConnected() == false, "Testing IsConnected()");
00061 mySource->Connect();
00062 MITK_TEST_CONDITION(mySource->IsConnected() == true, "Testing Connect()/IsConnected()");
00063 MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Ready, "Testing Connect()/IsConnected() 2");
00064 mySource->Disconnect();
00065 MITK_TEST_CONDITION(mySource->IsConnected() == false, "Testing Disconnect()/IsConnected()");
00066 MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Setup, "Testing Disconnect()/IsConnected() 2");
00067
00068 mySource->Connect();
00069 mySource->StartTracking();
00070 MITK_TEST_CONDITION(mySource->IsConnected() == true, "Testing StartTracking()/IsConnected()");
00071 MITK_TEST_CONDITION(mySource->IsTracking() == true, "Testing StartTracking()/IsTracking()");
00072 MITK_TEST_CONDITION(tracker->GetState() == mitk::TrackingDevice::Tracking, "Testing StartTracking()/IsTracking() 2");
00073
00074 unsigned long modTime = mySource->GetMTime();
00075 mySource->UpdateOutputInformation();
00076 MITK_TEST_CONDITION(mySource->GetMTime() != modTime, "Testing if UpdateOutputInformation() modifies the object");
00077
00078 mitk::NavigationData* nd0 = mySource->GetOutput(0);
00079
00080 nd0->Update();
00081 mitk::NavigationData::PositionType pos = nd0->GetPosition();
00082 itksys::SystemTools::Delay(500);
00083 nd0->Update();
00084 MITK_TEST_CONDITION(mitk::Equal(nd0->GetPosition(), pos) == false, "Testing if output changes on each update");
00085 mitk::NavigationData* nd1 = mySource->GetOutput(1);
00086 MITK_TEST_CONDITION(nd0 != nd1, "Testing if outputs are different");
00087 MITK_TEST_CONDITION(mitk::Equal(nd0->GetPosition(), nd1->GetPosition()) == false, "Testing if output contents are different");
00088
00089 mySource->StopTracking();
00090 mySource->Disconnect();
00091
00092 tracker = mitk::VirtualTrackingDevice::New();
00093 mySource->SetTrackingDevice(tracker);
00094 MITK_TEST_CONDITION(watch->GetReferenceCount() == 0, "Testing if reference to previous tracker object is released");
00095 watch = NULL;
00096
00097 MITK_TEST_FOR_EXCEPTION(std::runtime_error, mySource->StartTracking());
00098
00099 mySource->Connect();
00100 mySource->StartTracking();
00101
00102 try
00103 {
00104 mySource = NULL;
00105 tracker = NULL;
00106 }
00107 catch (...)
00108 {
00109 MITK_TEST_FAILED_MSG(<< "exception during destruction of source or tracker!");
00110 }
00111
00112
00113 MITK_TEST_END();
00114 }