Files
oak-editor/tests/gtest/codec_exportformat_test.cpp
T
Mike-Solar b7ff687220 Expand gtest coverage across recently changed modules
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
2026-07-13 10:19:30 +08:00

79 lines
2.6 KiB
C++

#include <gtest/gtest.h>
#include "codec/exportformat.h"
TEST(CodecExportFormat, NamesAndExtensions)
{
using olive::ExportFormat;
EXPECT_EQ(ExportFormat::GetName(ExportFormat::kFormatDNxHD),
QStringLiteral("DNxHD"));
EXPECT_EQ(ExportFormat::GetExtension(ExportFormat::kFormatDNxHD),
QStringLiteral("mxf"));
EXPECT_EQ(ExportFormat::GetName(ExportFormat::kFormatCount),
QStringLiteral("Unknown"));
EXPECT_TRUE(ExportFormat::GetExtension(ExportFormat::kFormatCount).isEmpty());
}
TEST(CodecExportFormat, AllFormatsHaveNames)
{
using olive::ExportFormat;
for (int i = 0; i < ExportFormat::kFormatCount; ++i) {
const auto fmt = static_cast<ExportFormat::Format>(i);
EXPECT_FALSE(ExportFormat::GetName(fmt).isEmpty()) << "Format " << i;
}
}
TEST(CodecExportFormat, AllFormatsHaveAtLeastOneCodecList)
{
using olive::ExportFormat;
for (int i = 0; i < ExportFormat::kFormatCount; ++i) {
const auto fmt = static_cast<ExportFormat::Format>(i);
EXPECT_FALSE(ExportFormat::GetVideoCodecs(fmt).isEmpty() &&
ExportFormat::GetAudioCodecs(fmt).isEmpty() &&
ExportFormat::GetSubtitleCodecs(fmt).isEmpty())
<< "Format " << i;
}
}
TEST(CodecExportFormat, CodecLists)
{
using olive::ExportCodec;
using olive::ExportFormat;
const QList<ExportCodec::Codec> matroska_video =
ExportFormat::GetVideoCodecs(ExportFormat::kFormatMatroska);
EXPECT_TRUE(matroska_video.contains(ExportCodec::kCodecH264));
EXPECT_TRUE(matroska_video.contains(ExportCodec::kCodecVP9));
const QList<ExportCodec::Codec> ogg_audio =
ExportFormat::GetAudioCodecs(ExportFormat::kFormatOgg);
EXPECT_TRUE(ogg_audio.contains(ExportCodec::kCodecOpus));
EXPECT_TRUE(ogg_audio.contains(ExportCodec::kCodecVorbis));
const QList<ExportCodec::Codec> png_video =
ExportFormat::GetVideoCodecs(ExportFormat::kFormatPNG);
EXPECT_EQ(png_video, QList<ExportCodec::Codec>{ ExportCodec::kCodecPNG });
const QList<ExportCodec::Codec> srt_subs =
ExportFormat::GetSubtitleCodecs(ExportFormat::kFormatMatroska);
EXPECT_EQ(srt_subs, QList<ExportCodec::Codec>{ ExportCodec::kCodecSRT });
const QList<ExportCodec::Codec> wav_audio =
ExportFormat::GetAudioCodecs(ExportFormat::kFormatWAV);
EXPECT_EQ(wav_audio, QList<ExportCodec::Codec>{ ExportCodec::kCodecPCM });
}
TEST(CodecExportFormat, MPEG4ContainsH264AndAAC)
{
using olive::ExportCodec;
using olive::ExportFormat;
EXPECT_TRUE(ExportFormat::GetVideoCodecs(ExportFormat::kFormatMPEG4Video)
.contains(ExportCodec::kCodecH264));
EXPECT_TRUE(ExportFormat::GetAudioCodecs(ExportFormat::kFormatMPEG4Audio)
.contains(ExportCodec::kCodecAAC));
}