diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2012-07-30 12:30:58 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-01 00:14:41 +0200 |
commit | 47c48ea87ae836b1c22255744ec2ef8aacdb61af (patch) | |
tree | f97b5a5d6cb6d9ab891035dec12dc6518c2c88f1 /tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp | |
parent | 3e3790b2c78d3aeeff138ff7aca4a94f3bfeb850 (diff) |
Fix reloading of plugins
Unloading and reloading a plugin didn't work correctly,
because we didn't reset instance to 0 on unload.
Task-number: QTBUG-26098
Change-Id: Ic3e4497f359b1ca455be949dce9cafa9d67d8039
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp')
-rw-r--r-- | tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp index b79479ace8..58081cc6e3 100644 --- a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp +++ b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp @@ -109,6 +109,7 @@ private slots: void loadDebugObj(); void loadCorruptElf(); void loadGarbage(); + void reloadPlugin(); }; void tst_QPluginLoader::errorString() @@ -291,5 +292,28 @@ void tst_QPluginLoader::loadGarbage() #endif } +void tst_QPluginLoader::reloadPlugin() +{ + QPluginLoader loader; + loader.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin + loader.load(); // not recommended, instance() should do the job. + PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance()); + QVERIFY(instance); + QCOMPARE(instance->pluginName(), QLatin1String("Plugin ok")); + + QSignalSpy spy(loader.instance(), SIGNAL(destroyed())); + QVERIFY(spy.isValid()); + QVERIFY(loader.unload()); // refcount reached 0, did really unload + QCOMPARE(spy.count(), 1); + + // reload plugin + QVERIFY(loader.load()); + QVERIFY(loader.isLoaded()); + + PluginInterface *instance2 = qobject_cast<PluginInterface*>(loader.instance()); + QVERIFY(instance2); + QCOMPARE(instance2->pluginName(), QLatin1String("Plugin ok")); +} + QTEST_MAIN(tst_QPluginLoader) #include "tst_qpluginloader.moc" |