You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.3 KiB
164 lines
5.3 KiB
/* |
|
* Copyright (C) 2016 Harald Sitter <sitter@kde.org> |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the GNU Lesser General Public |
|
* License as published by the Free Software Foundation; either |
|
* version 2.1 of the License, or (at your option) version 3, or any |
|
* later version accepted by the membership of KDE e.V. (or its |
|
* successor approved by the membership of KDE e.V.), which shall |
|
* act as a proxy defined in Section 6 of version 3 of the license. |
|
* |
|
* This library is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
* Lesser General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU Lesser General Public |
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
|
*/ |
|
|
|
#include <QDebug> |
|
#include <QDir> |
|
#include <QFile> |
|
#include <QObject> |
|
#include <QStandardPaths> |
|
#include <QTest> |
|
|
|
#include <KSycoca> |
|
|
|
#include "../servicerunner.h" |
|
|
|
#include <locale.h> |
|
|
|
class ServiceRunnerTest : public QObject |
|
{ |
|
Q_OBJECT |
|
private Q_SLOTS: |
|
void initTestCase(); |
|
void cleanupTestCase(); |
|
|
|
void testChromeAppsRelevance(); |
|
void testKonsoleVsYakuakeComment(); |
|
void testSystemSettings(); |
|
}; |
|
|
|
void ServiceRunnerTest::initTestCase() |
|
{ |
|
QStandardPaths::setTestModeEnabled(true); |
|
|
|
auto appsPath = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation); |
|
QDir(appsPath).removeRecursively(); |
|
QVERIFY(QDir().mkpath(appsPath)); |
|
auto fixtureDir = QDir(QFINDTESTDATA("fixtures")); |
|
for(auto fileInfo : fixtureDir.entryInfoList(QDir::Files)) { |
|
auto source = fileInfo.absoluteFilePath(); |
|
auto target = appsPath + QDir::separator() + fileInfo.fileName(); |
|
QVERIFY2(QFile::copy(fileInfo.absoluteFilePath(), target), |
|
qPrintable(QString("can't copy %1 => %2").arg(source, target))); |
|
} |
|
|
|
setlocale(LC_ALL, "C.utf8"); |
|
|
|
KSycoca::self()->ensureCacheValid(); |
|
|
|
// Make sure noDisplay behaves consistently WRT OnlyShowIn etc. |
|
QVERIFY(setenv("XDG_CURRENT_DESKTOP", "KDE", 1) == 0); |
|
// NOTE: noDisplay also includes X-KDE-OnlyShowOnQtPlatforms which is a bit harder to fake |
|
// and not currently under testing anyway. |
|
} |
|
|
|
void ServiceRunnerTest::cleanupTestCase() |
|
{ |
|
} |
|
|
|
void ServiceRunnerTest::testChromeAppsRelevance() |
|
{ |
|
ServiceRunner runner(this, QVariantList()); |
|
Plasma::RunnerContext context; |
|
context.setQuery("chrome"); |
|
|
|
runner.match(context); |
|
|
|
bool chromeFound = false; |
|
bool signalFound = false; |
|
for (auto match : context.matches()) { |
|
qDebug() << "matched" << match.text(); |
|
if (!match.text().contains("ServiceRunnerTest")) { |
|
continue; |
|
} |
|
|
|
if (match.text() == "Google Chrome ServiceRunnerTest") { |
|
QCOMPARE(match.relevance(), 0.8); |
|
chromeFound = true; |
|
} else if (match.text() == "Signal ServiceRunnerTest") { |
|
// Rates lower because it doesn't have it in the name. |
|
QCOMPARE(match.relevance(), 0.7); |
|
signalFound = true; |
|
} |
|
} |
|
QVERIFY(chromeFound); |
|
QVERIFY(signalFound); |
|
} |
|
|
|
void ServiceRunnerTest::testKonsoleVsYakuakeComment() |
|
{ |
|
// Yakuake has konsole mentioned in comment, should be rated lower. |
|
ServiceRunner runner(this, QVariantList()); |
|
Plasma::RunnerContext context; |
|
context.setQuery("kons"); |
|
|
|
runner.match(context); |
|
|
|
bool konsoleFound = false; |
|
bool yakuakeFound = false; |
|
for (auto match : context.matches()) { |
|
qDebug() << "matched" << match.text(); |
|
if (!match.text().contains("ServiceRunnerTest")) { |
|
continue; |
|
} |
|
|
|
if (match.text() == "Konsole ServiceRunnerTest") { |
|
QCOMPARE(match.relevance(), 0.99); |
|
konsoleFound = true; |
|
} else if (match.text() == "Yakuake ServiceRunnerTest") { |
|
// Rates lower because it doesn't have it in the name. |
|
QCOMPARE(match.relevance(), 0.59); |
|
yakuakeFound = true; |
|
} |
|
} |
|
QVERIFY(konsoleFound); |
|
QVERIFY(yakuakeFound); |
|
} |
|
|
|
void ServiceRunnerTest::testSystemSettings() |
|
{ |
|
// In 5.9.0 'System Settings' suddenly didn't come back as a match for 'settings' anymore. |
|
// Sytem Settings has a noKDE version and a KDE version, if the noKDE version is encountered |
|
// first it will be added to the seen cache, however disqualification of already seen items |
|
// may then also disqualify the KDE version of system settings on account of having already |
|
// seen it. This test makes sure we find the right version. |
|
ServiceRunner runner(this, QVariantList()); |
|
Plasma::RunnerContext context; |
|
context.setQuery("settings"); |
|
|
|
runner.match(context); |
|
|
|
bool systemSettingsFound = false; |
|
bool foreignSystemSettingsFound = false; |
|
for (auto match : context.matches()) { |
|
qDebug() << "matched" << match.text(); |
|
if (match.text() == "System Settings ServiceRunnerTest") { |
|
systemSettingsFound = true; |
|
} |
|
if (match.text() == "KDE System Settings ServiceRunnerTest") { |
|
foreignSystemSettingsFound = true; |
|
} |
|
} |
|
QVERIFY(systemSettingsFound); |
|
QVERIFY(!foreignSystemSettingsFound); |
|
} |
|
|
|
QTEST_MAIN(ServiceRunnerTest) |
|
|
|
#include "servicerunnertest.moc"
|
|
|