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"