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"