File indexing completed on 2024-04-28 09:26:02

0001 /*
0002  *  SPDX-FileCopyrightText: 2016 Sebastian Kügler <sebas@kde.org>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 
0007 #include <QCoreApplication>
0008 #include <QLoggingCategory>
0009 #include <QObject>
0010 #include <QSignalSpy>
0011 #include <QTest>
0012 
0013 #include "../src/backendmanager_p.h"
0014 
0015 Q_LOGGING_CATEGORY(KSCREEN, "kscreen")
0016 
0017 using namespace KScreen;
0018 
0019 class TestBackendLoader : public QObject
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     explicit TestBackendLoader(QObject *parent = nullptr);
0025 
0026 private Q_SLOTS:
0027     void initTestCase();
0028     void cleanupTestCase();
0029 
0030     void testPreferredBackend();
0031     void testEnv();
0032     void testEnv_data();
0033     void testFallback();
0034 };
0035 
0036 TestBackendLoader::TestBackendLoader(QObject *parent)
0037     : QObject(parent)
0038 {
0039     qputenv("KSCREEN_LOGGING", "false");
0040     qputenv("KSCREEN_BACKEND_INPROCESS", QByteArray());
0041     qputenv("KSCREEN_BACKEND", QByteArray());
0042 }
0043 
0044 void TestBackendLoader::initTestCase()
0045 {
0046 }
0047 
0048 void TestBackendLoader::cleanupTestCase()
0049 {
0050     // set to original value
0051     qputenv("KSCREEN_BACKEND", QByteArray());
0052 }
0053 
0054 void TestBackendLoader::testPreferredBackend()
0055 {
0056     auto backends = BackendManager::instance()->listBackends();
0057     QVERIFY(!backends.isEmpty());
0058     auto preferred = BackendManager::instance()->preferredBackend();
0059     QVERIFY(preferred.exists());
0060     auto fake = BackendManager::instance()->preferredBackend(QStringLiteral("Fake"));
0061     QVERIFY(fake.fileName().startsWith(QLatin1String("KSC_Fake")));
0062 }
0063 
0064 void TestBackendLoader::testEnv_data()
0065 {
0066     QTest::addColumn<QString>("var");
0067     QTest::addColumn<QString>("backend");
0068 
0069     // clang-format off
0070     QTest::newRow("all lower") << "kwayland" << "KSC_KWayland";
0071     QTest::newRow("camel case") << "KWayland" << "KSC_KWayland";
0072     QTest::newRow("all upper") << "KWAYLAND" << "KSC_KWayland";
0073     QTest::newRow("mixed") << "kwAYlaND" << "KSC_KWayland";
0074 
0075     QTest::newRow("xrandr 1.1") << "xrandr11" << "KSC_XRandR11";
0076     QTest::newRow("qscreen") << "qscreen" << "KSC_QScreen";
0077     QTest::newRow("mixed") << "fake" << "KSC_Fake";
0078     // clang-format on
0079 }
0080 
0081 void TestBackendLoader::testEnv()
0082 {
0083     // We want to be pretty liberal, so this should work
0084     QFETCH(QString, var);
0085     QFETCH(QString, backend);
0086     qputenv("KSCREEN_BACKEND", var.toLocal8Bit());
0087     auto preferred = BackendManager::instance()->preferredBackend();
0088     QVERIFY(preferred.fileName().startsWith(backend));
0089 }
0090 
0091 void TestBackendLoader::testFallback()
0092 {
0093     qputenv("KSCREEN_BACKEND", "nonsense");
0094     auto preferred = BackendManager::instance()->preferredBackend();
0095     QVERIFY(preferred.fileName().startsWith(QLatin1String("KSC_QScreen")));
0096 }
0097 
0098 QTEST_GUILESS_MAIN(TestBackendLoader)
0099 
0100 #include "testbackendloader.moc"