Files
oak-editor/tests/gtest/ui_icons_test.cpp
T
Mike-Solar c734ecdba1 tests: make unknown-icon check robust across Qt builds
QIcon::addFile() differs between Qt versions in whether entries for
nonexistent files keep the icon non-null (Ubuntu CI failure). Assert
on what matters: no usable pixmap or size is produced.
2026-07-17 18:28:38 +08:00

122 lines
4.0 KiB
C++

#include <gtest/gtest.h>
#include <QFile>
#include <QIcon>
#include <QVector>
#include "ui/icons/icons.h"
TEST(UIIcons, ThemeResourcesAreRegistered)
{
// Both themes compile their icons into the binary via AUTORCC resources
EXPECT_TRUE(
QFile::exists(QStringLiteral(":/style/olive-dark/png/play.16.png")));
EXPECT_TRUE(
QFile::exists(QStringLiteral(":/style/olive-light/png/play.16.png")));
EXPECT_TRUE(QFile::exists(QStringLiteral(":/style/olive-dark/palette.ini")));
EXPECT_TRUE(QFile::exists(QStringLiteral(":/style/olive-dark/style.css")));
}
TEST(UIIcons, CreateLoadsAllSizes)
{
QIcon icon = olive::icon::Create(QStringLiteral(":/style/olive-dark"),
QStringLiteral("play"));
ASSERT_FALSE(icon.isNull());
// genicons.sh generates 16/32/64/128 px variants of every icon
const QList<QSize> sizes = icon.availableSizes();
for (int sz : { 16, 32, 64, 128 }) {
EXPECT_TRUE(sizes.contains(QSize(sz, sz))) << "Missing size " << sz;
}
EXPECT_FALSE(icon.pixmap(QSize(32, 32)).isNull());
}
TEST(UIIcons, CreateWithUnknownNameYieldsNoUsableIcon)
{
QIcon icon = olive::icon::Create(QStringLiteral(":/style/olive-dark"),
QStringLiteral("no-such-icon"));
// QIcon::addFile() differs across Qt builds in whether entries for
// nonexistent files keep the icon "null". What matters is that no usable
// pixmap can be produced for an unknown icon name.
EXPECT_TRUE(icon.availableSizes().isEmpty());
EXPECT_TRUE(icon.pixmap(QSize(16, 16)).isNull());
EXPECT_TRUE(icon.pixmap(32, 32, QIcon::Disabled).isNull());
}
TEST(UIIcons, LoadAllPopulatesGlobalIcons)
{
olive::icon::LoadAll(QStringLiteral(":/style/olive-dark"));
const QVector<QIcon *> all = { &olive::icon::GoToStart,
&olive::icon::PrevFrame,
&olive::icon::Play,
&olive::icon::Pause,
&olive::icon::NextFrame,
&olive::icon::GoToEnd,
&olive::icon::New,
&olive::icon::Open,
&olive::icon::Save,
&olive::icon::Undo,
&olive::icon::Redo,
&olive::icon::TreeView,
&olive::icon::ListView,
&olive::icon::IconView,
&olive::icon::ToolPointer,
&olive::icon::ToolEdit,
&olive::icon::ToolRipple,
&olive::icon::ToolRolling,
&olive::icon::ToolRazor,
&olive::icon::ToolSlip,
&olive::icon::ToolSlide,
&olive::icon::ToolHand,
&olive::icon::ToolTransition,
&olive::icon::ToolTrackSelect,
&olive::icon::Folder,
&olive::icon::Sequence,
&olive::icon::Video,
&olive::icon::Audio,
&olive::icon::Image,
&olive::icon::MiniMap,
&olive::icon::TriUp,
&olive::icon::TriLeft,
&olive::icon::TriDown,
&olive::icon::TriRight,
&olive::icon::TextBold,
&olive::icon::TextItalic,
&olive::icon::TextUnderline,
&olive::icon::TextStrikethrough,
&olive::icon::TextSmallCaps,
&olive::icon::TextAlignLeft,
&olive::icon::TextAlignRight,
&olive::icon::TextAlignCenter,
&olive::icon::TextAlignJustify,
&olive::icon::TextAlignTop,
&olive::icon::TextAlignBottom,
&olive::icon::TextAlignMiddle,
&olive::icon::Snapping,
&olive::icon::ZoomIn,
&olive::icon::ZoomOut,
&olive::icon::Record,
&olive::icon::Add,
&olive::icon::Error,
&olive::icon::DirUp,
&olive::icon::Clock,
&olive::icon::Diamond,
&olive::icon::Plus,
&olive::icon::Minus,
&olive::icon::AddEffect,
&olive::icon::EyeOpened,
&olive::icon::EyeClosed,
&olive::icon::LockOpened,
&olive::icon::LockClosed,
&olive::icon::Pencil,
&olive::icon::Subtitles,
&olive::icon::ColorPicker };
for (const QIcon *icon : all) {
EXPECT_FALSE(icon->isNull());
}
}