|
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 ¶meters )
|
|
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)
|