Warning, file /frameworks/krunner/autotests/runnermanagersinglerunnermodetest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de> 0003 SPDX-License-Identifier: LGPL-2.1-or-later 0004 */ 0005 0006 #include "runnermanager.h" 0007 0008 #include <KConfigGroup> 0009 #include <KSharedConfig> 0010 #include <QAction> 0011 #include <QCoreApplication> 0012 #include <QObject> 0013 #include <QProcess> 0014 #include <QStandardPaths> 0015 #include <QTest> 0016 0017 #include "abstractrunnertest.h" 0018 #include "kpluginmetadata_utils_p.h" 0019 0020 using namespace Plasma; 0021 0022 class RunnerManagerSingleRunnerModeTest : public AbstractRunnerTest 0023 { 0024 Q_OBJECT 0025 private Q_SLOTS: 0026 void loadTwoRunners() 0027 { 0028 startDBusRunnerProcess({QStringLiteral("net.krunnertests.dave")}); 0029 startDBusRunnerProcess({QStringLiteral("net.krunnertests.multi.a1")}, QStringLiteral("net.krunnertests.multi.a1")); 0030 qputenv("XDG_DATA_DIRS", QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation).toLocal8Bit()); 0031 QCoreApplication::setLibraryPaths(QStringList()); 0032 initProperties(); 0033 auto md = parseMetaDataFromDesktopFile(QFINDTESTDATA("dbusrunnertestmulti.desktop")); 0034 QVERIFY(md.isValid()); 0035 manager->loadRunner(md); 0036 } 0037 0038 void cleanup() 0039 { 0040 killRunningDBusProcesses(); 0041 const QString configFile = QStandardPaths::locate(QStandardPaths::ConfigLocation, "runnermanagersinglerunnermodetestrcm"); 0042 if (!configFile.isEmpty()) { 0043 QFile::remove(configFile); 0044 } 0045 } 0046 0047 void testAllRunnerResults(); 0048 void testSingleRunnerResults(); 0049 void testNonExistentRunnerId(); 0050 void testLoadingDisabledRunner(); 0051 #if KRUNNER_BUILD_DEPRECATED_SINCE(5, 81) 0052 void testAdvertisedSingleRunners(); 0053 #endif 0054 }; 0055 0056 void RunnerManagerSingleRunnerModeTest::testAllRunnerResults() 0057 { 0058 loadTwoRunners(); 0059 launchQuery("foo"); 0060 const auto matches = manager->matches(); 0061 QCOMPARE(matches.count(), 2); 0062 const QStringList ids = {matches.at(0).runner()->id(), matches.at(1).runner()->id()}; 0063 // Both runners should have produced one result 0064 QVERIFY(ids.contains("dbusrunnertest")); 0065 QVERIFY(ids.contains("dbusrunnertestmulti")); 0066 } 0067 0068 void RunnerManagerSingleRunnerModeTest::testSingleRunnerResults() 0069 { 0070 loadTwoRunners(); 0071 launchQuery("foo", "dbusrunnertest"); 0072 QCOMPARE(manager->matches().count(), 1); 0073 QCOMPARE(manager->matches().constFirst().runner()->id(), "dbusrunnertest"); 0074 launchQuery("foo", "dbusrunnertestmulti"); 0075 QCOMPARE(manager->matches().count(), 1); 0076 QCOMPARE(manager->matches().constFirst().runner()->id(), "dbusrunnertestmulti"); 0077 } 0078 0079 void RunnerManagerSingleRunnerModeTest::testNonExistentRunnerId() 0080 { 0081 loadTwoRunners(); 0082 manager->launchQuery("foo", "bla"); // This internally calls reset, we just wait a bit and make sure there are no matches 0083 QTest::qSleep(250); 0084 QVERIFY(manager->matches().isEmpty()); 0085 } 0086 0087 void RunnerManagerSingleRunnerModeTest::testLoadingDisabledRunner() 0088 { 0089 loadTwoRunners(); 0090 // Make sure the runner is disabled in the config 0091 auto config = KSharedConfig::openConfig(); 0092 config->group("Plugins").writeEntry("dbusrunnertestEnabled", false); 0093 // reset our manager to start clean 0094 manager.reset(new RunnerManager()); 0095 // Copy the service files to the appropriate location and only load runners from there 0096 QString location = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/krunner/dbusplugins/"; 0097 QDir().mkpath(location); 0098 QFile::copy(QFINDTESTDATA("dbusrunnertest.desktop"), location + "dbusrunnertest.desktop"); 0099 QFile::copy(QFINDTESTDATA("dbusrunnertestmulti.desktop"), location + "dbusrunnertestmulti.desktop"); 0100 0101 // Only enabled runner should be loaded and have results 0102 launchQuery("foo"); 0103 QCOMPARE(manager->runners().count(), 1); 0104 QCOMPARE(manager->runners().constFirst()->id(), "dbusrunnertestmulti"); 0105 QCOMPARE(manager->matches().count(), 1); 0106 QCOMPARE(manager->matches().constFirst().runner()->id(), "dbusrunnertestmulti"); 0107 0108 // Only enabled runner should be loaded and have results 0109 launchQuery("foo", "dbusrunnertest"); 0110 QCOMPARE(manager->runners().count(), 2); 0111 const QStringList ids{manager->runners().at(0)->id(), manager->runners().at(1)->id()}; 0112 QVERIFY(ids.contains("dbusrunnertestmulti")); 0113 QVERIFY(ids.contains("dbusrunnertest")); 0114 QCOMPARE(manager->matches().count(), 1); 0115 QCOMPARE(manager->matches().constFirst().runner()->id(), "dbusrunnertest"); 0116 0117 // Only enabled runner should used for querying 0118 launchQuery("foo"); 0119 QCOMPARE(manager->runners().count(), 2); 0120 QCOMPARE(manager->matches().count(), 1); 0121 QCOMPARE(manager->matches().constFirst().runner()->id(), "dbusrunnertestmulti"); 0122 } 0123 0124 #if KRUNNER_BUILD_DEPRECATED_SINCE(5, 82) 0125 void RunnerManagerSingleRunnerModeTest::testAdvertisedSingleRunners() 0126 { 0127 loadTwoRunners(); 0128 QCOMPARE(manager->singleModeAdvertisedRunnerIds(), QStringList{"dbusrunnertest"}); 0129 } 0130 #endif 0131 0132 QTEST_MAIN(RunnerManagerSingleRunnerModeTest) 0133 0134 #include "runnermanagersinglerunnermodetest.moc"