Warning, file /plasma/plasma-workspace/libtaskmanager/autotests/tasktoolstest.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: 2016 Eike Hein <hein@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 <QObject> 0008 0009 #include <KConfigGroup> 0010 #include <KSharedConfig> 0011 #include <KSycoca> 0012 0013 #include <QDir> 0014 #include <QIcon> 0015 #include <QStandardPaths> 0016 #include <QTest> 0017 0018 #include "tasktools.h" 0019 0020 using namespace TaskManager; 0021 0022 class TaskToolsTest : public QObject 0023 { 0024 Q_OBJECT 0025 0026 private Q_SLOTS: 0027 void initTestCase(); 0028 0029 void shouldFindApp(); 0030 void shouldFindApp_data(); 0031 void shouldFindDefaultApp(); 0032 void shouldCompareLauncherUrls(); 0033 void testWindowUrlFromMetadata(); 0034 void testWindowUrlFromMetadata_data(); 0035 0036 private: 0037 void createIcon(); 0038 }; 0039 0040 void TaskToolsTest::initTestCase() 0041 { 0042 QStandardPaths::setTestModeEnabled(true); 0043 0044 const QString dataDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); 0045 0046 qputenv("XDG_DATA_DIRS", dataDir.toUtf8()); 0047 0048 // Make sure we start with a clean dir 0049 QVERIFY(QDir(dataDir).removeRecursively()); 0050 QVERIFY(QDir(dataDir).mkpath(QLatin1String("applications"))); 0051 QVERIFY(QDir(dataDir).mkpath(QLatin1String("kservices5"))); 0052 0053 // Add our applications 0054 QFile::copy(QFINDTESTDATA("data/applications/org.kde.dolphin.desktop"), dataDir + QLatin1String("/applications/org.kde.dolphin.desktop")); 0055 QFile::copy(QFINDTESTDATA("data/applications/org.kde.konversation.desktop"), dataDir + QLatin1String("/applications/org.kde.konversation.desktop")); 0056 QFile::copy(QFINDTESTDATA("data/applications/im.riot.Riot.desktop"), dataDir + QLatin1String("/applications/im.riot.Riot.desktop")); 0057 QFile::copy(QFINDTESTDATA("data/applications/org.telegram.desktop.desktop"), dataDir + QLatin1String("/applications/org.telegram.desktop.desktop")); 0058 QFile::copy(QFINDTESTDATA("data/applications/com.spotify.Client.desktop"), dataDir + QLatin1String("/applications/com.spotify.Client.desktop")); 0059 QFile::copy(QFINDTESTDATA("data/applications/GammaRay.desktop"), dataDir + QLatin1String("/applications/GammaRay.desktop")); 0060 QFile::copy(QFINDTESTDATA("data/applications/org.kde.gwenview_importer.desktop"), 0061 dataDir + QLatin1String("/applications/org.kde.gwenview_importer.desktop")); 0062 QFile::copy(QFINDTESTDATA("data/applications/kcm_autostart.desktop"), dataDir + QLatin1String("/applications/kcm_autostart.desktop")); 0063 QFile::copy(QFINDTESTDATA("data/applications/brave-browser.desktop"), dataDir + QLatin1String("/applications/brave-browser.desktop")); 0064 QFile::copy(QFINDTESTDATA("data/applications/brave-efmjfjelnicpmdcmfikempdhlmainjcb-Default.desktop"), 0065 dataDir + QLatin1String("/applications/brave-efmjfjelnicpmdcmfikempdhlmainjcb-Default.desktop")); 0066 QFile::copy(QFINDTESTDATA("data/applications/marisa..desktop"), dataDir + QLatin1String("/applications/marisa..desktop")); 0067 0068 QFile::copy(QFINDTESTDATA("data/applications/kcm_kdeconnect.desktop"), dataDir + QLatin1String("/kservices5/kcm_kdeconnect.desktop")); 0069 0070 QFile::remove(KSycoca::absoluteFilePath()); 0071 KSycoca::self()->ensureCacheValid(); 0072 QVERIFY(QFile::exists(KSycoca::absoluteFilePath())); 0073 0074 // Verify that our enviromnent is as expected and no outside apps leak in 0075 QVERIFY(!KService::serviceByDesktopName(QStringLiteral("org.kde.ktrip"))); 0076 QVERIFY(KService::serviceByDesktopName(QStringLiteral("org.kde.dolphin"))); 0077 QVERIFY(KService::serviceByDesktopName(QStringLiteral("org.kde.konversation"))); 0078 } 0079 0080 void TaskToolsTest::shouldFindApp_data() 0081 { 0082 QTest::addColumn<QString>("inputFileName"); 0083 QTest::addColumn<QString>("id"); 0084 QTest::addColumn<QString>("name"); 0085 QTest::addColumn<QString>("genericName"); 0086 QTest::addColumn<QUrl>("url"); 0087 0088 QTest::newRow("Konversation") << QStringLiteral("org.kde.konversation.desktop") << QStringLiteral("org.kde.konversation") << QStringLiteral("Konversation") 0089 << QStringLiteral("IRC Client") << QUrl(QStringLiteral("applications:org.kde.konversation.desktop")); 0090 0091 QTest::newRow("Dolphin") << QStringLiteral("org.kde.dolphin.desktop") << QStringLiteral("org.kde.dolphin") << QStringLiteral("Dolphin") 0092 << QStringLiteral("File Manager") << QUrl(QStringLiteral("applications:org.kde.dolphin.desktop")); 0093 } 0094 0095 void TaskToolsTest::shouldFindApp() 0096 { 0097 // FIXME Test icon. 0098 0099 QFETCH(QString, inputFileName); 0100 0101 const QUrl inputUrl = QUrl::fromLocalFile(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("applications/") + inputFileName)); 0102 0103 const AppData &data = appDataFromUrl(inputUrl); 0104 0105 QFETCH(QString, id); 0106 QFETCH(QString, name); 0107 QFETCH(QString, genericName); 0108 QFETCH(QUrl, url); 0109 0110 QCOMPARE(data.id, id); 0111 QCOMPARE(data.name, name); 0112 QCOMPARE(data.genericName, genericName); 0113 QCOMPARE(data.url, url); 0114 } 0115 0116 void TaskToolsTest::shouldFindDefaultApp() 0117 { 0118 // FIXME Test other recognized default app types. 0119 0120 KConfigGroup config(KSharedConfig::openConfig(), "General"); 0121 config.writePathEntry("BrowserApplication", QLatin1String("konqueror")); 0122 0123 QVERIFY(defaultApplication(QUrl("wrong://url")).isEmpty()); 0124 QCOMPARE(defaultApplication(QUrl("preferred://browser")), QLatin1String("konqueror")); 0125 } 0126 0127 void TaskToolsTest::shouldCompareLauncherUrls() 0128 { 0129 QUrl a(QLatin1String("file:///usr/share/applications/org.kde.dolphin.desktop")); 0130 QUrl b(QLatin1String("file:///usr/share/applications/org.kde.konsole.desktop")); 0131 QUrl c(QLatin1String("file:///usr/share/applications/org.kde.dolphin.desktop?iconData=foo")); 0132 QUrl d(QLatin1String("file:///usr/share/applications/org.kde.konsole.desktop?iconData=bar")); 0133 0134 QVERIFY(launcherUrlsMatch(QUrl(a), QUrl(a))); 0135 QVERIFY(launcherUrlsMatch(QUrl(a), QUrl(a), Strict)); 0136 QVERIFY(launcherUrlsMatch(QUrl(a), QUrl(a), IgnoreQueryItems)); 0137 0138 QVERIFY(!launcherUrlsMatch(QUrl(a), QUrl(b))); 0139 QVERIFY(!launcherUrlsMatch(QUrl(a), QUrl(b), Strict)); 0140 QVERIFY(!launcherUrlsMatch(QUrl(a), QUrl(b), IgnoreQueryItems)); 0141 0142 QVERIFY(!launcherUrlsMatch(QUrl(b), QUrl(c), Strict)); 0143 QVERIFY(!launcherUrlsMatch(QUrl(c), QUrl(d), Strict)); 0144 0145 QVERIFY(launcherUrlsMatch(QUrl(a), QUrl(c), IgnoreQueryItems)); 0146 QVERIFY(!launcherUrlsMatch(QUrl(c), QUrl(d), IgnoreQueryItems)); 0147 } 0148 0149 void TaskToolsTest::testWindowUrlFromMetadata() 0150 { 0151 QFETCH(QString, appId); 0152 QFETCH(QString, xWindowsWMClassName); 0153 QFETCH(QUrl, resultUrl); 0154 0155 const QUrl actualResult = windowUrlFromMetadata(appId, 0, KSharedConfig::openConfig(QStringLiteral("taskmanagerrulestestrc")), xWindowsWMClassName); 0156 0157 QCOMPARE(actualResult, resultUrl); 0158 } 0159 0160 void TaskToolsTest::testWindowUrlFromMetadata_data() 0161 { 0162 QTest::addColumn<QString>("appId"); 0163 QTest::addColumn<QString>("xWindowsWMClassName"); 0164 QTest::addColumn<QUrl>("resultUrl"); 0165 0166 QTest::addRow("Dolphin") << QStringLiteral("org.kde.dolphin") << QString() << QUrl(QStringLiteral("applications:org.kde.dolphin.desktop")); 0167 QTest::addRow("Element (Flatpak)") << QStringLiteral("Element") << QStringLiteral("element") << QUrl(QStringLiteral("applications:im.riot.Riot.desktop")); 0168 QTest::addRow("Telegram (Flatpak)") << QStringLiteral("TelegramDesktop") << QStringLiteral("telegram-desktop") 0169 << QUrl(QStringLiteral("applications:org.telegram.desktop.desktop")); 0170 QTest::addRow("Spotify (Flatpak)") << QStringLiteral("Spotify") << QStringLiteral("spotify") 0171 << QUrl(QStringLiteral("applications:com.spotify.Client.desktop")); 0172 QTest::addRow("GammaRay") << QStringLiteral("GammaRay") << QStringLiteral("gammary-client") << QUrl(QStringLiteral("applications:GammaRay.desktop")); 0173 QTest::addRow("Gwenview Importer") << QStringLiteral("org.kde.gwenview_importer") << QStringLiteral("gwenview_importer") 0174 << QUrl(QStringLiteral("applications:org.kde.gwenview_importer.desktop")); 0175 QTest::addRow("kcm_autostart") << QStringLiteral("kcm_autostart") << QString() << QUrl(QStringLiteral("applications:kcm_autostart.desktop")); 0176 QTest::addRow("brave") << QStringLiteral("Brave-browser") << QStringLiteral("brave-browser") << QUrl("applications:brave-browser.desktop"); 0177 QTest::addRow("brave_webapp") << QStringLiteral("Brave-browser") << QStringLiteral("crx_efmjfjelnicpmdcmfikempdhlmainjcb") 0178 << QUrl("applications:brave-efmjfjelnicpmdcmfikempdhlmainjcb-Default.desktop"); 0179 0180 const QString dataDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); 0181 QTest::addRow("kcm_kdeconnect") << dataDir + QLatin1String("/kservices5/kcm_kdeconnect") << QString() 0182 << QUrl::fromLocalFile(dataDir + QLatin1String("/kservices5/kcm_kdeconnect.desktop")); 0183 0184 QTest::addRow("Empty appId and xWindowsWMClassName, don't match marisa..desktop") << QString() << QString() << QUrl(); 0185 0186 // TODO test mapping rules 0187 } 0188 0189 QTEST_MAIN(TaskToolsTest) 0190 0191 #include "tasktoolstest.moc"