Blame src/cppunit/PlugInManager.cpp

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