bool XpiksTestsApp::doContinueReading(SignalWaiter &waiter, bool ignoreBackups) { bool success = false; LOG_DEBUG << "ignore backups:" << ignoreBackups; do { const size_t importIDsSize = m_MetadataIOCoordinator.getImportIDs().size(); m_MetadataIOCoordinator.continueReading(ignoreBackups); if (!waiter.wait(20)) { LOG_WARNING << "Timeout exceeded for reading metadata."; break; } if (m_MetadataIOCoordinator.getHasErrors()) { LOG_WARNING << "Errors in IO Coordinator while reading"; break; } if (importIDsSize == m_MetadataIOCoordinator.getImportIDs().size()) { LOG_WARNING << "Import does not have any trace"; break; } success = true; } while (false); return success; }
int ClearMetadataTest::doTest() { QList<QUrl> files; files << setupFilePathForTest("images-for-tests/pixmap/seagull-for-clear.jpg"); VERIFY(m_TestsApp.addFilesForTest(files), "Failed to add files"); auto artwork = m_TestsApp.getArtwork(0); const QStringList &keywords = artwork->getKeywords(); QStringList expectedKeywords = QString("picture,seagull,bird").split(','); VERIFY(expectedKeywords == keywords, "Keywords are not the same!"); VERIFY(artwork->getDescription() == "Seagull description", "Description is not the same!"); VERIFY(artwork->getTitle() == "Seagull title", "Title is not the same!"); artwork->setIsSelected(true); m_TestsApp.getFilteredArtworksModel().removeMetadataInSelected(); SignalWaiter waiter; m_TestsApp.connectWaiterForExport(waiter); m_TestsApp.selectAllArtworks(); m_TestsApp.dispatch(QMLExtensions::UICommandID::ExportMetadata); VERIFY(waiter.wait(20), "Timeout exceeded for writing metadata."); VERIFY(m_TestsApp.checkExportSucceeded(), "Failed to export"); m_TestsApp.deleteArtworks(Helpers::IndicesRanges(files.size())); VERIFY(m_TestsApp.addFilesForTest(files), "Failed to add files"); artwork = m_TestsApp.getArtwork(0); VERIFY(artwork->getBasicMetadataModel().isDescriptionEmpty(), "Description was not empty"); VERIFY(artwork->getBasicMetadataModel().isTitleEmpty(), "Title was not empty"); VERIFY(artwork->getBasicMetadataModel().areKeywordsEmpty(), "Keywords were not empty"); return 0; }
int AddToUserDictionaryTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/pixmap/seagull.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); // wait for after-add spellchecking QThread::sleep(1); auto *basicKeywordsModel = metadata->getBasicModel(); QString wrongWord = "abbreviatioe"; metadata->setDescription(metadata->getDescription() + ' ' + wrongWord); metadata->setTitle(metadata->getTitle() + ' ' + wrongWord); metadata->appendKeyword("correct part " + wrongWord); metadata->setIsSelected(true); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); SpellCheck::SpellCheckerService *spellCheckService = m_CommandManager->getSpellCheckerService(); QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &waiter, SIGNAL(finished())); filteredModel->spellCheckSelected(); if (!waiter.wait(5)) { VERIFY(false, "Timeout for waiting for spellcheck results"); } // wait for finding suggestions QThread::sleep(1); VERIFY(basicKeywordsModel->hasDescriptionSpellError(), "Description spell error not detected"); VERIFY(basicKeywordsModel->hasTitleSpellError(), "Title spell error not detected"); VERIFY(basicKeywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected"); spellCheckService->addWordToUserDictionary(wrongWord); SignalWaiter spellingWaiter; QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &spellingWaiter, SIGNAL(finished())); QCoreApplication::processEvents(QEventLoop::AllEvents); // wait add user word to finish if (!spellingWaiter.wait(5)) { VERIFY(false, "Timeout for waiting for spellcheck results"); } sleepWait(5, [=]() { return !basicKeywordsModel->hasDescriptionSpellError() && !basicKeywordsModel->hasTitleSpellError() && !basicKeywordsModel->hasKeywordsSpellError(); }); int userDictWords = spellCheckService->getUserDictWordsNumber(); LOG_DEBUG << "User dict words count:" << userDictWords; VERIFY(userDictWords == 1, "Wrong number of words in user dictionary"); VERIFY(!basicKeywordsModel->hasDescriptionSpellError(), "After adding word. Description spell error is still present"); VERIFY(!basicKeywordsModel->hasTitleSpellError(), "After adding word. Title spell error is still present"); VERIFY(!basicKeywordsModel->hasKeywordsSpellError(), "After adding word. Keywords spell error is still present"); return 0; }
int SpellingProducesWarningsTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/vector/026.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); sleepWait(3, [metadata]() { return !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle) && !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription) && !Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords); }); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle), "Error for reading title"); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription), "Error for reading description"); VERIFY(!Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords), "Error for reading keywords"); QString wrongWord = "abbreviatioe"; metadata->setDescription(metadata->getDescription() + ' ' + wrongWord); metadata->setTitle(metadata->getTitle() + ' ' + wrongWord); metadata->appendKeyword("correct part " + wrongWord); metadata->setIsSelected(true); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); SpellCheck::SpellCheckerService *spellCheckService = m_CommandManager->getSpellCheckerService(); SignalWaiter spellingWaiter; QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &spellingWaiter, SIGNAL(finished())); filteredModel->spellCheckSelected(); if (!spellingWaiter.wait(5)) { VERIFY(false, "Timeout for waiting for first spellcheck results"); } LOG_INFO << "Spellchecking finished. Waiting for warnings..."; sleepWait(5, [=]() { return Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle) && Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription) && Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords); }); auto *keywordsModel = metadata->getBasicModel(); VERIFY(keywordsModel->hasDescriptionSpellError(), "Description spell error not detected"); VERIFY(keywordsModel->hasTitleSpellError(), "Title spell error not detected"); VERIFY(keywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInTitle), "Warning was not produced for title spelling error"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInDescription), "Warning was not produced for description spelling error"); VERIFY(Common::HasFlag(metadata->getWarningsFlags(), Common::WarningFlags::SpellErrorsInKeywords), "Warning was not produced for keywords spelling error"); return 0; }
int SpellCheckUndoTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/vector/026.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); QString wrongWord = "abbreviatioe"; metadata->setDescription(metadata->getDescription() + ' ' + wrongWord); metadata->setTitle(metadata->getTitle() + ' ' + wrongWord); metadata->appendKeyword("correct part " + wrongWord); metadata->setIsSelected(true); // wait for after-add spellchecking QThread::sleep(1); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); SpellCheck::SpellCheckerService *spellCheckService = m_CommandManager->getSpellCheckerService(); QObject::connect(spellCheckService, SIGNAL(spellCheckQueueIsEmpty()), &waiter, SIGNAL(finished())); filteredModel->spellCheckSelected(); if (!waiter.wait(5)) { VERIFY(false, "Timeout for waiting for first spellcheck results"); } // wait for finding suggestions QThread::sleep(1); Common::BasicKeywordsModel *basicKeywordsModel = metadata->getKeywordsModel(); VERIFY(basicKeywordsModel->hasDescriptionSpellError(), "Description spell error not detected"); VERIFY(basicKeywordsModel->hasTitleSpellError(), "Title spell error not detected"); VERIFY(basicKeywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected"); filteredModel->clearKeywords(0); QThread::sleep(1); VERIFY(!basicKeywordsModel->hasKeywordsSpellError(), "Keywords spell error not cleared"); UndoRedo::UndoRedoManager *undoRedoManager = m_CommandManager->getUndoRedoManager(); undoRedoManager->undoLastAction(); if (!waiter.wait(5)) { VERIFY(false, "Timeout for waiting for second spellcheck results"); } // wait for finding suggestions QThread::sleep(1); VERIFY(basicKeywordsModel->hasDescriptionSpellError(), "Description spell error not detected on the second time"); VERIFY(basicKeywordsModel->hasTitleSpellError(), "Title spell error not detected on the second time"); VERIFY(basicKeywordsModel->hasKeywordsSpellError(), "Keywords spell error not detected on the second time"); return 0; }
int ClearMetadataTest::doTest() { Models::ArtItemsModel *artItemsModel = m_CommandManager->getArtItemsModel(); QList<QUrl> files; files << getImagePathForTest("images-for-tests/pixmap/seagull-for-clear.jpg"); int addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file"); MetadataIO::MetadataIOCoordinator *ioCoordinator = m_CommandManager->getMetadataIOCoordinator(); SignalWaiter waiter; QObject::connect(ioCoordinator, SIGNAL(metadataReadingFinished()), &waiter, SIGNAL(finished())); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); Models::ArtworkMetadata *metadata = artItemsModel->getArtwork(0); const QStringList &keywords = metadata->getKeywords(); QStringList expectedKeywords = QString("picture,seagull,bird").split(','); VERIFY(expectedKeywords == keywords, "Keywords are not the same!"); VERIFY(metadata->getDescription() == "Seagull description", "Description is not the same!"); VERIFY(metadata->getTitle() == "Seagull title", "Title is not the same!"); Models::FilteredArtItemsProxyModel *filteredModel = m_CommandManager->getFilteredArtItemsModel(); metadata->setIsSelected(true); filteredModel->removeMetadataInSelected(); bool doOverwrite = true, dontSaveBackups = false; QObject::connect(ioCoordinator, SIGNAL(metadataWritingFinished()), &waiter, SIGNAL(finished())); artItemsModel->saveSelectedArtworks(QVector<int>() << 0, doOverwrite, dontSaveBackups); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for writing metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while writing"); filteredModel->removeSelectedArtworks(); addedCount = artItemsModel->addLocalArtworks(files); VERIFY(addedCount == files.length(), "Failed to add file after removal"); ioCoordinator->continueReading(true); if (!waiter.wait(20)) { VERIFY(false, "Timeout exceeded for reading metadata."); } VERIFY(!ioCoordinator->getHasErrors(), "Errors in IO Coordinator while reading"); metadata = artItemsModel->getArtwork(0); VERIFY(metadata->getBasicModel()->isDescriptionEmpty(), "Description was not empty"); VERIFY(metadata->getBasicModel()->isTitleEmpty(), "Title was not empty"); VERIFY(metadata->getBasicModel()->areKeywordsEmpty(), "Keywords were not empty"); return 0; }