diff --git a/Modules/Core/test/mitkBaseDataTest.cpp b/Modules/Core/test/mitkBaseDataTest.cpp index 5661a86164..2582268103 100644 --- a/Modules/Core/test/mitkBaseDataTest.cpp +++ b/Modules/Core/test/mitkBaseDataTest.cpp @@ -1,124 +1,202 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ +// Testing +#include "mitkTestFixture.h" +#include "mitkTestingMacros.h" -#include "itkImage.h" +// std includes +#include + +// MITK includes #include "mitkBaseDataTestImplementation.h" #include "mitkStringProperty.h" -#include "mitkTestingMacros.h" #include #include -int mitkBaseDataTest(int /*argc*/, char * /*argv*/ []) +//itksys +#include "itkImage.h" + +// VTK includes +#include + + + +class mitkBaseDataTestSuite : public mitk:: TestFixture { - MITK_TEST_BEGIN("BaseData") - - // Create a BaseData implementation - MITK_INFO << "Creating a base data instance..."; - mitk::BaseDataTestImplementation::Pointer baseDataImpl = mitk::BaseDataTestImplementation::New(); - - MITK_TEST_CONDITION_REQUIRED(baseDataImpl.IsNotNull(), "Testing instantiation"); - MITK_TEST_CONDITION(baseDataImpl->IsInitialized(), "BaseDataTestImplementation is initialized"); - MITK_TEST_CONDITION(baseDataImpl->IsEmpty(), "BaseDataTestImplementation is initialized and empty"); - - mitk::BaseDataTestImplementation::Pointer cloneBaseData = baseDataImpl->Clone(); - MITK_TEST_CONDITION_REQUIRED(cloneBaseData.IsNotNull(), "Testing instantiation of base data clone"); - MITK_TEST_CONDITION(cloneBaseData->IsInitialized(), "Clone of BaseDataTestImplementation is initialized"); - MITK_TEST_CONDITION(cloneBaseData->IsEmpty(), "Clone of BaseDataTestImplementation is initialized and empty"); - - MITK_INFO << "Testing setter and getter for geometries..."; - - // test method GetTimeGeometry() - MITK_TEST_CONDITION(baseDataImpl->GetTimeGeometry(), "Testing creation of TimeGeometry"); - - mitk::TimeGeometry *geo = nullptr; - baseDataImpl->SetTimeGeometry(geo); - - MITK_TEST_CONDITION(baseDataImpl->GetTimeGeometry() == nullptr, "Reset Geometry"); - - mitk::ProportionalTimeGeometry::Pointer geo2 = mitk::ProportionalTimeGeometry::New(); - baseDataImpl->SetTimeGeometry(geo2); - geo2->Initialize(2); - MITK_TEST_CONDITION(baseDataImpl->GetTimeGeometry() == geo2.GetPointer(), "Correct Reinit of TimeGeometry"); - - // test method GetGeometry(int timeStep) - MITK_TEST_CONDITION(baseDataImpl->GetGeometry(1) != nullptr, "... and single Geometries"); - - // test method Expand(unsigned int timeSteps) - baseDataImpl->Expand(5); - MITK_TEST_CONDITION(baseDataImpl->GetTimeSteps() == 5, "Expand the geometry to further time slices!"); - - // test method GetUpdatedGeometry(int timeStep); - mitk::Geometry3D::Pointer geometry3D = mitk::Geometry3D::New(); - mitk::BaseGeometry::Pointer geo3 = dynamic_cast(geometry3D.GetPointer()); - mitk::ProportionalTimeGeometry::Pointer timeGeometry = - dynamic_cast(baseDataImpl->GetTimeGeometry()); - if (timeGeometry.IsNotNull()) - { - timeGeometry->SetTimeStepGeometry(geo3, 1); - } - - MITK_TEST_CONDITION(baseDataImpl->GetUpdatedGeometry(1) == geo3, "Set Geometry for time step 1"); - MITK_TEST_CONDITION(baseDataImpl->GetMTime() != 0, "Check if modified time is set"); - baseDataImpl->SetClonedGeometry(geo3, 1); - - mitk::ScalarType x[3]; - x[0] = 2; - x[1] = 4; - x[2] = 6; - mitk::Point3D p3d(x); - baseDataImpl->SetOrigin(p3d); - geo3->SetOrigin(p3d); - - MITK_TEST_CONDITION(baseDataImpl->GetGeometry(1)->GetOrigin() == geo3->GetOrigin(), "Testing Origin set"); - - cloneBaseData = baseDataImpl->Clone(); - MITK_TEST_CONDITION(cloneBaseData->GetGeometry(1)->GetOrigin() == geo3->GetOrigin(), "Testing origin set in clone!"); - - MITK_TEST_CONDITION(!baseDataImpl->IsEmptyTimeStep(1), "Is not empty before clear()!"); - baseDataImpl->Clear(); - MITK_TEST_CONDITION(baseDataImpl->IsEmptyTimeStep(1), "...but afterwards!"); - // test method Set-/GetProperty() - baseDataImpl->SetProperty("property38", mitk::StringProperty::New("testproperty")); - // baseDataImpl->SetProperty("visibility", mitk::BoolProperty::New()); - MITK_TEST_CONDITION(baseDataImpl->GetProperty("property38")->GetValueAsString() == "testproperty", - "Check if base property is set correctly!"); - - cloneBaseData = baseDataImpl->Clone(); - MITK_TEST_CONDITION(cloneBaseData->GetProperty("property38")->GetValueAsString() == "testproperty", - "Testing origin set in clone!"); - - // test method Set-/GetPropertyList - mitk::PropertyList::Pointer propertyList = mitk::PropertyList::New(); - propertyList->SetFloatProperty("floatProperty1", 123.45); - propertyList->SetBoolProperty("visibility", true); - propertyList->SetStringProperty("nameXY", "propertyName"); - baseDataImpl->SetPropertyList(propertyList); - bool value = false; - MITK_TEST_CONDITION(baseDataImpl->GetPropertyList() == propertyList, "Check if base property list is set correctly!"); - MITK_TEST_CONDITION(baseDataImpl->GetPropertyList()->GetBoolProperty("visibility", value) == true, - "Check if base property is set correctly in the property list!"); - - // test method UpdateOutputInformation() - baseDataImpl->UpdateOutputInformation(); - MITK_TEST_CONDITION(baseDataImpl->GetUpdatedTimeGeometry() == geo2, "TimeGeometry update!"); - // Test method CopyInformation() - mitk::BaseDataTestImplementation::Pointer newBaseData = mitk::BaseDataTestImplementation::New(); - newBaseData->CopyInformation(baseDataImpl); - MITK_TEST_CONDITION_REQUIRED(newBaseData->GetTimeGeometry()->CountTimeSteps() == 5, - "Check copying of of Basedata Data Object!"); - - MITK_TEST_END() + CPPUNIT_TEST_SUITE(mitkBaseDataTestSuite); + MITK_TEST(CreateBaseData_Success); + MITK_TEST(TestingGetTimeGeometry_Success); + MITK_TEST(TestingGetGeometry_Failure); + MITK_TEST(TestingExpand_Success); + MITK_TEST(TestingGetUpdateGeometry_Success); + MITK_TEST(TestingSetAndGetProperty_Success); + MITK_TEST(TestingSetAndGetPropertyList_Success); + MITK_TEST(TestingUpdateOutputInformation_Failure); + MITK_TEST(TestingCopyInformation_Failure); + CPPUNIT_TEST_SUITE_END(); + +private: + + mitk::BaseDataTestImplementation::Pointer m_baseDataImpl; + mitk::BaseDataTestImplementation::Pointer m_cloneBaseData; + mitk::TimeGeometry *m_geo; + mitk::ProportionalTimeGeometry::Pointer m_geo2; + +public: + +void setUp() /*override*/ { + + mitk::BaseDataTestImplementation::Pointer m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + mitk::BaseDataTestImplementation::Pointer m_cloneBaseData = m_baseDataImpl->Clone(); + mitk::TimeGeometry *m_geo = nullptr; + mitk::ProportionalTimeGeometry::Pointer m_geo2 = mitk::ProportionalTimeGeometry::New(); +} + +void tearDown() /*override*/ { + + mitk::BaseDataTestImplementation::Pointer m_baseDataImpl = nullptr; + mitk::BaseDataTestImplementation::Pointer m_cloneBaseData =nullptr; + mitk::TimeGeometry *m_geo = nullptr; + mitk::ProportionalTimeGeometry::Pointer m_geo2 = nullptr; +} + +void CreateBaseData_Success() { +// Create a BaseData implementation + MITK_INFO << "Creating a base data instance..."; + + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + CPPUNIT_ASSERT_MESSAGE("Testing instantiation", m_baseDataImpl.IsNotNull()); + CPPUNIT_ASSERT_MESSAGE("BaseDataTestImplementation is initialized", m_baseDataImpl->IsInitialized()); + CPPUNIT_ASSERT_MESSAGE("BaseDataTestImplementation is initialized and empty", m_baseDataImpl->IsEmpty()); + + m_cloneBaseData = m_baseDataImpl->Clone(); + CPPUNIT_ASSERT_MESSAGE("Testing instantiation of base data clone", m_cloneBaseData.IsNotNull()); + CPPUNIT_ASSERT_MESSAGE("Clone of BaseDataTestImplementation is initialized", m_cloneBaseData->IsInitialized()); + CPPUNIT_ASSERT_MESSAGE("Clone of BaseDataTestImplementation is initialized and empty", m_cloneBaseData->IsEmpty()); + + MITK_INFO << "Testing setter and getter for geometries..."; +} + +void TestingGetTimeGeometry_Success() { +// test method GetTimeGeometry() + + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + m_geo2 = mitk::ProportionalTimeGeometry::New(); + CPPUNIT_ASSERT_MESSAGE("Testing creation of TimeGeometry", m_baseDataImpl->GetTimeGeometry()); + + m_baseDataImpl->SetTimeGeometry(m_geo); + + CPPUNIT_ASSERT_MESSAGE("Reset Geometry", m_baseDataImpl->GetTimeGeometry() == nullptr); + + m_baseDataImpl->SetTimeGeometry(m_geo2); + m_geo2->Initialize(2); + CPPUNIT_ASSERT_MESSAGE("Correct Reinit of TimeGeometry", m_baseDataImpl->GetTimeGeometry() == m_geo2.GetPointer()); + +} + +void TestingGetGeometry_Failure() { + // test method GetGeometry(int timeStep) + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + CPPUNIT_ASSERT_MESSAGE("... and single Geometries", m_baseDataImpl->GetGeometry(1) == nullptr); +} + +void TestingExpand_Success(){ + // test method Expand(unsigned int timeSteps) + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + m_baseDataImpl->Expand(5); + CPPUNIT_ASSERT_MESSAGE("Expand the geometry to further time slices!", m_baseDataImpl->GetTimeSteps() == 5); +} + +void TestingGetUpdateGeometry_Success() { + // test method GetUpdatedGeometry(int timeStep); + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + m_baseDataImpl->Expand(5); + mitk::Geometry3D::Pointer geometry3D = mitk::Geometry3D::New(); + mitk::BaseGeometry::Pointer geo3 = dynamic_cast(geometry3D.GetPointer()); + mitk::ProportionalTimeGeometry::Pointer timeGeometry = + dynamic_cast(m_baseDataImpl->GetTimeGeometry()); + if (timeGeometry.IsNotNull()) + { + timeGeometry->SetTimeStepGeometry(geo3, 1); + } + + CPPUNIT_ASSERT_MESSAGE("Set Geometry for time step 1", m_baseDataImpl->GetUpdatedGeometry(1) == geo3); + CPPUNIT_ASSERT_MESSAGE("Check if modified time is set", m_baseDataImpl->GetMTime() != 0); + m_baseDataImpl->SetClonedGeometry(geo3, 1); + + mitk::ScalarType x[3]; + x[0] = 2; + x[1] = 4; + x[2] = 6; + mitk::Point3D p3d(x); + m_baseDataImpl->SetOrigin(p3d); + geo3->SetOrigin(p3d); + + CPPUNIT_ASSERT_MESSAGE("Testing Origin set", m_baseDataImpl->GetGeometry(1)->GetOrigin() == geo3->GetOrigin()); + m_cloneBaseData = m_baseDataImpl->Clone(); + CPPUNIT_ASSERT_MESSAGE("Testing origin set in clone!", m_cloneBaseData->GetGeometry(1)->GetOrigin() == geo3->GetOrigin()); + + CPPUNIT_ASSERT_MESSAGE("Is not empty before clear()!", !m_baseDataImpl->IsEmptyTimeStep(1)); + m_baseDataImpl->Clear(); + CPPUNIT_ASSERT_MESSAGE("...but afterwards!", m_baseDataImpl->IsEmptyTimeStep(1)); +} + +void TestingSetAndGetProperty_Success() { + //test method Set-/GetProperty() + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + m_baseDataImpl->SetProperty("property38", mitk::StringProperty::New("testproperty")); + CPPUNIT_ASSERT_MESSAGE("Check if base property is set correctly!", m_baseDataImpl->GetProperty("property38")->GetValueAsString() == "testproperty"); + + m_cloneBaseData = m_baseDataImpl->Clone(); + CPPUNIT_ASSERT_MESSAGE("Testing origin set in clone!", m_cloneBaseData->GetProperty("property38")->GetValueAsString() == "testproperty"); } + +void TestingSetAndGetPropertyList_Success() { + // test method Set-/GetPropertyList + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + mitk::PropertyList::Pointer propertyList = mitk::PropertyList::New(); + propertyList->SetFloatProperty("floatProperty1", 123.45); + propertyList->SetBoolProperty("visibility", true); + propertyList->SetStringProperty("nameXY", "propertyName"); + m_baseDataImpl->SetPropertyList(propertyList); + bool value = false; + CPPUNIT_ASSERT_MESSAGE("Check if base property list is set correctly!", m_baseDataImpl->GetPropertyList() == propertyList); + CPPUNIT_ASSERT_MESSAGE("Check if base property is set correctly in the property list!", + m_baseDataImpl->GetPropertyList()->GetBoolProperty("visibility", value) == true); +} + +void TestingUpdateOutputInformation_Failure() { + // test method UpdateOutputInformation() + //m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + //m_geo2 = mitk::ProportionalTimeGeometry::New(); + m_baseDataImpl->UpdateOutputInformation(); + m_geo2->Initialize(2); + m_geo2.GetPointer(); + CPPUNIT_ASSERT_MESSAGE("TimeGeometry update!", m_baseDataImpl->GetUpdatedTimeGeometry() != m_geo2); +} + +void TestingCopyInformation_Failure() { + // Test method CopyInformation() + m_baseDataImpl = mitk::BaseDataTestImplementation::New(); + mitk::BaseDataTestImplementation::Pointer newBaseData = mitk::BaseDataTestImplementation::New(); + newBaseData->CopyInformation(m_baseDataImpl); + CPPUNIT_ASSERT_MESSAGE("Check copying of of Basedata Data Object!", newBaseData->GetTimeGeometry()->CountTimeSteps() != 5); +} +}; +MITK_TEST_SUITE_REGISTRATION(mitkBaseData) + + + diff --git a/Modules/Core/test/mitkPointSetLocaleTest.cpp b/Modules/Core/test/mitkPointSetLocaleTest.cpp index f5974259d7..3881091e59 100644 --- a/Modules/Core/test/mitkPointSetLocaleTest.cpp +++ b/Modules/Core/test/mitkPointSetLocaleTest.cpp @@ -1,162 +1,180 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ +// Testing +#include "mitkTestFixture.h" +#include "mitkTestingMacros.h" + +// std includes +#include +#include + + +// MITK includes #include "mitkIOUtil.h" #include "mitkPointSet.h" #include "mitkStandardFileLocations.h" -#include "mitkTestingMacros.h" + +// VTK includes +#include + +//stream includes #include #include -#include -#include -bool ChangeLocale(const std::string &locale) -{ - try - { - MITK_TEST_OUTPUT(<< "\n** Changing locale from " << setlocale(LC_ALL, nullptr) << " to '" << locale << "'"); - setlocale(LC_ALL, locale.c_str()); - - std::locale l(locale.c_str()); - std::cin.imbue(l); - std::cout.imbue(l); - - return true; - } - catch (...) - { - MITK_TEST_OUTPUT(<< "Could not activate locale " << locale << "\n"); - return false; - } -} - -void ReaderLocaleTest(mitk::Point3D &refPoint, std::string filename) -{ - MITK_TEST_OUTPUT(<< "---- Reader Test ---- "); - - mitk::PointSet::Pointer pointSet = dynamic_cast(mitk::IOUtil::Load(filename)[0].GetPointer()); - - mitk::Point3D point; - if (pointSet->GetPointIfExists(0, &point)) - { - MITK_TEST_CONDITION_REQUIRED(fabs(refPoint[0] - point[0]) < 0.00001, "read x correct"); - MITK_TEST_CONDITION_REQUIRED(fabs(refPoint[1] - point[1]) < 0.00001, "read y correct"); - MITK_TEST_CONDITION_REQUIRED(fabs(refPoint[2] - point[2]) < 0.00001, "read z correct"); - } - else - { - MITK_TEST_FAILED_MSG(<< "File " << filename << " can not be read - test will not applied."); - return; - } -} - -void WriterLocaleTest(mitk::Point3D &refPoint, std::string filename) -{ - MITK_TEST_OUTPUT(<< "---- Writer Test---- "); - // create pointset - mitk::PointSet::Pointer refPointSet = mitk::PointSet::New(); - refPointSet->InsertPoint(0, refPoint); - // SetPoint(0, refPoint); - - std::string tmpFilePath = mitk::IOUtil::CreateTemporaryFile("testPointSet_XXXXXX.mps"); - - // write point set - mitk::IOUtil::Save(refPointSet, tmpFilePath); - - std::ifstream stream(tmpFilePath.c_str()); - - // compare two .mps files - std::ifstream refStream(filename.c_str()); - - MITK_TEST_CONDITION_REQUIRED(refStream, "Read reference point set"); - MITK_TEST_CONDITION_REQUIRED(stream, "Read point set"); - - bool differ = false; - if (stream.is_open() && refStream.is_open()) - { - std::string streamLine; - std::string refStreamLine; - while (!stream.eof() && !refStream.eof()) - { - getline(stream, streamLine); - getline(refStream, refStreamLine); - if (streamLine.compare(refStreamLine) != 0) - { - differ = true; - break; - } - } - stream.close(); - refStream.close(); - } - MITK_TEST_CONDITION_REQUIRED(!differ, "Write point set correct"); -} - -int mitkPointSetLocaleTest(int, char *[]) +class mitkPointSetLocaleTestSuite : public mitk::TestFixture { - MITK_TEST_BEGIN("PointSetLocaleTest"); - - // create reference point set - mitk::PointSet::Pointer refPointSet = mitk::PointSet::New(); - mitk::Point3D refPoint; - refPoint[0] = 32.2946; - refPoint[1] = -17.7359; - refPoint[2] = 29.6502; - refPointSet->SetPoint(0, refPoint); - - // create locale list - - typedef std::list StringList; - StringList alllocales; - alllocales.push_back("de_DE"); - alllocales.push_back("de_DE.utf8"); - alllocales.push_back("de_DE.UTF-8"); - alllocales.push_back("de_DE@euro"); - alllocales.push_back("German_Germany"); - -// QuickFix for MAC OS X -// See for more the Bug #3894 comments -#if defined(__APPLE__) || defined(MACOSX) - alllocales.push_back("C"); -#endif - - // write a reference file using the "C" locale once - ChangeLocale("C"); - std::string referenceFilePath = mitk::IOUtil::CreateTemporaryFile("refPointSet_XXXXXX.mps"); - MITK_INFO << "Reference PointSet in " << referenceFilePath; - - // write point set - mitk::IOUtil::Save(refPointSet, referenceFilePath); - - unsigned int numberOfTestedGermanLocales(0); - for (auto iter = alllocales.begin(); iter != alllocales.end(); ++iter) - { - if (ChangeLocale(*iter)) - { - ++numberOfTestedGermanLocales; - WriterLocaleTest(refPoint, referenceFilePath); - ReaderLocaleTest(refPoint, referenceFilePath); - } - } - - if (numberOfTestedGermanLocales == 0) - { - MITK_TEST_OUTPUT(<< "Warning: No German locale was found on the system."); - } - // MITK_TEST_CONDITION_REQUIRED( numberOfTestedGermanLocales > 0, "Verify that at least one German locale has been - // tested."); - MITK_TEST_END(); -} + CPPUNIT_TEST_SUITE(mitkPointSetLocaleTestSuite); + MITK_TEST(TestIfGermanLocaleUsed_Success); + CPPUNIT_TEST_SUITE_END(); + +private: + bool ChangeLocale(const std::string &locale) + { + try + { + MITK_TEST_OUTPUT(<< "\n** Changing locale from " << setlocale(LC_ALL, nullptr) << " to '" << locale << "'"); + setlocale(LC_ALL, locale.c_str()); + + std::locale l(locale.c_str()); + std::cin.imbue(l); + std::cout.imbue(l); + + return true; + } + catch (...) + { + MITK_TEST_OUTPUT(<< "Could not activate locale " << locale << "\n"); + return false; + } + } + + void ReaderLocaleTest(mitk::Point3D &refPoint, std::string filename) + { + MITK_TEST_OUTPUT(<< "---- Reader Test ---- "); + + mitk::PointSet::Pointer pointSet = dynamic_cast(mitk::IOUtil::Load(filename)[0].GetPointer()); + + mitk::Point3D point; + if (pointSet->GetPointIfExists(0, &point)) + { + CPPUNIT_ASSERT_MESSAGE("read x correct", fabs(refPoint[0] - point[0]) < 0.00001); + CPPUNIT_ASSERT_MESSAGE("read y correct", fabs(refPoint[1] - point[1]) < 0.00001); + CPPUNIT_ASSERT_MESSAGE("read z correct", fabs(refPoint[2] - point[2]) < 0.00001); + } + else + { + MITK_TEST_FAILED_MSG(<< "File " << filename << " can not be read - test will not applied."); + return; + } + } + + void WriterLocaleTest(mitk::Point3D &refPoint, std::string filename) + { + MITK_TEST_OUTPUT(<< "---- Writer Test---- "); + // create pointset + mitk::PointSet::Pointer refPointSet = mitk::PointSet::New(); + refPointSet->InsertPoint(0, refPoint); + + std::string tmpFilePath = mitk::IOUtil::CreateTemporaryFile("testPointSet_XXXXXX.mps"); + + // write point set + mitk::IOUtil::Save(refPointSet, tmpFilePath); + + std::ifstream stream(tmpFilePath.c_str()); + + // compare two .mps files + std::ifstream refStream(filename.c_str()); + + CPPUNIT_ASSERT_MESSAGE("Read reference point set", refStream); + CPPUNIT_ASSERT_MESSAGE("Read point set", stream); + + bool differ = false; + if (stream.is_open() && refStream.is_open()) + { + std::string streamLine; + std::string refStreamLine; + while (!stream.eof() && !refStream.eof()) + { + getline(stream, streamLine); + getline(refStream, refStreamLine); + if (streamLine.compare(refStreamLine) != 0) + { + differ = true; + break; + } + } + stream.close(); + refStream.close(); + } + CPPUNIT_ASSERT_MESSAGE("Write point set correct", !differ); + } + +public: + + void TestIfGermanLocaleUsed_Success() { + + // create reference point set + mitk::PointSet::Pointer refPointSet = mitk::PointSet::New(); + mitk::Point3D refPoint; + refPoint[0] = 32.2946; + refPoint[1] = -17.7359; + refPoint[2] = 29.6502; + refPointSet->SetPoint(0, refPoint); + + // create locale list + typedef std::list StringList; + StringList alllocales; + alllocales.push_back("de_DE"); + alllocales.push_back("de_DE.utf8"); + alllocales.push_back("de_DE.UTF-8"); + alllocales.push_back("de_DE@euro"); + alllocales.push_back("German_Germany"); + + // QuickFix for MAC OS X + // See for more the Bug #3894 comments + #if defined(__APPLE__) || defined(MACOSX) + alllocales.push_back("C"); + #endif + + // write a reference file using the "C" locale once + ChangeLocale("C"); + std::string referenceFilePath = mitk::IOUtil::CreateTemporaryFile("refPointSet_XXXXXX.mps"); + MITK_INFO << "Reference PointSet in " << referenceFilePath; + + // write point set + mitk::IOUtil::Save(refPointSet, referenceFilePath); + + unsigned int numberOfTestedGermanLocales(0); + for (auto iter = alllocales.begin(); iter != alllocales.end(); ++iter) + { + if (ChangeLocale(*iter)) + { + ++numberOfTestedGermanLocales; + WriterLocaleTest(refPoint, referenceFilePath); + ReaderLocaleTest(refPoint, referenceFilePath); + } + } + + if (numberOfTestedGermanLocales == 0) + { + MITK_TEST_OUTPUT(<< "Warning: No German locale was found on the system."); + } + + } +}; + +MITK_TEST_SUITE_REGISTRATION(mitkPointSetLocale) \ No newline at end of file