Adds ~60 new unit tests covering the modules touched in recent bug-fix passes and UI refactors: - RenderTicket: result/finish-count semantics, empty watcher defaults, ticket-reuse rejection - Preferences tabs: behavior options migrated into General/Audio tabs, translation context helper, audio-tab initialization - NodeView: context management, 'Show in Parameter Editor' action wiring - PreviewAutoCacher: construction, pause toggles, single-frame render cancellation, force-cache range - SeekableWidget/TimeBasedWidget: scroll, marker editing, context reset - OCIOLutNode: empty/missing/unsupported LUT paths, string direction values, file-switching regression coverage - ProxyManager: working filename, disabled state, empty proxy fields - Frame/VideoParams/AudioParams/Timecode/ExportFormat/ExportCodec: additional edge-case and enumeration coverage Also fixes the PreferencesAudioTab test crash by initializing AudioManager in the offscreen test environment. All tests pass: ctest --output-on-failure
121 lines
2.9 KiB
C++
121 lines
2.9 KiB
C++
#include <gtest/gtest.h>
|
|
|
|
#include <QSignalSpy>
|
|
|
|
#include "codec/conformmanager.h"
|
|
#include "node/output/viewer/viewer.h"
|
|
#include "node/project.h"
|
|
#include "render/diskmanager.h"
|
|
#include "render/previewautocacher.h"
|
|
#include "render/rendermanager.h"
|
|
|
|
using namespace olive;
|
|
|
|
class PreviewAutoCacherTest : public ::testing::Test {
|
|
protected:
|
|
void SetUp() override
|
|
{
|
|
ColorManager::SetUpDefaultConfig();
|
|
|
|
// Use the dummy render backend so PreviewAutoCacher can be exercised
|
|
// without initializing OpenGL/Vulkan in the unit-test process.
|
|
OLIVE_CONFIG("GraphicsBackend") = QStringLiteral("dummy");
|
|
|
|
DiskManager::CreateInstance();
|
|
ConformManager::CreateInstance();
|
|
RenderManager::CreateInstance();
|
|
|
|
project_ = std::make_unique<Project>();
|
|
project_->Initialize();
|
|
}
|
|
|
|
void TearDown() override
|
|
{
|
|
RenderManager::DestroyInstance();
|
|
ConformManager::DestroyInstance();
|
|
DiskManager::DestroyInstance();
|
|
}
|
|
|
|
std::unique_ptr<Project> project_;
|
|
};
|
|
|
|
TEST_F(PreviewAutoCacherTest, ConstructionInitializesDefaultState)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
EXPECT_FALSE(cacher.IsRenderingCustomRange());
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, SetProjectToNullDoesNotCrash)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.SetProject(project_.get());
|
|
cacher.SetProject(nullptr);
|
|
EXPECT_FALSE(cacher.IsRenderingCustomRange());
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, SetRendersPausedTogglesState)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.SetRendersPaused(true);
|
|
cacher.SetRendersPaused(false);
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, SetThumbnailsPausedTogglesState)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.SetThumbnailsPaused(true);
|
|
cacher.SetThumbnailsPaused(false);
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, SetPlayheadStoresPlayhead)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.SetPlayhead(rational(42));
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, ClearSingleFrameRendersDoesNotCrashWhenEmpty)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.ClearSingleFrameRenders();
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, ClearSingleFrameRendersThatArentRunningDoesNotCrashWhenEmpty)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.ClearSingleFrameRendersThatArentRunning();
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, GetSingleFrameWithoutProjectReturnsTicket)
|
|
{
|
|
auto *viewer = new ViewerOutput();
|
|
viewer->setParent(project_.get());
|
|
|
|
PreviewAutoCacher cacher;
|
|
RenderTicketPtr ticket = cacher.GetSingleFrame(viewer, rational(0));
|
|
EXPECT_NE(ticket, nullptr);
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, ForceCacheRangeDoesNotCrash)
|
|
{
|
|
auto *viewer = new ViewerOutput();
|
|
viewer->setParent(project_.get());
|
|
|
|
PreviewAutoCacher cacher;
|
|
cacher.ForceCacheRange(viewer, TimeRange(rational(0), rational(1)));
|
|
cacher.SetProject(nullptr);
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, CancelVideoTasksDoesNotCrashWhenIdle)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.CancelVideoTasks(false);
|
|
cacher.CancelVideoTasks(true);
|
|
}
|
|
|
|
TEST_F(PreviewAutoCacherTest, CancelAudioTasksDoesNotCrashWhenIdle)
|
|
{
|
|
PreviewAutoCacher cacher;
|
|
cacher.CancelAudioTasks(false);
|
|
cacher.CancelAudioTasks(true);
|
|
}
|