File indexing completed on 2024-06-23 05:29:36

0001 /*
0002     SPDX-FileCopyrightText: 2023 Alexander Lohnau <alexander.lohnau@gmx.de>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 #include <QFileInfo>
0006 #include <QObject>
0007 #include <QProcess>
0008 #include <QStandardPaths>
0009 #include <QTest>
0010 #include <QTextStream>
0011 
0012 bool fileContainsLine(const QString &fileName, const QString &line)
0013 {
0014     QFile file(fileName);
0015     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
0016         return false;
0017     }
0018 
0019     QTextStream in(&file);
0020     while (!in.atEnd()) {
0021         if (in.readLine() == line) {
0022             return true;
0023         }
0024     }
0025 
0026     return false;
0027 }
0028 
0029 class PluginInstallerRcTest : public QObject
0030 {
0031     Q_OBJECT
0032 private Q_SLOTS:
0033     void initTestCase()
0034     {
0035         QStandardPaths::setTestModeEnabled(true);
0036         qputenv("PLUGININSTALLER_TEST_MODE", "true");
0037     }
0038     void testInstall()
0039     {
0040         const QString executable = QFINDTESTDATA("krunner-plugininstaller");
0041         QProcess installProcess;
0042         installProcess.start(executable, {"install", QFINDTESTDATA("testplugin"), "--no-confirm"});
0043 
0044         installProcess.waitForFinished();
0045         qDebug() << installProcess.readAllStandardError();
0046         QCOMPARE(installProcess.exitCode(), 0);
0047 
0048         const QString dataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
0049         const QString desktopLocation = dataLocation + "/krunner/dbusplugins/org.kde.testplugin.desktop";
0050         const QString serviceLocation = dataLocation + "/dbus-1/services/org.kde.testplugin.service";
0051         QVERIFY(QFileInfo::exists(desktopLocation));
0052         QVERIFY(QFileInfo::exists(serviceLocation));
0053         QVERIFY(fileContainsLine(desktopLocation, "X-Plasma-DBusRunner-Service=org.kde.testplugin"));
0054         QVERIFY(fileContainsLine(serviceLocation, QLatin1String("Exec=python3 %1/main.py").arg(QFINDTESTDATA("testplugin"))));
0055 
0056         QProcess uninstallProcess;
0057         uninstallProcess.start(executable, {"uninstall", QFINDTESTDATA("testplugin")});
0058 
0059         uninstallProcess.waitForFinished();
0060         qDebug() << uninstallProcess.readAllStandardError();
0061         QVERIFY(!QFileInfo::exists(desktopLocation));
0062         QVERIFY(!QFileInfo::exists(serviceLocation));
0063     }
0064 };
0065 
0066 QTEST_MAIN(PluginInstallerRcTest)
0067 
0068 #include "plugininstallerrctest.moc"