File indexing completed on 2024-04-28 05:31:22
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"