void PersistenceTest()
  {
    // dummy load of SceneIO, otherwise PersistenceService won't be available
    mitk::PersistenceService::LoadModule();

    PERSISTENCE_GET_SERVICE_MACRO
    CPPUNIT_ASSERT_MESSAGE("Testing availability of the PersistenceService.", persistenceService != NULL);

    // Initialize testable parameter values
    std::string defaultPersistenceFile = persistenceService->GetDefaultPersistenceFile();
    PersistenceTestClass autoLoadTestClass;
    autoLoadTestClass.id = testClassId;
    if (itksys::SystemTools::FileExists(defaultPersistenceFile.c_str(), true) &&
        persistenceService->GetAutoLoadAndSave())
    {
      /// Test auto load/save of the PersistenceService.
      itksys::SystemTools::RemoveFile(defaultPersistenceFile.c_str());
      autoLoadTestClass.FromPropertyList();
      testParams(autoLoadTestClass, "autoLoadTestClass");
    }

    std::string testTempFile = mitk::IOUtil::CreateTemporaryFile("XXXXXX.mitk");
    std::string testXmlTempFile = mitk::IOUtil::CreateTemporaryFile("PersistenceTestFileXXXXXX.xml");

    MITK_INFO << "Testing standard write to scene file/xml file.";
    PersistenceTestClass testClass;
    testClass.id = testClassId;
    testClass.param1 = param1;
    testClass.param2 = param2;
    testClass.param3 = param3;
    CPPUNIT_ASSERT_MESSAGE("Testing to save a scene file", testClass.Save(testTempFile));
    CPPUNIT_ASSERT_MESSAGE("testing to save an xml file", testClass.Save(testXmlTempFile));

    CPPUNIT_ASSERT_MESSAGE("Testing read from scene file: persistenceService->RemovePropertyList(testClassId)",
                           persistenceService->RemovePropertyList(testClassId));
    PersistenceTestClass testClass2;
    testClass2.id = testClassId;
    CPPUNIT_ASSERT_MESSAGE("Testing read from scene file: testClass2.Load(testTempFile.path())",
                           testClass2.Load(testTempFile));

    testParams(testClass2, "testClass2");

    CPPUNIT_ASSERT_MESSAGE("Testing read from xml file: persistenceService->RemovePropertyList(testClassId)",
                           persistenceService->RemovePropertyList(testClassId));
    PersistenceTestClass testClass3;
    testClass3.id = testClassId;
    CPPUNIT_ASSERT_MESSAGE("Testing read from xml file: testClass3.Load(testXmlTempFile.path())",
                           testClass3.Load(testXmlTempFile));

    testParams(testClass3, "testClass3");

    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with scene load/write: persistenceService->RemovePropertyList(testClassId)",
      persistenceService->RemovePropertyList(testClassId));
    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with scene load/write: persistenceService->Save(testTempFile.path())",
      persistenceService->Save(testTempFile, true));
    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with scene load/write: persistenceService->Load(testTempFile.path())",
      persistenceService->Load(testTempFile));

    PersistenceTestClass testClass4;
    testClass4.id = testClassId;
    testClass4.FromPropertyList();
    testParams(testClass4, "testClass4");

    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with xml load/write: persistenceService->RemovePropertyList(testClassId)",
      persistenceService->RemovePropertyList(testClassId));
    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with xml load/write: persistenceService->Save(testXmlTempFile.path())",
      persistenceService->Save(testXmlTempFile, true));
    CPPUNIT_ASSERT_MESSAGE(
      "Testing appendChanges functionality with xml load/write: persistenceService->Load(testXmlTempFile.path())",
      persistenceService->Load(testXmlTempFile));

    PersistenceTestClass testClass5;
    testClass5.id = testClassId;
    testClass5.FromPropertyList();
    testParams(testClass5, "testClass5");

    // Test Observer Functionality
    TestPropertyListReplacedObserver testObserver;
    testObserver.m_Id = testClassId;
    persistenceService->AddPropertyListReplacedObserver(&testObserver);
    persistenceService->Load(testTempFile);
    CPPUNIT_ASSERT_MESSAGE(
      "Testing observer functionality: testObserver.counter == 2, testObserver.counter is " + testObserver.counter,
      testObserver.counter == 2);

    autoLoadTestClass.param1 = param1;
    autoLoadTestClass.param2 = param2;
    autoLoadTestClass.param3 = param3;
    autoLoadTestClass.ToPropertyList();
  }
Beispiel #2
0
int mitkPersistenceTest(int /*argc*/, char* /*argv*/[])
{
    MITK_TEST_BEGIN("PersistenceTest")
    // dummy load of SceneIO, otherwise PersistenceService won't be available
    //mitk::PersistenceService::LoadModule();

    MITK_INFO << "Testing availability of the PersistenceService.";
    PERSISTENCE_GET_SERVICE_MACRO
    MITK_TEST_CONDITION_REQUIRED(persistenceService, "IPersistenceService available")

    MITK_INFO << "Initialize testable parameter values.";

    Poco::File defaultPersistenceFile(persistenceService->GetDefaultPersistenceFile());
    PersistenceTestClass autoLoadTestClass;
    autoLoadTestClass.id = testClassId;
    if( defaultPersistenceFile.exists() && persistenceService->GetAutoLoadAndSave() )
    {
        MITK_INFO << "Testing auto load/save of the PersistenceService.";
        defaultPersistenceFile.remove();
        autoLoadTestClass.FromPropertyList();

        testParams( autoLoadTestClass, "autoLoadTestClass" );
    }

    MITK_INFO << "Removing left-over test files.";
    Poco::File testTempFile("PersistenceTestFile.mitk");
    if( testTempFile.exists() )
        testTempFile.remove(false);

    Poco::File testXmlTempFile("PersistenceTestFile.xml");
    if( testXmlTempFile.exists() )
        testXmlTempFile.remove(false);

    MITK_INFO << "Testing standard write to scene file/xml file.";
    PersistenceTestClass testClass;
    testClass.id = testClassId;
    testClass.param1 = param1;
    testClass.param2 = param2;
    testClass.param3 = param3;
    MITK_TEST_CONDITION_REQUIRED( testClass.Save(testTempFile.path()), "testClass.Save(testTempFile.path())");
    MITK_TEST_CONDITION_REQUIRED( testClass.Save(testXmlTempFile.path()), "testClass.Save(testTempFile.path())");

    MITK_INFO << "Testing read from scene file.";
    MITK_TEST_CONDITION_REQUIRED( persistenceService->RemovePropertyList(testClassId), "persistenceService->RemovePropertyList(testClassId)");
    PersistenceTestClass testClass2;
    testClass2.id = testClassId;
    MITK_TEST_CONDITION_REQUIRED( testClass2.Load(testTempFile.path()), "testClass2.Load(testTempFile.path())");

    testParams( testClass2, "testClass2" );

    MITK_INFO << "Testing read from xml file.";
    MITK_TEST_CONDITION_REQUIRED( persistenceService->RemovePropertyList(testClassId), "persistenceService->RemovePropertyList(testClassId)");
    PersistenceTestClass testClass3;
    testClass3.id = testClassId;
    MITK_TEST_CONDITION_REQUIRED( testClass3.Load(testXmlTempFile.path()), "testClass3.Load(testXmlTempFile.path())");

    testParams( testClass3, "testClass3" );

    MITK_INFO << "Testing appendChanges functionality with scene load/write.";
    MITK_TEST_CONDITION_REQUIRED( persistenceService->RemovePropertyList(testClassId), "persistenceService->RemovePropertyList(testClassId)");
    MITK_TEST_CONDITION_REQUIRED( persistenceService->Save(testTempFile.path(), true), "persistenceService->Save(testTempFile.path())");
    MITK_TEST_CONDITION_REQUIRED( persistenceService->Load(testTempFile.path()), "persistenceService->Load(testTempFile.path())");

    PersistenceTestClass testClass4;
    testClass4.id = testClassId;
    testClass4.FromPropertyList();
    testParams( testClass4, "testClass4" );

    MITK_INFO << "Testing appendChanges functionality with xml load/write.";
    MITK_TEST_CONDITION_REQUIRED( persistenceService->RemovePropertyList(testClassId), "persistenceService->RemovePropertyList(testClassId)");
    MITK_TEST_CONDITION_REQUIRED( persistenceService->Save(testXmlTempFile.path(), true), "persistenceService->Save(testXmlTempFile.path())");
    MITK_TEST_CONDITION_REQUIRED( persistenceService->Load(testXmlTempFile.path()), "persistenceService->Load(testXmlTempFile.path())");

    PersistenceTestClass testClass5;
    testClass5.id = testClassId;
    testClass5.FromPropertyList();
    testParams( testClass5, "testClass5" );

    MITK_INFO << "Testing observer functionality.";
    TestPropertyListReplacedObserver testObserver;
    testObserver.m_Id = testClassId;
    persistenceService->AddPropertyListReplacedObserver( &testObserver );
    persistenceService->Load(testTempFile.path());
    MITK_TEST_CONDITION( testObserver.counter == 2, "testObserver.counter == 2, testObserver.counter is " << testObserver.counter );

    MITK_INFO << "Cleaning test files.";
    if( testXmlTempFile.exists() )
        testXmlTempFile.remove(false);
    if( testTempFile.exists() )
        testTempFile.remove(false);

    autoLoadTestClass.param1 = param1;
    autoLoadTestClass.param2 = param2;
    autoLoadTestClass.param3 = param3;
    autoLoadTestClass.ToPropertyList();
    MITK_TEST_END()
}