TEST(FilePersistence, LoadMultipleUnits) { QString testDir = ":/FilePersistence/test/persisted"; Model::Model model; FileStore store; store.setBaseFolder(testDir); model.load(&store, "units"); TestNodes::BinaryNode* root = dynamic_cast<TestNodes::BinaryNode*> (model.root()); CHECK_STR_EQUAL("BinaryNode", root->typeName() ); CHECK_STR_EQUAL("Root", root->name()->get() ); CHECK_CONDITION(root->left() != nullptr); CHECK_CONDITION(root->right() != nullptr); CHECK_STR_EQUAL("BinaryNodePersistenceUnit", root->left()->typeName() ); CHECK_STR_EQUAL("Left child", root->left()->name()->get() ); CHECK_CONDITION(root->left()->left() != nullptr); CHECK_CONDITION(root->left()->right() == nullptr); CHECK_STR_EQUAL("BinaryNode", root->left()->left()->typeName() ); CHECK_STR_EQUAL("in a new unit", root->left()->left()->name()->get() ); CHECK_CONDITION(root->left()->left()->left() == nullptr); CHECK_CONDITION(root->left()->left()->right() == nullptr); CHECK_STR_EQUAL("BinaryNode", root->right()->typeName() ); CHECK_STR_EQUAL("Right child", root->right()->name()->get() ); CHECK_CONDITION(root->right()->left() == nullptr); CHECK_CONDITION(root->right()->right() == nullptr); }
TEST(FilePersistence, LoadRootOnly) { QString testDir = ":/FilePersistence/test/persisted"; Model::Model model; FileStore store; store.setBaseFolder(testDir); model.load(&store, "rootOnly"); TestNodes::BinaryNode* root = dynamic_cast<TestNodes::BinaryNode*> (model.root()); CHECK_CONDITION(root); CHECK_STR_EQUAL("BinaryNode", root->typeName() ); CHECK_STR_EQUAL("Title", root->name()->get() ); CHECK_CONDITION(root->left() == nullptr); CHECK_CONDITION(root->right() == nullptr); }
TEST(FilePersistence, LoadingList) { QString testDir = ":/FilePersistence/test/persisted"; Model::Model model; FileStore store; store.setBaseFolder(testDir); model.load(&store, "partial"); TestNodes::PartialList* root = dynamic_cast<TestNodes::PartialList*> (model.root()); CHECK_CONDITION(root != nullptr); Model::List* list = root->list(); CHECK_CONDITION(list != nullptr); CHECK_STR_EQUAL("List", list->typeName() ); CHECK_CONDITION(list->isFullyLoaded() == false); CHECK_INT_EQUAL(1, list->id()); list->loadFully(store); CHECK_CONDITION(list->isFullyLoaded()); CHECK_INT_EQUAL(4, list->size()); Model::Text* one = list->at<Model::Text>(0); Model::Text* two = list->at<Model::Text>(1); Model::Text* three = list->at<Model::Text>(2); Model::Text* four = list->at<Model::Text>(3); CHECK_CONDITION(one != nullptr); CHECK_STR_EQUAL("one", one->get()); CHECK_INT_EQUAL(2, one->id()); CHECK_CONDITION(two != nullptr); CHECK_STR_EQUAL("two", two->get()); CHECK_INT_EQUAL(3, two->id()) CHECK_CONDITION(three != nullptr); CHECK_STR_EQUAL("three", three->get()); CHECK_INT_EQUAL(4, three->id()) CHECK_CONDITION(four != nullptr); CHECK_STR_EQUAL("four", four->get()); CHECK_INT_EQUAL(5, four->id()); }
TEST(FilePersistence, ReSaveList) { QString srcDir(":/FilePersistence/test/persisted"); QString destDir(QDir::tempPath() + "/Envision/FilePersistence/tests"); QFile src(srcDir + "/partial/partial"); QFile dest(destDir + "/partialResave/partialResave"); if (dest.exists()) { bool removed = dest.remove(); CHECK_CONDITION(removed); } if (!QDir(destDir + "/partialResave").exists()) { bool createdDir = QDir().mkpath(destDir + "/partialResave"); CHECK_CONDITION(createdDir); } bool copied = src.copy(dest.fileName()); CHECK_CONDITION(copied); bool permissionOk = dest.setPermissions(QFile::ReadOwner | QFile::WriteOwner); CHECK_CONDITION(permissionOk); Model::Model model; FileStore store; store.setBaseFolder(destDir); model.load(&store, "partialResave"); TestNodes::PartialList* root = dynamic_cast<TestNodes::PartialList*> (model.root()); CHECK_CONDITION(root->list()->isFullyLoaded() == false); model.beginModification(root->list(), "fake modification "); model.endModification(); CHECK_CONDITION(root->list()->isFullyLoaded() == false); model.setName("partialResave"); model.save(&store); CHECK_CONDITION(root->list()->isFullyLoaded() == false); CHECK_TEXT_FILES_EQUAL(":/FilePersistence/test/persisted/partialResave/partialResave", destDir + "/partialResave/partialResave"); }
TEST(FilePersistence, LoadingTypedList) { QString testDir = ":/FilePersistence/test/persisted"; Model::Model model; FileStore store; store.setBaseFolder(testDir); model.load(&store, "typedList"); Model::TypedList<Model::Text>* list = dynamic_cast<Model::TypedList<Model::Text>*> (model.root()); CHECK_CONDITION(list != nullptr); CHECK_STR_EQUAL("TypedListOfText", list->typeName() ); CHECK_INT_EQUAL(2, list->size()); Model::Text* one = list->at(0); Model::Text* two = list->at(1); CHECK_CONDITION(one != nullptr); CHECK_STR_EQUAL("one", one->get()); CHECK_CONDITION(two != nullptr); CHECK_STR_EQUAL("two", two->get()); }