File indexing completed on 2024-04-28 15:19:44

0001 /*
0002     SPDX-FileCopyrightText: 2019 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include <QAbstractItemModel>
0008 #include <QObject>
0009 #include <QTest>
0010 
0011 #include "kcolorscheme.h"
0012 #include "kcolorschememanager.h"
0013 
0014 class KColorSchemeTest : public QObject
0015 {
0016     Q_OBJECT
0017 
0018 private Q_SLOTS:
0019     void benchConstruction_data()
0020     {
0021         KColorSchemeManager manager;
0022         if (manager.model()->rowCount() <= 1) {
0023             QSKIP("no scheme files found, cannot run benchmark");
0024         }
0025 
0026         const auto anyScheme = manager.model()->index(1, 0).data(Qt::UserRole).toString();
0027         QVERIFY(QFile::exists(anyScheme));
0028 
0029         QTest::addColumn<QString>("file");
0030 
0031         QTest::newRow("default") << QString();
0032         QTest::newRow("explicit") << anyScheme;
0033     }
0034 
0035     void benchConstruction()
0036     {
0037         QFETCH(QString, file);
0038         qApp->setProperty("KDE_COLOR_SCHEME_PATH", file);
0039 
0040         QBENCHMARK {
0041             KColorScheme scheme(QPalette::Active);
0042         }
0043     }
0044     void readColors_data()
0045     {
0046         QTest::addColumn<int>("colorSet");
0047 
0048         QTest::newRow("View") << static_cast<int>(KColorScheme::View);
0049         QTest::newRow("Window") << static_cast<int>(KColorScheme::Window);
0050         QTest::newRow("Button") << static_cast<int>(KColorScheme::Button);
0051         QTest::newRow("Selection") << static_cast<int>(KColorScheme::Selection);
0052         QTest::newRow("Tooltip") << static_cast<int>(KColorScheme::Tooltip);
0053         QTest::newRow("Complementary") << static_cast<int>(KColorScheme::Complementary);
0054         QTest::newRow("Header") << static_cast<int>(KColorScheme::Header);
0055     }
0056 
0057     void readColors()
0058     {
0059         QFETCH(int, colorSet);
0060         auto file = QFINDTESTDATA("kcolorschemetest.colors");
0061         KColorScheme activeScheme(QPalette::Active, static_cast<KColorScheme::ColorSet>(colorSet), KSharedConfig::openConfig(file, KConfig::SimpleConfig));
0062         KColorScheme inactiveScheme(QPalette::Inactive, static_cast<KColorScheme::ColorSet>(colorSet), KSharedConfig::openConfig(file, KConfig::SimpleConfig));
0063 
0064 #define checkBackgroundRole(role)                                                                                                                              \
0065     QCOMPARE(activeScheme.background(role).color(), QColor(colorSet, role, QPalette::Active));                                                                 \
0066     QCOMPARE(inactiveScheme.background(role).color(), QColor(colorSet, role, QPalette::Inactive));
0067 
0068         checkBackgroundRole(KColorScheme::NormalBackground);
0069         checkBackgroundRole(KColorScheme::AlternateBackground);
0070 
0071 #define checkForegroundRole(role)                                                                                                                              \
0072     QCOMPARE(activeScheme.foreground(role).color(), QColor(colorSet, role + KColorScheme::NBackgroundRoles, QPalette::Active));                                \
0073     QCOMPARE(inactiveScheme.foreground(role).color(), QColor(colorSet, role + KColorScheme::NBackgroundRoles, QPalette::Inactive));
0074 
0075         checkForegroundRole(KColorScheme::NormalText);
0076         checkForegroundRole(KColorScheme::InactiveText);
0077         checkForegroundRole(KColorScheme::ActiveText);
0078         checkForegroundRole(KColorScheme::LinkText);
0079         checkForegroundRole(KColorScheme::VisitedText);
0080         checkForegroundRole(KColorScheme::NegativeText);
0081         checkForegroundRole(KColorScheme::NeutralText);
0082         checkForegroundRole(KColorScheme::PositiveText);
0083 
0084 #define checkDecorationRole(role)                                                                                                                              \
0085     QCOMPARE(activeScheme.decoration(role).color(),                                                                                                            \
0086              QColor(colorSet, role + KColorScheme::NBackgroundRoles + KColorScheme::NForegroundRoles, QPalette::Active));                                      \
0087     QCOMPARE(inactiveScheme.decoration(role).color(),                                                                                                          \
0088              QColor(colorSet, role + KColorScheme::NBackgroundRoles + KColorScheme::NForegroundRoles, QPalette::Inactive));
0089 
0090         checkDecorationRole(KColorScheme::FocusColor);
0091         checkDecorationRole(KColorScheme::HoverColor);
0092     }
0093 
0094     void readContrast()
0095     {
0096         auto file = QFINDTESTDATA("kcolorschemetest.colors");
0097         QCOMPARE(KColorScheme::contrastF(KSharedConfig::openConfig(file, KConfig::SimpleConfig)), 0.5);
0098     }
0099 };
0100 
0101 QTEST_MAIN(KColorSchemeTest)
0102 
0103 #include "kcolorschemetest.moc"