From fa55a3b11979c5ea7b09ec190ab578fa7846b331 2017-06-07 13:51:50 From: Alexandre Leroux Date: 2017-06-07 13:51:50 Subject: [PATCH] Unit tests for plugin loading (2) Tests implementation --- diff --git a/core/tests/Plugin/TestPluginManager.cpp b/core/tests/Plugin/TestPluginManager.cpp new file mode 100644 index 0000000..40facb8 --- /dev/null +++ b/core/tests/Plugin/TestPluginManager.cpp @@ -0,0 +1,81 @@ +#include + +#include +#include + +#include + +namespace { + +/// Path for the tests +const auto TESTS_RESOURCES_PATH = QFileInfo{ + QString{SCQCORE_TESTS_RESOURCES_PATH}, + "Plugin/TestPluginManager"}.absoluteFilePath(); + +QString pluginDirPath(const QString &pluginDirName) +{ + return QFileInfo{TESTS_RESOURCES_PATH, pluginDirName}.absoluteFilePath(); +} + +} // namespace + +class TestPluginManager : public QObject { + Q_OBJECT +private slots: + /// Defines data for plugin loading + /// @sa testLoadPlugin() + void testLoadPlugin_data(); + + /// Tests plugin loading + void testLoadPlugin(); +}; + +void TestPluginManager::testLoadPlugin_data() +{ + // ////////////// // + // Test structure // + // ////////////// // + + // Name of directory containing the plugins + QTest::addColumn("pluginDirName"); + // Number of loaded plugins expected + QTest::addColumn("nbPluginsLoaded"); + + // ////////// // + // Test cases // + // ////////// // + + QTest::newRow("Valid plugin") << QStringLiteral("Test_ValidPlugin") << 1; + + // Two different plugins + QTest::newRow("Valid plugins") << QStringLiteral("Test_ValidPlugins") << 2; + + // Two plugins with the same name: we expect that only one is loaded + QTest::newRow("Duplicated plugins") << QStringLiteral("Test_DuplicatedPlugins") << 1; + + QTest::newRow("Invalid plugin (not a DLL)") << QStringLiteral("Test_InvalidFileType") << 0; + QTest::newRow("Invalid plugin (not a SciQlop DLL)") + << QStringLiteral("Test_NotSciqlopDll") << 0; + QTest::newRow("Invalid plugin (missing metadata)") + << QStringLiteral("Test_MissingPluginMetadata") << 0; +} + +void TestPluginManager::testLoadPlugin() +{ + QFETCH(QString, pluginDirName); + QFETCH(int, nbPluginsLoaded); + + // Generates plugin dir + auto pluginDir = QDir{pluginDirPath(pluginDirName)}; + QVERIFY(pluginDir.exists()); + + // Load plugins + PluginManager pluginManager{}; + pluginManager.loadPlugins(pluginDir); + + // Check the number of plugins loaded + QCOMPARE(pluginManager.nbPluginsLoaded(), nbPluginsLoaded); +} + +QTEST_MAIN(TestPluginManager) +#include "TestPluginManager.moc"