00001
#ifndef CPPUNIT_PLUGIN_PLUGINMANAGER_H
00002
#define CPPUNIT_PLUGIN_PLUGINMANAGER_H
00003
00004
#include <cppunit/Portability.h>
00005
00006
#if !defined(CPPUNIT_NO_TESTPLUGIN)
00007
00008
#if CPPUNIT_NEED_DLL_DECL
00009
#pragma warning( push )
00010
#pragma warning( disable: 4251 ) // X needs to have dll-interface to be used by clients of class Z
00011
#endif
00012
00013
#include <cppunit/plugin/PlugInParameters.h>
00014
struct CppUnitTestPlugIn;
00015
00016
CPPUNIT_NS_BEGIN
00017
00018
00019
class DynamicLibraryManager;
00020
class TestResult;
00021
class XmlOutputter;
00022
00023
00026 class CPPUNIT_API PlugInManager
00027 {
00028
public:
00031 PlugInManager();
00032
00034
virtual ~PlugInManager();
00035
00046
void load(
const std::string &libraryFileName,
00047
const PlugInParameters ¶meters =
PlugInParameters() );
00048
00053
void unload(
const std::string &libraryFileName );
00054
00059
void addListener(
TestResult *eventManager );
00060
00064
void removeListener(
TestResult *eventManager );
00065
00068
void addXmlOutputterHooks(
XmlOutputter *outputter );
00069
00074
void removeXmlOutputterHooks();
00075
00076
protected:
00079 struct PlugInInfo
00080 {
00081 std::string m_fileName;
00082 DynamicLibraryManager *m_manager;
00083 CppUnitTestPlugIn *m_interface;
00084 };
00085
00089
void unload(
PlugInInfo &plugIn );
00090
00091
private:
00093 PlugInManager(
const PlugInManager © );
00094
00096
void operator =(
const PlugInManager © );
00097
00098
private:
00099 typedef CppUnitDeque<PlugInInfo> PlugIns;
00100 PlugIns m_plugIns;
00101 };
00102
00103
00104
CPPUNIT_NS_END
00105
00106
#if CPPUNIT_NEED_DLL_DECL
00107
#pragma warning( pop )
00108
#endif
00109
00110
#endif // !defined(CPPUNIT_NO_TESTPLUGIN)
00111
00112
00113
#endif // CPPUNIT_PLUGIN_PLUGINMANAGER_H