File indexing completed on 2024-04-14 14:18:20
0001 /* 0002 This file is part of the KDE Frameworks 0003 SPDX-FileCopyrightText: 2020 David Faure <faure@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include <KCModuleInfo> 0009 #include <KCMultiDialog> 0010 #include <KPluginInfo> 0011 #include <KPluginMetaData> 0012 #include <QObject> 0013 #include <QTest> 0014 0015 QT_WARNING_PUSH 0016 QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations") 0017 QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations") 0018 0019 class KCModuleInfoTest : public QObject 0020 { 0021 Q_OBJECT 0022 0023 private Q_SLOTS: 0024 void testExternalApp(); 0025 void testFakeKCM(); 0026 void testDesktopFileKCM(); 0027 void testInvalidKCM(); 0028 }; 0029 0030 #ifndef Q_OS_WIN 0031 void initLocale() 0032 { 0033 setenv("LC_ALL", "en_US.utf-8", 1); 0034 } 0035 0036 Q_CONSTRUCTOR_FUNCTION(initLocale) 0037 #endif 0038 0039 void KCModuleInfoTest::testExternalApp() 0040 { 0041 const QString yast = QFINDTESTDATA("YaST-systemsettings.desktop"); 0042 QVERIFY(!yast.isEmpty()); 0043 KCModuleInfo info(yast); 0044 QVERIFY(info.service()); 0045 QVERIFY(info.isValid()); 0046 } 0047 0048 void KCModuleInfoTest::testFakeKCM() 0049 { 0050 // Similar to kontact's code 0051 // This is the case of loading a plugin, and then asking it for its kcmServices() 0052 // If there are none, Dialog::addPluginInfos still creates a fake KCM, so the plugin can be enabled/disabled. 0053 const QVector<KPluginMetaData> pluginMetaDatas = KPluginMetaData::findPlugins(QStringLiteral("testplugins"), [](const KPluginMetaData &) { 0054 return true; 0055 }); 0056 const QList<KPluginInfo> pluginInfos = KPluginInfo::fromMetaData(pluginMetaDatas); 0057 QVERIFY(pluginInfos.count() > 0); 0058 KPluginInfo pluginInfo = pluginInfos.at(0); 0059 QVERIFY(pluginInfo.isValid()); 0060 0061 // WHEN 0062 KCModuleInfo info(pluginInfo); // like Dialog::addPluginInfos does 0063 0064 // THEN 0065 QVERIFY(info.isValid()); 0066 QCOMPARE(info.pluginInfo().name(), QStringLiteral("Test")); 0067 0068 #ifdef Q_OS_WIN 0069 QCOMPARE(QFileInfo(info.library()).fileName(), QStringLiteral("jsonplugin.dll")); 0070 QCOMPARE(QFileInfo(info.fileName()).fileName(), QStringLiteral("jsonplugin.dll")); 0071 #else 0072 QCOMPARE(QFileInfo(info.library()).fileName(), QStringLiteral("jsonplugin.so")); 0073 QCOMPARE(QFileInfo(info.fileName()).fileName(), QStringLiteral("jsonplugin.so")); 0074 #endif 0075 0076 QCOMPARE(info.icon(), QStringLiteral("view-pim-mail")); 0077 QCOMPARE(info.comment(), QStringLiteral("Test plugin")); 0078 QCOMPARE(info.docPath(), QStringLiteral("doc/path")); 0079 QVERIFY(!info.service()); 0080 } 0081 0082 void KCModuleInfoTest::testDesktopFileKCM() 0083 { 0084 const QString desktopFile = QFINDTESTDATA("desktopfilekcm/kcmtest.desktop"); 0085 QVERIFY(!desktopFile.isEmpty()); 0086 0087 // WHEN 0088 KCModuleInfo info(desktopFile); 0089 0090 // THEN 0091 QVERIFY(info.isValid()); 0092 QVERIFY(info.service()); 0093 QVERIFY(!info.pluginInfo().isValid()); 0094 QCOMPARE(QFileInfo(info.library()).fileName(), QStringLiteral("kcm_kded")); 0095 QCOMPARE(QFileInfo(info.fileName()).fileName(), QStringLiteral("kcmtest.desktop")); 0096 QCOMPARE(info.icon(), QStringLiteral("preferences-system-session-services")); 0097 QCOMPARE(info.comment(), QStringLiteral("Configure background services")); 0098 QCOMPARE(info.docPath(), QStringLiteral("kcontrol/kded/index.html")); 0099 0100 #if KCMUTILS_BUILD_DEPRECATED_SINCE(5, 85) 0101 // WHEN actually loading the module 0102 KCMultiDialog dlg; 0103 QVERIFY(dlg.addModule(info)); 0104 #endif 0105 } 0106 0107 void KCModuleInfoTest::testInvalidKCM() 0108 { 0109 KCModuleInfo info(QStringLiteral("doest_not_exist.desktop")); 0110 QVERIFY(!info.isValid()); 0111 QVERIFY(!info.service()); 0112 } 0113 0114 QTEST_MAIN(KCModuleInfoTest) 0115 #include "kcmoduleinfotest.moc"