Blame src/cppunit/PlugInManager.cpp

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