summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2012-07-30 12:30:58 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-01 00:14:41 +0200
commit47c48ea87ae836b1c22255744ec2ef8aacdb61af (patch)
treef97b5a5d6cb6d9ab891035dec12dc6518c2c88f1 /tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
parent3e3790b2c78d3aeeff138ff7aca4a94f3bfeb850 (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.cpp24
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"