File indexing completed on 2024-03-24 17:07:35

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