#include "mitkTestingMacros.h"#include "mitkTestingConfig.h"#include "mitkSceneIO.h"#include "mitkStandaloneDataStorage.h"#include "mitkStandardFileLocations.h"#include "mitkDataNodeFactory.h"#include "mitkCoreObjectFactory.h"#include "mitkBaseData.h"#include "mitkImage.h"#include "mitkSurface.h"#include "mitkPointSet.h"#include "Poco/File.h"#include "Poco/TemporaryFile.h"#include <ulimit.h>#include <errno.h>Go to the source code of this file.
Classes | |
| class | SceneIOTestClass |
Functions | |
| int | mitkSceneIOTest (int, char *[]) |
| int mitkSceneIOTest | ( | int | , |
| char * | [] | ||
| ) |
Definition at line 213 of file mitkSceneIOTest.cpp.
References SceneIOTestClass::FillStorage(), mitk::TestManager::GetInstance(), MITK_TEST_BEGIN, MITK_TEST_CONDITION_REQUIRED, MITK_TEST_END, MITK_TEST_OUTPUT, MITK_TEST_OUTPUT_DIR, MITK_TEST_OUTPUT_NO_ENDL, mitk::StandaloneDataStorage::New(), mitk::SceneIO::New(), and SceneIOTestClass::VerifyStorage().
{
MITK_TEST_BEGIN("SceneIO")
std::string sceneFileName;
for (unsigned int i = 0; i < 1; ++i) // TODO change to " < 2" to check cases where file system would be full
{
if (i == 1)
{
// call ulimit and restrict maximum file size to something small
#ifndef WIN32
errno = 0;
long int value = ulimit(UL_SETFSIZE, 1);
MITK_TEST_CONDITION_REQUIRED( value != -1, "ulimit() returned with errno = " << errno );
#else
continue;
#endif
}
// create a data storage and fill it with some test data
mitk::SceneIO::Pointer sceneIO = mitk::SceneIO::New();
MITK_TEST_CONDITION_REQUIRED(sceneIO.IsNotNull(),"SceneIO instantiation")
mitk::DataStorage::Pointer storage = mitk::StandaloneDataStorage::New().GetPointer();
MITK_TEST_CONDITION_REQUIRED(storage.IsNotNull(),"StandaloneDataStorage instantiation");
SceneIOTestClass::FillStorage(storage);
// attempt to save it
Poco::Path newname( Poco::TemporaryFile::tempName() );
sceneFileName = std::string( MITK_TEST_OUTPUT_DIR ) + Poco::Path::separator() + newname.getFileName() + ".zip";
MITK_TEST_CONDITION_REQUIRED( sceneIO->SaveScene( storage->GetAll(), storage, sceneFileName), "Saving scene file '" << sceneFileName << "'");
// test if no errors were reported
mitk::SceneIO::FailedBaseDataListType::ConstPointer failedNodes = sceneIO->GetFailedNodes();
if (failedNodes.IsNotNull() && !failedNodes->empty())
{
MITK_TEST_OUTPUT( << "The following nodes could not be serialized:");
for ( mitk::SceneIO::FailedBaseDataListType::const_iterator iter = failedNodes->begin();
iter != failedNodes->end();
++iter )
{
MITK_TEST_OUTPUT_NO_ENDL( << " - ");
if ( mitk::BaseData* data =(*iter)->GetData() )
{
MITK_TEST_OUTPUT_NO_ENDL( << data->GetNameOfClass());
}
else
{
MITK_TEST_OUTPUT_NO_ENDL( << "(NULL)");
}
MITK_TEST_OUTPUT( << " contained in node '" << (*iter)->GetName() << "'");
// \TODO: should we fail the test case if failed properties exist?
}
}
mitk::PropertyList::ConstPointer failedProperties = sceneIO->GetFailedProperties();
if (failedProperties.IsNotNull() && !failedProperties->IsEmpty())
{
MITK_TEST_OUTPUT( << "The following properties could not be serialized:");
const mitk::PropertyList::PropertyMap* propmap = failedProperties->GetMap();
for ( mitk::PropertyList::PropertyMap::const_iterator iter = propmap->begin();
iter != propmap->end();
++iter )
{
MITK_TEST_OUTPUT( << " - " << iter->second.first->GetNameOfClass() << " associated to key '" << iter->first << "'");
// \TODO: should we fail the test case if failed properties exist?
}
}
MITK_TEST_CONDITION_REQUIRED(failedProperties.IsNotNull() && failedProperties->IsEmpty(), "Checking if all properties have been saved.")
MITK_TEST_CONDITION_REQUIRED(failedNodes.IsNotNull() && failedNodes->empty(), "Checking if all nodes have been saved.")
//Now do the loading part
sceneIO = mitk::SceneIO::New();
//Load scene into the datastorage and clean the DS first
MITK_TEST_OUTPUT(<< "Loading scene again");
storage = sceneIO->LoadScene(sceneFileName,storage,true);
// test if no errors were reported
failedNodes = sceneIO->GetFailedNodes();
if (failedNodes.IsNotNull() && !failedNodes->empty())
{
MITK_TEST_OUTPUT( << "The following nodes could not be serialized:");
for ( mitk::SceneIO::FailedBaseDataListType::const_iterator iter = failedNodes->begin();
iter != failedNodes->end();
++iter )
{
MITK_TEST_OUTPUT_NO_ENDL( << " - ");
if ( mitk::BaseData* data =(*iter)->GetData() )
{
MITK_TEST_OUTPUT_NO_ENDL( << data->GetNameOfClass());
}
else
{
MITK_TEST_OUTPUT_NO_ENDL( << "(NULL)");
}
MITK_TEST_OUTPUT( << " contained in node '" << (*iter)->GetName() << "'");
// \TODO: should we fail the test case if failed properties exist?
}
}
failedProperties = sceneIO->GetFailedProperties();
if (failedProperties.IsNotNull() && !failedProperties->IsEmpty())
{
MITK_TEST_OUTPUT( << "The following properties could not be serialized:");
const mitk::PropertyList::PropertyMap* propmap = failedProperties->GetMap();
for ( mitk::PropertyList::PropertyMap::const_iterator iter = propmap->begin();
iter != propmap->end();
++iter )
{
MITK_TEST_OUTPUT( << " - " << iter->second.first->GetNameOfClass() << " associated to key '" << iter->first << "'");
// \TODO: should we fail the test case if failed properties exist?
}
}
// check if data storage content has been restored correctly
SceneIOTestClass::VerifyStorage(storage);
}
// if no sub-test failed remove the scene file, otherwise it is kept for debugging purposes
if ( mitk::TestManager::GetInstance()->NumberOfFailedTests() == 0 )
{
Poco::File pocoSceneFile( sceneFileName );
MITK_TEST_CONDITION_REQUIRED( pocoSceneFile.exists(), "Checking if scene file still exists before cleaning up." )
pocoSceneFile.remove();
}
MITK_TEST_END();
}
1.7.2