#include #include #include #if !defined(CPPUNIT_NO_TESTPLUGIN) #include #include #include #include CPPUNIT_NS_BEGIN PlugInManager::PlugInManager() : m_plugIns() { } PlugInManager::~PlugInManager() { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) unload( *it ); } void PlugInManager::load( const std::string &libraryFileName, const PlugInParameters ¶meters ) { PlugInInfo info; info.m_fileName = libraryFileName; info.m_manager = new DynamicLibraryManager( libraryFileName ); TestPlugInSignature plug = (TestPlugInSignature)((uintptr_t)info.m_manager->findSymbol( CPPUNIT_STRINGIZE( CPPUNIT_PLUGIN_EXPORTED_NAME ) )); info.m_interface = (*plug)(); m_plugIns.push_back( info ); info.m_interface->initialize( &TestFactoryRegistry::getRegistry(), parameters ); } void PlugInManager::unload( const std::string &libraryFileName ) { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) { if ( (*it).m_fileName == libraryFileName ) { unload( *it ); m_plugIns.erase( it ); break; } } } void PlugInManager::addListener( TestResult *eventManager ) { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) (*it).m_interface->addListener( eventManager ); } void PlugInManager::removeListener( TestResult *eventManager ) { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) (*it).m_interface->removeListener( eventManager ); } void PlugInManager::unload( PlugInInfo &plugIn ) { try { plugIn.m_interface->uninitialize( &TestFactoryRegistry::getRegistry() ); delete plugIn.m_manager; } catch (...) { delete plugIn.m_manager; plugIn.m_manager = NULL; throw; } } void PlugInManager::addXmlOutputterHooks( XmlOutputter *outputter ) { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) (*it).m_interface->addXmlOutputterHooks( outputter ); } void PlugInManager::removeXmlOutputterHooks() { for ( PlugIns::iterator it = m_plugIns.begin(); it != m_plugIns.end(); ++it ) (*it).m_interface->removeXmlOutputterHooks(); } CPPUNIT_NS_END #endif // !defined(CPPUNIT_NO_TESTPLUGIN)