source: trunk/contrib/cppunit-1.12.2/include/cppunit/extensions/TestSuiteBuilderContext.h @ 876

Last change on this file since 876 was 876, checked in by sam, 9 years ago

contrib: add a precompiled Win32 version of CppUnit and update build system
accordingly.

File size: 3.7 KB
Line 
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
14CPPUNIT_NS_BEGIN
15
16class TestSuite;
17class TestFixture;
18class TestFixtureFactory;
19class 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 */
29class CPPUNIT_API TestSuiteBuilderContextBase
30{
31public:
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
77protected:
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
90private:
91  Properties m_properties;
92};
93
94
95/*! \brief Type-sage context used when creating test suite in HelperMacros.
96 *
97 * \sa TestSuiteBuilderContextBase.
98 */
99template<class Fixture>
100class TestSuiteBuilderContext : public TestSuiteBuilderContextBase
101{
102public:
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
124CPPUNIT_NS_END
125
126#if CPPUNIT_NEED_DLL_DECL
127#pragma warning( pop )
128#endif
129
130#endif // CPPUNIT_HELPER_TESTSUITEBUILDERCONTEXT_H
131
Note: See TracBrowser for help on using the repository browser.