#include "mitkNavigationDataDisplacementFilter.h"
#include "mitkNavigationData.h"
#include "mitkTestingMacros.h"
#include <iostream>
#include "mitkPropertyList.h"
#include "mitkProperties.h"
Go to the source code of this file.
Functions | |
int | mitkNavigationDataDisplacementFilterTest (int, char *[]) |
int mitkNavigationDataDisplacementFilterTest | ( | int | , |
char * | [] | ||
) |
Documentation test for the class "NavigationDataDisplacementFilter".
Definition at line 30 of file mitkNavigationDataDisplacementFilterTest.cpp.
References mitk::NavigationData::GetOrientation(), mitk::NavigationData::GetPosition(), mitk::NavigationData::IsDataValid(), MITK_TEST_BEGIN, MITK_TEST_CONDITION, MITK_TEST_CONDITION_REQUIRED, MITK_TEST_END, mitk::Vector3DProperty::New(), mitk::PropertyList::New(), mitk::NavigationData::New(), and mitk::NavigationDataDisplacementFilter::New().
{ MITK_TEST_BEGIN("NavigationDataDisplacementFilter") // let's create an object of our class mitk::NavigationDataDisplacementFilter::Pointer myFilter = mitk::NavigationDataDisplacementFilter::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(myFilter.IsNotNull(),"Testing instantiation"); /* create helper objects: navigation data with position as origin, zero quaternion, zero error and data valid */ mitk::NavigationData::PositionType initialPos; mitk::FillVector3D(initialPos, 0.0, 0.0, 0.0); mitk::NavigationData::OrientationType initialOri(0.0, 0.0, 0.0, 0.0); mitk::ScalarType initialError(0.0); bool initialValid(true); mitk::NavigationData::Pointer nd1 = mitk::NavigationData::New(); nd1->SetPosition(initialPos); nd1->SetOrientation(initialOri); nd1->SetPositionAccuracy(initialError); nd1->SetDataValid(initialValid); myFilter->SetInput(nd1); MITK_TEST_CONDITION(myFilter->GetInput() == nd1, "testing Set-/GetInput()"); /* create filter parameter */ mitk::Vector3D offset; mitk::FillVector3D(offset, 1.0, 1.0, 1.0); myFilter->SetOffset(offset); MITK_TEST_CONDITION(myFilter->GetOffset() == offset, "testing Set-/GetOffset()"); mitk::NavigationData* output = myFilter->GetOutput(); MITK_TEST_CONDITION_REQUIRED(output != NULL, "Testing GetOutput()"); output->Update(); // execute filter MITK_TEST_CONDITION(output->GetPosition() == (initialPos + offset), "Testing offset calculation"); MITK_TEST_CONDITION(output->GetOrientation() == initialOri, "Testing if Orientation remains unchanged"); MITK_TEST_CONDITION(output->IsDataValid() == initialValid, "Testing if DataValid remains unchanged"); /* now test the filter with multiple inputs */ mitk::NavigationData::PositionType initialPos2; mitk::FillVector3D(initialPos2, -1000.0, 567.89, 0.0); mitk::NavigationData::Pointer nd2 = mitk::NavigationData::New(); nd2->SetPosition(initialPos2); nd2->SetOrientation(initialOri); nd2->SetPositionAccuracy(initialError); nd2->SetDataValid(initialValid); myFilter = NULL; myFilter = mitk::NavigationDataDisplacementFilter::New(); myFilter->SetOffset(offset); myFilter->SetInput(0, nd1); myFilter->SetInput(1, nd2); MITK_TEST_CONDITION(((myFilter->GetInput(0) == nd1) && (myFilter->GetInput(1) == nd2)), "testing Set-/GetInput(index, data)"); output = myFilter->GetOutput(0); mitk::NavigationData* output2 = myFilter->GetOutput(1); output2->Update(); // execute filter pipeline. this should update both outputs! MITK_TEST_CONDITION(((output != NULL) && (output2 != NULL)), "testing GetOutput(index)"); MITK_TEST_CONDITION(output->GetPosition() == (initialPos + offset), "Testing offset calculation for output 0"); MITK_TEST_CONDITION(output2->GetPosition() == (initialPos2 + offset), "Testing offset calculation for output 1"); MITK_TEST_CONDITION(output2->GetOrientation() == initialOri, "Testing if Orientation remains unchanged for output 1"); MITK_TEST_CONDITION(output2->IsDataValid() == initialValid, "Testing if DataValid remains unchanged for output 1"); /* test if anything changes on second ->Update() */ output->Update(); // nothing should change, since inputs remain unchanged MITK_TEST_CONDITION((output->GetPosition() == (initialPos + offset)) &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after second update()"); /* change an input, see if output changes too */ mitk::NavigationData::PositionType pos2; mitk::FillVector3D(pos2, 123.456, -234.567, 789.987); nd1->SetPosition(pos2); // nd1 is modified, but nothing should change until pipe gets updated MITK_TEST_CONDITION((output->GetPosition() == (initialPos + offset)) &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after input change, before update()"); output->Update(); // update pipeline. should recalculate positions, because input has changed MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset)) &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after input change, after update()"); /* now, change filter parameter and check if pipeline updates correctly */ mitk::Vector3D offset2; mitk::FillVector3D(offset2, -1.2, 3.45, -6.789); myFilter->SetOffset(offset2); MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset)) &&(output2->GetPosition() == (initialPos2 + offset)), "Testing offset calculation after offset parameter change, before update()"); output->Update(); // update pipeline. should recalculate positions, because input has changed MITK_TEST_CONDITION((output->GetPosition() == (pos2 + offset2)) &&(output2->GetPosition() == (initialPos2 + offset2)), "Testing offset calculation after offset parameter , after update()"); /* Now test the PropertyList handling of the GetParameters() and SetParameters() methods */ mitk::PropertyList::ConstPointer p = myFilter->GetParameters(); MITK_TEST_CONDITION(p.IsNotNull(), "Testing GetParameters() has valid return type"); mitk::Vector3D v; MITK_TEST_CONDITION(p->GetPropertyValue<mitk::Vector3D>("NavigationDataDisplacementFilter_Offset", v) == true, "PropertyList contains correct key?"); MITK_TEST_CONDITION(v == offset2, "Offset Property contains correct value?"); MITK_TEST_CONDITION(p->GetMap()->size() == 1, "PropertyList contains correct number of items?"); mitk::PropertyList::Pointer p2 = mitk::PropertyList::New(); myFilter->SetParameters(p2); MITK_TEST_CONDITION(myFilter->GetOffset() == offset2, "Offset unchanged on SetParameters() with empty PropertyList?"); p2->SetProperty("NavigationDataDisplacementFilter_WRONGNAME", mitk::Vector3DProperty::New(v)); // fill PropertyList with incorrect parameter MITK_TEST_CONDITION(myFilter->GetOffset() == offset2, "Offset unchanged on SetParameters() with wrong propertyname?"); mitk::FillVector3D(v, -111.1, 0.0, 111.1); p2->SetProperty("NavigationDataDisplacementFilter_Offset", mitk::Vector3DProperty::New(v)); // fill PropertyList with correct parameter myFilter->SetParameters(p2); MITK_TEST_CONDITION(myFilter->GetOffset() == v, "Offset updated correctly by SetParameters()?"); p2 = mitk::PropertyList::New(); mitk::Vector3D v2; mitk::FillVector3D(v2, 0.0, 111.1, 0.0); p2->SetProperty("NavigationDataDisplacementFilter_Offset", mitk::Vector3DProperty::New(v2)); // change parameter in PropertyList myFilter->SetParameters(p2); MITK_TEST_CONDITION(myFilter->GetOffset() == v2, "Offset updated correctly by SetParameters()?"); //MITK_TEST_CONDITION(myFilter->GetParameters() == p2, "GetParameters() returns an equal PropertyList as the one set with SetParameters?"); // not possible, since PropertyLists don't have a == operator v = myFilter->GetOffset(); myFilter->SetParameters(myFilter->GetParameters()); MITK_TEST_CONDITION(myFilter->GetOffset() == v, "Offset unchanged after SetParameters(GetParamters())"); // always end with this! MITK_TEST_END(); }