Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkIGTLMessageSourceTest.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 #include "mitkNavigationData.h"
15 
16 #include "mitkTestingMacros.h"
17 
22 class MyNavigationDataSourceTest : public mitk::NavigationDataSource
23  {
24  public:
25  mitkClassMacro(MyNavigationDataSourceTest, mitk::NavigationDataSource);
26  itkFactorylessNewMacro(Self)
27  itkCloneMacro(Self)
28  void CreateOutput()
29  {
30  this->SetNumberOfIndexedOutputs(1);
31  this->SetNthOutput(0, this->MakeOutput(0));
32  };
33  };
34 
36 class mitkNavigationDataSourceTestClass
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 
58  static void TestMethodsNormalCases()
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 
90  static void TestMethodsInvalidCases()
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 e)
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 e)
122  {
123  exceptionThrown=true;
124  }
125  MITK_TEST_CONDITION(exceptionThrown,"Testing method GraftNthOutput with invalid index");
126  }
127 
128  static void TestMicroserviceRegister()
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  }
145  static void TestMicroserviceAvailabilityAndUnregister()
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 
159 int mitkNavigationDataSourceTest(int /* argc */, char* /*argv*/[])
160 {
161  MITK_TEST_BEGIN("NavigationDataSource");
162 
163  mitkNavigationDataSourceTestClass::TestInstantiation();
164  mitkNavigationDataSourceTestClass::TestMethodsNormalCases();
165  mitkNavigationDataSourceTestClass::TestMethodsInvalidCases();
166  mitkNavigationDataSourceTestClass::TestMicroserviceRegister();
167  mitkNavigationDataSourceTestClass::TestMicroserviceAvailabilityAndUnregister();
168 
169  // always end with this!
170  MITK_TEST_END();
171 }
static Pointer New()
double ScalarType
#define MITK_TEST_CONDITION_REQUIRED(COND, MSG)
int mitkNavigationDataSourceTest(int, char *[])
DataCollection - Class to facilitate loading/accessing structured data.
section GeneralTestsDeprecatedOldTestingStyle Deprecated macros All tests with MITK_TEST_BEGIN()
mitk::Quaternion OrientationType
Type that holds the orientation part of the tracking data.
void FillVector3D(Tout &out, mitk::ScalarType x, mitk::ScalarType y, mitk::ScalarType z)
Definition: mitkArray.h:106
#define MITK_TEST_OUTPUT(x)
Output some text.
itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override
#define MITK_TEST_CONDITION(COND, MSG)
#define mitkClassMacro(className, SuperClassName)
Definition: mitkCommon.h:40
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.
and MITK_TEST_END()