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"