00001 #ifndef CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
00002 #define CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
00003
00004 #include <cppunit/Portability.h>
00005 #include <cppunit/portability/CppUnitMap.h>
00006 #include <string>
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
00014 CPPUNIT_NS_BEGIN
00015
00016 class TestSuite;
00017 class TestFixture;
00018 class TestFixtureFactory;
00019 class TestNamer;
00020
00029 class CPPUNIT_API TestSuiteBuilderContextBase
00030 {
00031 public:
00037 TestSuiteBuilderContextBase( TestSuite &suite,
00038 const TestNamer &namer,
00039 TestFixtureFactory &factory );
00040
00041 virtual ~TestSuiteBuilderContextBase();
00042
00047 void addTest( Test *test );
00048
00053 std::string getFixtureName() const;
00054
00063 std::string getTestNameFor( const std::string &testMethodName ) const;
00064
00069 void addProperty( const std::string &key,
00070 const std::string &value );
00071
00075 const std::string getStringProperty( const std::string &key ) const;
00076
00077 protected:
00078 TestFixture *makeTestFixture() const;
00079
00080
00081
00082
00083 typedef std::pair<std::string,std::string> Property;
00084 typedef CppUnitVector<Property> Properties;
00085
00086 TestSuite &m_suite;
00087 const TestNamer &m_namer;
00088 TestFixtureFactory &m_factory;
00089
00090 private:
00091 Properties m_properties;
00092 };
00093
00094
00099 template<class Fixture>
00100 class TestSuiteBuilderContext : public TestSuiteBuilderContextBase
00101 {
00102 public:
00103 typedef Fixture FixtureType;
00104
00105 TestSuiteBuilderContext( TestSuiteBuilderContextBase &contextBase )
00106 : TestSuiteBuilderContextBase( contextBase )
00107 {
00108 }
00109
00116 FixtureType *makeFixture() const
00117 {
00118 return CPPUNIT_STATIC_CAST( FixtureType *,
00119 TestSuiteBuilderContextBase::makeTestFixture() );
00120 }
00121 };
00122
00123
00124 CPPUNIT_NS_END
00125
00126 #if CPPUNIT_NEED_DLL_DECL
00127 #pragma warning( pop )
00128 #endif
00129
00130 #endif // CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
00131