MITK-IGT
IGT Extension of MITK
Loading...
Searching...
No Matches
mitkNavigationDataSourceTest.cpp
Go to the documentation of this file.
1/*============================================================================
2
3The Medical Imaging Interaction Toolkit (MITK)
4
5Copyright (c) German Cancer Research Center (DKFZ)
6All rights reserved.
7
8Use of this source code is governed by a 3-clause BSD license that can be
9found in the LICENSE file.
10
11============================================================================*/
12
14#include "mitkNavigationData.h"
15
16#include "mitkTestingMacros.h"
17
23 {
24 public:
27 itkCloneMacro(Self)
28 void CreateOutput()
29 {
30 this->SetNumberOfIndexedOutputs(1);
31 this->SetNthOutput(0, this->MakeOutput(0));
32 };
33 };
34
37 {
38 public:
39
40 static void TestInstantiation()
41 {
42 // let's create an object of our class
43 MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
44
45 // first test: did this work?
46 // using MITK_TEST_CONDITION_REQUIRED makes the test stop after failure, since
47 // it makes no sense to continue without an object.
48 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(), "Testing instantiation");
49
50 // testing create outputs
51 MITK_TEST_CONDITION(myFilter->GetNumberOfInputs() == 0, "testing initial number of inputs");
52 MITK_TEST_CONDITION(myFilter->GetNumberOfOutputs() == 0, "testing initial number of outputs");
53 myFilter->CreateOutput();
54 MITK_TEST_CONDITION(myFilter->GetNumberOfOutputs() == 1, "testing SetNumberOfOutputs() and MakeOutput()");
55 MITK_TEST_CONDITION(dynamic_cast<mitk::NavigationData*>(myFilter->GetOutput()) != nullptr, "test GetOutput() returning valid output object");
56 }
57
59 {
60 //create and initialize test objects
61 MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
62 myFilter->CreateOutput();
64 mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
65 mitk::NavigationData::OrientationType initialOri(0.1, 0.2, 0.3, 0.4);
66 mitk::ScalarType initialError(22.22);
67 bool initialValid(true);
68 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
69 nd1->SetPosition(initialPos);
70 nd1->SetOrientation(initialOri);
71 nd1->SetPositionAccuracy(initialError);
72 nd1->SetDataValid(initialValid);
73
74 //test method graft
75 MITK_TEST_OUTPUT(<< "testing Graftoutput()");
76 myFilter->GraftOutput(nd1);
77 mitk::NavigationData::Pointer out = myFilter->GetOutput();
78 MITK_TEST_CONDITION(out.GetPointer() != nd1.GetPointer(), "testing if output is same object as source of graft");
79 MITK_TEST_CONDITION(mitk::Equal(out->GetPosition(), nd1->GetPosition()),"testing position equality after graft")
80 MITK_TEST_CONDITION(mitk::Equal(out->GetOrientation(), nd1->GetOrientation()),"testing orientation equality after graft")
81 MITK_TEST_CONDITION((out->GetCovErrorMatrix() == nd1->GetCovErrorMatrix()),"testing error matrix equality after graft")
82 MITK_TEST_CONDITION((out->IsDataValid() == nd1->IsDataValid()),"testing data valid equality after graft")
83 MITK_TEST_CONDITION(mitk::Equal(out->GetIGTTimeStamp(), nd1->GetIGTTimeStamp()), "testing timestamp equality after graft");
84
85 //test method GetParameters()
86 mitk::PropertyList::ConstPointer list = myFilter->GetParameters();
87 MITK_TEST_CONDITION(list.IsNotNull(), "testing GetParameters()");
88 }
89
91 {
92 //test invalid call of methods
93 MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
94
95 mitk::NavigationData::Pointer testOutput = myFilter->GetOutput();
96 MITK_TEST_CONDITION(testOutput.IsNull(), "testing GetOutput(int) before initialization");
97
98 testOutput = myFilter->GetOutput("test");
99 MITK_TEST_CONDITION(testOutput.IsNull(), "testing GetOutput(string) before initialization");
100
101 //test GetOutputIndex() with invalid output name
102 myFilter->CreateOutput();
103 bool exceptionThrown=false;
104 try
105 {
106 myFilter->GetOutputIndex("nonsense name");
107 }
108 catch(std::invalid_argument&)
109 {
110 exceptionThrown=true;
111 }
112 MITK_TEST_CONDITION(exceptionThrown,"Testing method GetOutputIndex with invalid navigation data name");
113
114 //test method GraftNthOutput with invalid index
115 exceptionThrown=false;
116 try
117 {
118 mitk::NavigationData::Pointer graftObject;
119 myFilter->GraftNthOutput(100,graftObject);
120 }
121 catch(itk::ExceptionObject&)
122 {
123 exceptionThrown=true;
124 }
125 MITK_TEST_CONDITION(exceptionThrown,"Testing method GraftNthOutput with invalid index");
126 }
127
129 {
130 MyNavigationDataSourceTest::Pointer myFilter = MyNavigationDataSourceTest::New();
131 myFilter->CreateOutput();
133 mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
134 mitk::NavigationData::OrientationType initialOri(0.1, 0.2, 0.3, 0.4);
135 mitk::ScalarType initialError(22.22);
136 bool initialValid(true);
137 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
138 nd1->SetPosition(initialPos);
139 nd1->SetOrientation(initialOri);
140 nd1->SetPositionAccuracy(initialError);
141 nd1->SetDataValid(initialValid);
142 myFilter->RegisterAsMicroservice();
143 MITK_TEST_CONDITION(myFilter->GetMicroserviceID()!="","Testing if microservice was registered successfully.");
144 }
146 {
147 //TODO: test if Microservice is available
148
149 //TODO: remove Microservice
150
151 //TODO: test if Microservice is not available any more
152
153 }
154 };
155
test class that only adds a public New() method to NavigationDataSource, so that it can be tested
itkFactorylessNewMacro(Self) itkCloneMacro(Self) void CreateOutput()
mitkClassMacro(MyNavigationDataSourceTest, mitk::NavigationDataSource)
itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override
mitk::Quaternion OrientationType
Type that holds the orientation part of the tracking data.
mitk::Point3D PositionType
Type that holds the position part of the tracking data.
int mitkNavigationDataSourceTest(int, char *[])
MITKIGTBASE_EXPORT bool Equal(const mitk::NavigationData &leftHandSide, const mitk::NavigationData &rightHandSide, ScalarType eps=mitk::eps, bool verbose=false)
Equal A function comparing two navigation data objects for beeing equal in meta- and imagedata.