00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkNavigationDataToMessageFilter.h"
00019 #include "mitkNavigationData.h"
00020
00021 #include "mitkTestingMacros.h"
00022 #include "mitkVector.h"
00023 #include <iostream>
00024
00025
00026
00027
00028 class MessageReceiverClass
00029 {
00030 public:
00031
00032 MessageReceiverClass(unsigned int numberOfNavigationDatas)
00033 {
00034 m_ReceivedData.resize(numberOfNavigationDatas);
00035 for (unsigned int i = 0; i < numberOfNavigationDatas; ++i)
00036 m_ReceivedData[i] = mitk::NavigationData::New();
00037
00038 m_MessagesReceived = 0;
00039 }
00040
00041 void OnPositionChanged(mitk::NavigationData::PositionType v, unsigned int index)
00042 {
00043 m_ReceivedData[index]->SetPosition(v);
00044 ++m_MessagesReceived;
00045 }
00046
00047 void OnOrientationChanged(mitk::NavigationData::OrientationType v, unsigned int index)
00048 {
00049 m_ReceivedData[index]->SetOrientation(v);
00050 ++m_MessagesReceived;
00051 }
00052
00053 void OnErrorChanged(mitk::NavigationData::CovarianceMatrixType v, unsigned int index)
00054 {
00055 m_ReceivedData[index]->SetCovErrorMatrix(v);
00056 ++m_MessagesReceived;
00057 }
00058
00059 void OnTimeStampChanged(mitk::NavigationData::TimeStampType v, unsigned int index)
00060 {
00061 m_ReceivedData[index]->SetTimeStamp(v);
00062 ++m_MessagesReceived;
00063 }
00064
00065 void OnDataValidChanged(bool v, unsigned int index)
00066 {
00067 m_ReceivedData[index]->SetDataValid(v);
00068 ++m_MessagesReceived;
00069 }
00070
00071 std::vector<mitk::NavigationData::Pointer> m_ReceivedData;
00072 int m_MessagesReceived;
00073 };
00074
00078 int mitkNavigationDataToMessageFilterTest(int , char* [])
00079 {
00080 MITK_TEST_BEGIN("NavigationDataToMessageFilter");
00081
00082 {
00083
00084 mitk::NavigationDataToMessageFilter::Pointer myFilter = mitk::NavigationDataToMessageFilter::New();
00085
00086
00087
00088
00089 MITK_TEST_CONDITION_REQUIRED(myFilter.IsNotNull(),"Testing instantiation");
00090
00091
00092 mitk::NavigationData::PositionType initialPos;
00093 mitk::FillVector3D(initialPos, 1.0, 2.0, 3.0);
00094 mitk::NavigationData::OrientationType initialOri(1.0, 2.0, 3.0, 4.0);
00095
00096 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00097 nd1->SetPosition(initialPos);
00098 nd1->SetOrientation(initialOri);
00099 nd1->SetPositionAccuracy(11.111);
00100 nd1->SetTimeStamp(64.46);
00101 nd1->SetDataValid(true);
00102
00103 myFilter->SetInput(nd1);
00104 MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "testing Set-/GetInput()");
00105
00106 mitk::NavigationData* output = myFilter->GetOutput();
00107 MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()");
00108
00109
00110
00111 MessageReceiverClass answers(1);
00112 myFilter->AddPositionChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::PositionType, unsigned int>(&answers, &MessageReceiverClass::OnPositionChanged));
00113 myFilter->AddOrientationChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::OrientationType, unsigned int>(&answers, &MessageReceiverClass::OnOrientationChanged));
00114 myFilter->AddErrorChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::CovarianceMatrixType, unsigned int>(&answers, &MessageReceiverClass::OnErrorChanged));
00115 myFilter->AddTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
00116 myFilter->AddDataValidChangedListener(mitk::MessageDelegate2<MessageReceiverClass, bool, unsigned int>(&answers, &MessageReceiverClass::OnDataValidChanged));
00117
00118
00119 output->Update();
00120 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
00121 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetOrientation(), nd1->GetOrientation()), "Testing OrientationChanged message");
00122 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->GetCovErrorMatrix() == nd1->GetCovErrorMatrix(), "Testing ErrorChanged message");
00123 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
00124 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
00125 MITK_TEST_CONDITION( answers.m_MessagesReceived == 5, "Correct number of messages send?");
00126
00127
00128 nd1->SetDataValid(false);
00129 output->Update();
00130 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
00131 MITK_TEST_CONDITION( answers.m_MessagesReceived == 6, "only necessary messages send?");
00132
00133
00134 mitk::FillVector3D(initialPos, 11.0, 21.0, 31.0);
00135 nd1->SetPosition(initialPos);
00136 nd1->SetTimeStamp(55.55);
00137 output->Update();
00138 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
00139 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
00140 MITK_TEST_CONDITION( answers.m_MessagesReceived == 8, "only necessary messages send?");
00141
00142
00143
00144
00145
00146
00147 }
00148
00149 {
00150 MITK_TEST_OUTPUT( << "Now, perform tests with multiple inputs");
00151
00152 mitk::NavigationDataToMessageFilter::Pointer myFilter = mitk::NavigationDataToMessageFilter::New();
00153
00154
00155 mitk::NavigationData::PositionType initialPos;
00156 mitk::FillVector3D(initialPos, 1.0, 1.0, 1.0);
00157 mitk::NavigationData::OrientationType initialOri(1.0, 1.0, 1.0, 1.0);
00158
00159 mitk::NavigationData::Pointer nd0 = mitk::NavigationData::New();
00160 nd0->SetPosition(initialPos);
00161 nd0->SetOrientation(initialOri);
00162 nd0->SetPositionAccuracy(11.111);
00163 nd0->SetTimeStamp(64.46);
00164 nd0->SetDataValid(true);
00165
00166 mitk::FillVector3D(initialPos, 2.0, 2.0, 2.0);
00167 mitk::NavigationData::OrientationType initialOri2(1.0, 1.0, 1.0, 1.0);
00168 mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New();
00169 nd1->SetPosition(initialPos);
00170 nd1->SetOrientation(initialOri2);
00171 nd1->SetPositionAccuracy(22.222);
00172 nd1->SetTimeStamp(222.2);
00173 nd1->SetDataValid(true);
00174
00175 myFilter->SetInput(0, nd0);
00176 myFilter->SetInput(1, nd1);
00177 MITK_TEST_CONDITION(myFilter->GetInput(0) == nd0, "testing Set-/GetInput(0)");
00178 MITK_TEST_CONDITION(myFilter->GetInput(1) == nd1, "testing Set-/GetInput(1)");
00179
00180 mitk::NavigationData* output0 = myFilter->GetOutput(0);
00181 mitk::NavigationData* output1 = myFilter->GetOutput(1);
00182 MITK_TEST_CONDITION_REQUIRED(output0 != NULL, "Testing GetOutput(0)");
00183 MITK_TEST_CONDITION_REQUIRED(output1 != NULL, "Testing GetOutput(1)");
00184
00185
00186 MessageReceiverClass answers(2);
00187 myFilter->AddPositionChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::PositionType, unsigned int>(&answers, &MessageReceiverClass::OnPositionChanged));
00188 myFilter->AddOrientationChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::OrientationType, unsigned int>(&answers, &MessageReceiverClass::OnOrientationChanged));
00189 myFilter->AddErrorChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::CovarianceMatrixType, unsigned int>(&answers, &MessageReceiverClass::OnErrorChanged));
00190 myFilter->AddTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
00191 myFilter->AddDataValidChangedListener(mitk::MessageDelegate2<MessageReceiverClass, bool, unsigned int>(&answers, &MessageReceiverClass::OnDataValidChanged));
00192
00193 output0->Update();
00194 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetPosition(), nd0->GetPosition()), "Testing PositionChanged message");
00195 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetOrientation(), nd0->GetOrientation()), "Testing OrientationChanged message");
00196 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->GetCovErrorMatrix() == nd0->GetCovErrorMatrix(), "Testing ErrorChanged message");
00197 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[0]->GetTimeStamp(), nd0->GetTimeStamp()), "Testing TimeStampChanged message");
00198 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message");
00199 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetPosition(), nd1->GetPosition()), "Testing PositionChanged message");
00200 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetOrientation(), nd1->GetOrientation()), "Testing OrientationChanged message");
00201 MITK_TEST_CONDITION( answers.m_ReceivedData[1]->GetCovErrorMatrix() == nd1->GetCovErrorMatrix(), "Testing ErrorChanged message");
00202 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing TimeStampChanged message");
00203 MITK_TEST_CONDITION( answers.m_ReceivedData[1]->IsDataValid() == nd1->IsDataValid(), "Testing PositionChanged message");
00204 MITK_TEST_CONDITION( answers.m_MessagesReceived == 10, "Correct number of messages send?");
00205 MITK_TEST_OUTPUT( << "answers.m_MessagesReceived = " << answers.m_MessagesReceived);
00206
00207 nd0->SetDataValid(false);
00208 output0->Update();
00209 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message for input 0");
00210 MITK_TEST_CONDITION( answers.m_MessagesReceived == 11, "only necessary messages send?");
00211
00212
00213 myFilter->RemoveTimeStampChangedListener(mitk::MessageDelegate2<MessageReceiverClass, mitk::NavigationData::TimeStampType, unsigned int>(&answers, &MessageReceiverClass::OnTimeStampChanged));
00214 mitk::NavigationData::TimeStampType oldValue = nd1->GetTimeStamp();
00215 nd1->SetTimeStamp(999.9);
00216 myFilter->Update();
00217 MITK_TEST_CONDITION( ! mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), nd1->GetTimeStamp()), "Testing if TimeStamp message is _not_ send after RemoveListener (!= new value)");
00218 MITK_TEST_CONDITION( mitk::Equal(answers.m_ReceivedData[1]->GetTimeStamp(), oldValue), "Testing if TimeStamp message is _not_ send after RemoveListener (== old value)");
00219 MITK_TEST_CONDITION( answers.m_MessagesReceived == 11, "no new messages send?");
00220
00221 nd1->SetDataValid(false);
00222 myFilter->Update();
00223 MITK_TEST_CONDITION( answers.m_ReceivedData[1]->IsDataValid() == nd1->IsDataValid(), "Other messages still send? ->Testing PositionChanged message for input 1 again");
00224 MITK_TEST_CONDITION( answers.m_MessagesReceived == 12, "only necessary messages send?");
00225
00226 MITK_TEST_CONDITION( answers.m_ReceivedData[0]->IsDataValid() == nd0->IsDataValid(), "Testing PositionChanged message for input 0");
00227 }
00228
00229 MITK_TEST_END();
00230 }