File indexing completed on 2024-10-13 04:24:11

0001 /*
0002     SPDX-FileCopyrightText: 2022 Jean-Baptiste Mardelle <jb@kdenlive.org>
0003     SPDX-FileCopyrightText: 2022 Eric Jiang
0004     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 #include "catch.hpp"
0007 #include "test_utils.hpp"
0008 // test specific headers
0009 #include "doc/docundostack.hpp"
0010 #include "doc/kdenlivedoc.h"
0011 #include <cmath>
0012 #include <iostream>
0013 #include <tuple>
0014 #include <unordered_set>
0015 
0016 #include "core.h"
0017 #include "definitions.h"
0018 #include "utils/thumbnailcache.hpp"
0019 
0020 TEST_CASE("Cache insert-remove", "[Cache]")
0021 {
0022     // Create timeline
0023     auto binModel = pCore->projectItemModel();
0024     std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
0025 
0026     // Here we do some trickery to enable testing.
0027     // We mock the project class so that the undoStack function returns our undoStack
0028     KdenliveDoc document(undoStack);
0029     Mock<KdenliveDoc> docMock(document);
0030     When(Method(docMock, getCacheDir)).AlwaysReturn(QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
0031     KdenliveDoc &mockedDoc = docMock.get();
0032 
0033     pCore->projectManager()->m_project = &mockedDoc;
0034     QDateTime documentDate = QDateTime::currentDateTime();
0035     pCore->projectManager()->updateTimeline(false, QString(), QString(), documentDate, 0);
0036     auto timeline = mockedDoc.getTimeline(mockedDoc.uuid());
0037     pCore->projectManager()->m_activeTimelineModel = timeline;
0038 
0039     pCore->projectManager()->testSetActiveDocument(&mockedDoc, timeline);
0040 
0041     // Create bin clip
0042     QString binId = createProducer(pCore->getProjectProfile(), "red", binModel, 20, false);
0043 
0044     SECTION("Insert and remove thumbnail")
0045     {
0046         QImage img(100, 100, QImage::Format_ARGB32_Premultiplied);
0047         img.fill(Qt::red);
0048         ThumbnailCache::get()->storeThumbnail(binId, 0, img, false);
0049         REQUIRE(ThumbnailCache::get()->checkIntegrity());
0050         ThumbnailCache::get()->storeThumbnail(binId, 0, img, false);
0051         REQUIRE(ThumbnailCache::get()->checkIntegrity());
0052     }
0053     pCore->projectManager()->closeCurrentDocument(false, false);
0054 }
0055 
0056 TEST_CASE("getAudioKey() should dereference `ok` param", "ThumbnailCache") {
0057     // Create timeline
0058     auto binModel = pCore->projectItemModel();
0059     std::shared_ptr<DocUndoStack> undoStack = std::make_shared<DocUndoStack>(nullptr);
0060 
0061     // Here we do some trickery to enable testing.
0062     // We mock the project class so that the undoStack function returns our undoStack
0063     KdenliveDoc document(undoStack);
0064     Mock<KdenliveDoc> docMock(document);
0065     When(Method(docMock, getCacheDir)).AlwaysReturn(QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)));
0066     KdenliveDoc &mockedDoc = docMock.get();
0067 
0068     pCore->m_projectManager->m_project = &mockedDoc;
0069     QDateTime documentDate = QDateTime::currentDateTime();
0070     pCore->m_projectManager->updateTimeline(false, QString(), QString(), documentDate, 0);
0071     auto timeline = mockedDoc.getTimeline(mockedDoc.uuid());
0072     pCore->m_projectManager->m_activeTimelineModel = timeline;
0073 
0074     pCore->m_projectManager->testSetActiveDocument(&mockedDoc, timeline);
0075 
0076     // Create bin clip
0077     QString binId = createProducer(pCore->getProjectProfile(), "red", binModel, 20, false);
0078 
0079     SECTION("Request invalid id")
0080     {
0081         // Catches a bug where, after setting *ok, the code checks
0082         //     if (ok) {
0083         // instead of
0084         //     if (*ok) {
0085         bool ok = true;
0086         ThumbnailCache::getAudioKey(QStringLiteral("nonexistent-key"), &ok);
0087         REQUIRE(ok == false);
0088     }
0089     SECTION("Request valid id")
0090     {
0091         bool ok = false;
0092         ThumbnailCache::getAudioKey(binId, &ok);
0093         REQUIRE(ok == true);
0094     }
0095     pCore->projectManager()->closeCurrentDocument(false, false);
0096 }