File indexing completed on 2024-05-12 17:09:56
0001 /* 0002 SPDX-FileCopyrightText: 2018 Martin Flöser <mgraesslin@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include <QtTest> 0008 0009 #include "../kworkspace.h" 0010 0011 #include <vector> 0012 0013 class TestPlatformDetection : public QObject 0014 { 0015 Q_OBJECT 0016 private Q_SLOTS: 0017 void init(); 0018 void testPlatformSelection_data(); 0019 void testPlatformSelection(); 0020 void testArguments_data(); 0021 void testArguments(); 0022 void testQtQpaPlatformIsSet_data(); 0023 void testQtQpaPlatformIsSet(); 0024 }; 0025 0026 void TestPlatformDetection::init() 0027 { 0028 qunsetenv("QT_QPA_PLATFORM"); 0029 qunsetenv("XDG_SESSION_TYPE"); 0030 } 0031 0032 void TestPlatformDetection::testPlatformSelection_data() 0033 { 0034 QTest::addColumn<QByteArray>("xdgSessionType"); 0035 QTest::addColumn<QByteArray>("expectedQtQpaPlatform"); 0036 0037 QTest::newRow("wayland") << QByteArrayLiteral("wayland") << QByteArrayLiteral("wayland"); 0038 QTest::newRow("x11") << QByteArrayLiteral("x11") << QByteArrayLiteral("xcb"); 0039 QTest::newRow("unknown") << QByteArrayLiteral("mir") << QByteArray(); 0040 } 0041 0042 void TestPlatformDetection::testPlatformSelection() 0043 { 0044 QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM")); 0045 QFETCH(QByteArray, xdgSessionType); 0046 qputenv("XDG_SESSION_TYPE", xdgSessionType); 0047 0048 std::vector<QByteArray> cppArgv{QByteArrayLiteral("testPlatformDetction")}; 0049 std::vector<char *> argv; 0050 for (QByteArray &arg : cppArgv) { 0051 argv.push_back(arg.data()); 0052 } 0053 KWorkSpace::detectPlatform(1, argv.data()); 0054 QTEST(qgetenv("QT_QPA_PLATFORM"), "expectedQtQpaPlatform"); 0055 } 0056 0057 void TestPlatformDetection::testArguments_data() 0058 { 0059 QTest::addColumn<QByteArray>("arg"); 0060 0061 QTest::newRow("-platform") << QByteArrayLiteral("-platform"); 0062 QTest::newRow("--platform") << QByteArrayLiteral("--platform"); 0063 QTest::newRow("-platform=wayland") << QByteArrayLiteral("-platform=wayland"); 0064 QTest::newRow("--platform=wayland") << QByteArrayLiteral("--platform=wayland"); 0065 } 0066 0067 void TestPlatformDetection::testArguments() 0068 { 0069 QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM")); 0070 qputenv("XDG_SESSION_TYPE", "wayland"); 0071 0072 QFETCH(QByteArray, arg); 0073 std::vector<QByteArray> cppArgv{QByteArrayLiteral("testPlatformDetction"), arg, QByteArrayLiteral("wayland")}; 0074 std::vector<char *> argv; 0075 for (QByteArray &arg : cppArgv) { 0076 argv.push_back(arg.data()); 0077 } 0078 KWorkSpace::detectPlatform(3, argv.data()); 0079 QVERIFY(!qEnvironmentVariableIsSet("QT_QPA_PLATFORM")); 0080 } 0081 0082 void TestPlatformDetection::testQtQpaPlatformIsSet_data() 0083 { 0084 QTest::addColumn<QByteArray>("qtQpaPlatform"); 0085 QTest::addColumn<QByteArray>("xdgSessionType"); 0086 0087 QTest::newRow("xcb - x11") << QByteArrayLiteral("xcb") << QByteArrayLiteral("x11"); 0088 QTest::newRow("xcb - wayland") << QByteArrayLiteral("xcb") << QByteArrayLiteral("wayland"); 0089 QTest::newRow("wayland - x11") << QByteArrayLiteral("wayland") << QByteArrayLiteral("x11"); 0090 QTest::newRow("wayland - wayland") << QByteArrayLiteral("wayland") << QByteArrayLiteral("wayland"); 0091 QTest::newRow("windows - x11") << QByteArrayLiteral("windows") << QByteArrayLiteral("x11"); 0092 } 0093 0094 void TestPlatformDetection::testQtQpaPlatformIsSet() 0095 { 0096 // test verifies that if QT_QPA_PLATFORM is set the env variable does not get adjusted 0097 QFETCH(QByteArray, qtQpaPlatform); 0098 QFETCH(QByteArray, xdgSessionType); 0099 qputenv("QT_QPA_PLATFORM", qtQpaPlatform); 0100 qputenv("XDG_SESSION_TYPE", xdgSessionType); 0101 0102 KWorkSpace::detectPlatform(0, nullptr); 0103 QCOMPARE(qgetenv("QT_QPA_PLATFORM"), qtQpaPlatform); 0104 } 0105 0106 QTEST_GUILESS_MAIN(TestPlatformDetection) 0107 0108 #include "testPlatformDetection.moc"