1 /*
2     SPDX-FileCopyrightText: 2008 Andreas Pakulat <apaku@gmx.de>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "test_plugincontroller.h"
8 
9 #include "testfilepaths.h"
10 #include "plugins/nonguiinterface.h"
11 
12 #include <QSignalSpy>
13 #include <QTest>
14 
15 #include <tests/autotestshell.h>
16 #include <tests/testcore.h>
17 
18 #include "../core.h"
19 #include "../plugincontroller.h"
20 
21 using namespace KDevelop;
22 
initTestCase()23 void TestPluginController::initTestCase()
24 {
25     qApp->addLibraryPath(QStringLiteral(TEST_PLUGIN_DIR));
26 
27     AutoTestShell::init({QStringLiteral("test_nonguiinterface")});
28     TestCore::initialize( Core::NoUi );
29     m_pluginCtrl = Core::self()->pluginControllerInternal();
30 }
31 
cleanupTestCase()32 void TestPluginController::cleanupTestCase()
33 {
34     TestCore::shutdown();
35 }
36 
pluginInfo()37 void TestPluginController::pluginInfo()
38 {
39     IPlugin* plugin = m_pluginCtrl->loadPlugin(QStringLiteral("test_nonguiinterface"));
40     QVERIFY(plugin);
41     KPluginMetaData pluginInfo = m_pluginCtrl->pluginInfo(plugin);
42     QCOMPARE(pluginInfo.pluginId(), QStringLiteral("test_nonguiinterface"));
43 }
44 
loadUnloadPlugin()45 void TestPluginController::loadUnloadPlugin()
46 {
47     QSignalSpy spy(m_pluginCtrl, SIGNAL(pluginLoaded(KDevelop::IPlugin*)));
48     QSignalSpy spyloading(m_pluginCtrl, SIGNAL(loadingPlugin(QString)));
49     QVERIFY(spy.isValid());
50     QVERIFY(spyloading.isValid());
51     m_pluginCtrl->loadPlugin(QStringLiteral("test_nonguiinterface"));
52     QVERIFY( m_pluginCtrl->plugin(QStringLiteral("test_nonguiinterface")) );
53 
54     QCOMPARE(spy.size(), 1);
55     QCOMPARE(spyloading.size(), 1);
56 
57     QList<QVariant> args = spyloading.takeFirst();
58     QCOMPARE( args.at(0).toString(), QStringLiteral("test_nonguiinterface") );
59 
60     QSignalSpy spy2(m_pluginCtrl, SIGNAL(pluginUnloaded(KDevelop::IPlugin*)) );
61     QSignalSpy spy3(m_pluginCtrl, SIGNAL(unloadingPlugin(KDevelop::IPlugin*)) );
62     QVERIFY(spy2.isValid());
63     QVERIFY(spy3.isValid());
64     m_pluginCtrl->unloadPlugin(QStringLiteral("test_nonguiinterface"));
65     QVERIFY( !m_pluginCtrl->plugin(QStringLiteral("test_nonguiinterface")) );
66 
67     QCOMPARE(spy2.size(), 1);
68     QCOMPARE(spy3.size(), 1);
69 }
70 
loadFromExtension()71 void TestPluginController::loadFromExtension()
72 {
73     IPlugin* plugin = m_pluginCtrl->pluginForExtension( QStringLiteral("org.kdevelop.ITestNonGuiInterface") );
74     QVERIFY( plugin );
75     QVERIFY( plugin->inherits("org.kdevelop.ITestNonGuiInterface") );
76     QVERIFY( plugin->extension<ITestNonGuiInterface>());
77 }
78 
benchPluginForExtension()79 void TestPluginController::benchPluginForExtension()
80 {
81     QBENCHMARK {
82         IPlugin* plugin = m_pluginCtrl->pluginForExtension( QStringLiteral("org.kdevelop.ITestNonGuiInterface") );
83         QVERIFY( plugin );
84     }
85 }
86 
87 QTEST_MAIN( TestPluginController)
88