Tizen 2.1 base
[platform/upstream/libbullet.git] / UnitTests / cppunit / include / cppunit / extensions / TestSuiteBuilderContext.h
1 #ifndef CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
2 #define CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
3
4 #include <cppunit/Portability.h>
5 #include <cppunit/portability/CppUnitMap.h>
6 #include <string>
7
8 #if CPPUNIT_NEED_DLL_DECL
9 #pragma warning( push )
10 #pragma warning( disable: 4251 )  // X needs to have dll-interface to be used by clients of class Z
11 #endif
12
13
14 CPPUNIT_NS_BEGIN
15
16 class TestSuite;
17 class TestFixture;
18 class TestFixtureFactory;
19 class TestNamer;
20
21 /*! \brief Context used when creating test suite in HelperMacros.
22  *
23  * Base class for all context used when creating test suite. The
24  * actual context type during test suite creation is TestSuiteBuilderContext.
25  *
26  * \sa CPPUNIT_TEST_SUITE, CPPUNIT_TEST_SUITE_ADD_TEST, 
27  *     CPPUNIT_TEST_SUITE_ADD_CUSTOM_TESTS.
28  */
29 class CPPUNIT_API TestSuiteBuilderContextBase
30 {
31 public:
32   /*! \brief Constructs a new context.
33    *
34    * You should not use this. The context is created in 
35    * CPPUNIT_TEST_SUITE().
36    */
37   TestSuiteBuilderContextBase( TestSuite &suite,
38                                const TestNamer &namer,
39                                TestFixtureFactory &factory );
40
41   virtual ~TestSuiteBuilderContextBase();
42
43   /*! \brief Adds a test to the fixture suite.
44    *
45    * \param test Test to add to the fixture suite. Must not be \c NULL.
46    */
47   void addTest( Test *test );
48
49   /*! \brief Returns the fixture name.
50    * \return Fixture name. It is the name used to name the fixture
51    *         suite.
52    */
53   std::string getFixtureName() const;
54
55   /*! \brief Returns the name of the test for the specified method.
56    *
57    * \param testMethodName Name of the method that implements a test.
58    * \return A string that is the concatenation of the test fixture name 
59    *         (returned by getFixtureName()) and\a testMethodName, 
60    *         separated using '::'. This provides a fairly unique name for a given
61    *         test.
62    */
63   std::string getTestNameFor( const std::string &testMethodName ) const;
64
65   /*! \brief Adds property pair.
66    * \param key   PropertyKey string to add.
67    * \param value PropertyValue string to add.
68    */
69   void addProperty( const std::string &key, 
70                     const std::string &value );
71   
72   /*! \brief Returns property value assigned to param key.
73    * \param key PropertyKey string.
74    */
75   const std::string getStringProperty( const std::string &key ) const;
76
77 protected:
78   TestFixture *makeTestFixture() const;
79
80   // Notes: we use a vector here instead of a map to work-around the
81   // shared std::map in dll bug in VC6.
82   // See http://www.dinkumware.com/vc_fixes.html for detail.
83   typedef std::pair<std::string,std::string> Property;
84   typedef CppUnitVector<Property> Properties;
85
86   TestSuite &m_suite;
87   const TestNamer &m_namer;
88   TestFixtureFactory &m_factory;
89
90 private:
91   Properties m_properties;
92 };
93
94
95 /*! \brief Type-sage context used when creating test suite in HelperMacros.
96  * 
97  * \sa TestSuiteBuilderContextBase.
98  */
99 template<class Fixture>
100 class TestSuiteBuilderContext : public TestSuiteBuilderContextBase
101 {
102 public:
103   typedef Fixture FixtureType;
104
105   TestSuiteBuilderContext( TestSuiteBuilderContextBase &contextBase )
106       : TestSuiteBuilderContextBase( contextBase )
107   {
108   }
109
110   /*! \brief Returns a new TestFixture instance.
111    * \return A new fixture instance. The fixture instance is returned by
112    *         the TestFixtureFactory passed on construction. The actual type 
113    *         is that of the fixture on which the static method suite() 
114    *         was called.
115    */
116   FixtureType *makeFixture() const
117   {
118     return CPPUNIT_STATIC_CAST( FixtureType *, 
119                                 TestSuiteBuilderContextBase::makeTestFixture() );
120   }
121 };
122
123
124 CPPUNIT_NS_END
125
126 #if CPPUNIT_NEED_DLL_DECL
127 #pragma warning( pop )
128 #endif
129
130 #endif // CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
131