/*----------------------------------------------------------------------------*/ bool Analyzer::addPlugin( const QString& file ) { if ( file.isEmpty() ) //nothing to load return false; PRINT_DEBUG ("Loading plugin: " << file); PluginLoader * loader = new PluginLoader( file ); Q_ASSERT (loader); if (loader->isLoaded()) { error( "Plugin already loaded!" ); loader->unload(); delete loader; return false; } const bool success = loader->init(); if (!success) { error( "Plugin initialization failed!" ); loader->unload(); delete loader; return false; } mPlugins.append( loader ); connect( loader, SIGNAL(destroyed( QObject* )), this, SLOT(removePlugin( QObject* )) ); emit newPlugin( loader ); return true; }
/** The main test program. * @param argc the number of arguments * @param argv the arguments * @return 0 on success */ int main(int argc, char **argv) { // Load just the test module bool success = true; cout << "Running plain module tests" << endl; ModuleDL *m = new ModuleDL(PLUGINDIR"/test_splugin.so"); try { m->open(); } catch (Exception &e) { e.print_trace(); throw; } success = test_module(m); m->close(); delete m; if ( success ) { cout << "SUCCESSFULLY tested plain module" << endl; } else { cout << "FAILED plain module tests, aborting further tests" << endl; return -1; } success = true; cout << endl << endl << "Running ModuleManagerTemplate tests" << endl; ModuleManagerTemplate<ModuleDL> mm(PLUGINDIR); Module *mod = mm.open_module("test_plugin.so"); if ( mod == NULL ) { cout << "Failed to retrieve module from manager" << endl; success = false; } else { cout << "Retrieved module from module manager" << endl; } success = test_module(mod); cout << "Testing ref count" << endl; cout << "RefCount (should be 1): " << mod->get_ref_count() << endl; cout << "Retrieving module twice, again" << endl; mm.open_module("test_plugin.so"); mm.open_module("test_plugin.so"); cout << "RefCount (should be 3): " << mod->get_ref_count() << endl; cout << "Closing module twice" << endl; mm.close_module(mod); mm.close_module(mod); cout << "RefCount (should be 1): " << mod->get_ref_count() << endl; cout << "Finally closing module" << endl; mm.close_module(mod); if ( mm.module_opened("test_plugin.so") ) { cout << "Plugin still opened, bug!" << endl; success = false; } else { cout << "Plugin has been unloaded from module manager" << endl; } if ( success ) { cout << "SUCCESSFULLY tested module manager" << endl; } else { cout << "FAILED module manager tests, aborting further tests" << endl; return 2; } success = true; cout << endl << endl << "Running PluginLoader tests" << endl; PluginLoader *pl = new PluginLoader(PLUGINDIR, NULL); Plugin *p; try { p = pl->load("test_plugin"); success = test_plugin(p); pl->unload(p); success = true; } catch (PluginLoadException &e) { cout << "Could not load plugin" << endl; e.print_trace(); success = false; } delete pl; if ( success ) { cout << "SUCCESSFULLY tested PluginLoader" << endl; } else { cout << "FAILED module manager tests, aborting further tests" << endl; return 3; } return 0; }