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