/* SPDX-FileCopyrightText: 2022 Jean-Baptiste Mardelle SPDX-FileCopyrightText: 2022 Eric Jiang SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */ #include "catch.hpp" #include "test_utils.hpp" // test specific headers #include "doc/docundostack.hpp" #include "doc/kdenlivedoc.h" #include #include #include #include #include "core.h" #include "definitions.h" #include "utils/thumbnailcache.hpp" TEST_CASE("Cache insert-remove", "[Cache]") { // Create timeline auto binModel = pCore->projectItemModel(); std::shared_ptr undoStack = std::make_shared(nullptr); // Here we do some trickery to enable testing. // We mock the project class so that the undoStack function returns our undoStack KdenliveDoc document(undoStack); Mock docMock(document); When(Method(docMock, getCacheDir)).AlwaysReturn(QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))); KdenliveDoc &mockedDoc = docMock.get(); pCore->projectManager()->testSetDocument(&mockedDoc); QDateTime documentDate = QDateTime::currentDateTime(); KdenliveTests::updateTimeline(false, QString(), QString(), documentDate, 0); auto timeline = mockedDoc.getTimeline(mockedDoc.uuid()); pCore->projectManager()->testSetActiveTimeline(timeline); // Create bin clip QString binId = KdenliveTests::createProducer(pCore->getProjectProfile(), "red", binModel, 20, false); SECTION("Insert and remove thumbnail") { QImage img(100, 100, QImage::Format_ARGB32_Premultiplied); img.fill(Qt::red); ThumbnailCache::get()->storeThumbnail(binId, 0, img, false); REQUIRE(ThumbnailCache::get()->checkIntegrity()); ThumbnailCache::get()->storeThumbnail(binId, 0, img, false); REQUIRE(ThumbnailCache::get()->checkIntegrity()); } pCore->projectManager()->closeCurrentDocument(false, false); } TEST_CASE("getAudioKey() should dereference `ok` param", "ThumbnailCache") { // Create timeline auto binModel = pCore->projectItemModel(); std::shared_ptr undoStack = std::make_shared(nullptr); // Here we do some trickery to enable testing. // We mock the project class so that the undoStack function returns our undoStack KdenliveDoc document(undoStack); Mock docMock(document); When(Method(docMock, getCacheDir)).AlwaysReturn(QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))); KdenliveDoc &mockedDoc = docMock.get(); pCore->projectManager()->testSetDocument(&mockedDoc); QDateTime documentDate = QDateTime::currentDateTime(); KdenliveTests::updateTimeline(false, QString(), QString(), documentDate, 0); auto timeline = mockedDoc.getTimeline(mockedDoc.uuid()); pCore->projectManager()->testSetActiveTimeline(timeline); // Create bin clip QString binId = KdenliveTests::createProducer(pCore->getProjectProfile(), "red", binModel, 20, false); SECTION("Request invalid id") { // Catches a bug where, after setting *ok, the code checks // if (ok) { // instead of // if (*ok) { bool ok = true; KdenliveTests::getAudioKey(QStringLiteral("nonexistent-key"), &ok); REQUIRE(ok == false); } SECTION("Request valid id") { bool ok = false; KdenliveTests::getAudioKey(binId, &ok); REQUIRE(ok == true); } pCore->projectManager()->closeCurrentDocument(false, false); }