fix doc example typo
[boost.git] / boost / test / unit_test_suite.hpp
blob94f092972db87f2cd0170861a5928d058c235c57
1 // (C) Copyright Gennadiy Rozental 2001-2008.
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
6 // See http://www.boost.org/libs/test for the library home page.
7 //
8 // File : $RCSfile$
9 //
10 // Version : $Revision$
12 // Description : defines Unit Test Framework public API
13 // ***************************************************************************
15 #ifndef BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
16 #define BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER
18 // Boost.Test
19 #include <boost/test/unit_test_suite_impl.hpp>
20 #include <boost/test/framework.hpp>
22 //____________________________________________________________________________//
24 // ************************************************************************** //
25 // ************** Non-auto (explicit) test case interface ************** //
26 // ************************************************************************** //
28 #define BOOST_TEST_CASE( test_function ) \
29 boost::unit_test::make_test_case( boost::unit_test::callback0<>(test_function), BOOST_TEST_STRINGIZE( test_function ) )
30 #define BOOST_CLASS_TEST_CASE( test_function, tc_instance ) \
31 boost::unit_test::make_test_case((test_function), BOOST_TEST_STRINGIZE( test_function ), tc_instance )
33 // ************************************************************************** //
34 // ************** BOOST_TEST_SUITE ************** //
35 // ************************************************************************** //
37 #define BOOST_TEST_SUITE( testsuite_name ) \
38 ( new boost::unit_test::test_suite( testsuite_name ) )
40 // ************************************************************************** //
41 // ************** BOOST_AUTO_TEST_SUITE ************** //
42 // ************************************************************************** //
44 #define BOOST_AUTO_TEST_SUITE( suite_name ) \
45 namespace suite_name { \
46 BOOST_AUTO_TU_REGISTRAR( suite_name )( BOOST_STRINGIZE( suite_name ) ); \
47 /**/
49 // ************************************************************************** //
50 // ************** BOOST_FIXTURE_TEST_SUITE ************** //
51 // ************************************************************************** //
53 #define BOOST_FIXTURE_TEST_SUITE( suite_name, F ) \
54 BOOST_AUTO_TEST_SUITE( suite_name ) \
55 typedef F BOOST_AUTO_TEST_CASE_FIXTURE; \
56 /**/
58 // ************************************************************************** //
59 // ************** BOOST_AUTO_TEST_SUITE_END ************** //
60 // ************************************************************************** //
62 #define BOOST_AUTO_TEST_SUITE_END() \
63 BOOST_AUTO_TU_REGISTRAR( BOOST_JOIN( end_suite, __LINE__ ) )( 1 ); \
64 } \
65 /**/
67 // ************************************************************************** //
68 // ************** BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES ************** //
69 // ************************************************************************** //
71 #define BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( test_name, n ) \
72 struct BOOST_AUTO_TC_UNIQUE_ID( test_name ); \
74 static struct BOOST_JOIN( test_name, _exp_fail_num_spec ) \
75 : boost::unit_test::ut_detail:: \
76 auto_tc_exp_fail<BOOST_AUTO_TC_UNIQUE_ID( test_name ) > \
77 { \
78 BOOST_JOIN( test_name, _exp_fail_num_spec )() \
79 : boost::unit_test::ut_detail:: \
80 auto_tc_exp_fail<BOOST_AUTO_TC_UNIQUE_ID( test_name ) >( n ) \
81 {} \
82 } BOOST_JOIN( test_name, _exp_fail_num_spec_inst ); \
84 /**/
86 // ************************************************************************** //
87 // ************** BOOST_FIXTURE_TEST_CASE ************** //
88 // ************************************************************************** //
90 #define BOOST_FIXTURE_TEST_CASE( test_name, F ) \
91 struct test_name : public F { void test_method(); }; \
93 static void BOOST_AUTO_TC_INVOKER( test_name )() \
94 { \
95 test_name t; \
96 t.test_method(); \
97 } \
99 struct BOOST_AUTO_TC_UNIQUE_ID( test_name ) {}; \
101 BOOST_AUTO_TU_REGISTRAR( test_name )( \
102 boost::unit_test::make_test_case( \
103 &BOOST_AUTO_TC_INVOKER( test_name ), #test_name ), \
104 boost::unit_test::ut_detail::auto_tc_exp_fail< \
105 BOOST_AUTO_TC_UNIQUE_ID( test_name )>::instance()->value() ); \
107 void test_name::test_method() \
108 /**/
110 // ************************************************************************** //
111 // ************** BOOST_AUTO_TEST_CASE ************** //
112 // ************************************************************************** //
114 #define BOOST_AUTO_TEST_CASE( test_name ) \
115 BOOST_FIXTURE_TEST_CASE( test_name, BOOST_AUTO_TEST_CASE_FIXTURE )
116 /**/
118 // ************************************************************************** //
119 // ************** BOOST_AUTO_TEST_CASE_TEMPLATE ************** //
120 // ************************************************************************** //
122 #define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL ) \
123 template<typename type_name> \
124 struct test_name : public BOOST_AUTO_TEST_CASE_FIXTURE \
125 { void test_method(); }; \
127 struct BOOST_AUTO_TC_INVOKER( test_name ) { \
128 template<typename TestType> \
129 static void run( boost::type<TestType>* = 0 ) \
131 test_name<TestType> t; \
132 t.test_method(); \
134 }; \
136 BOOST_AUTO_TU_REGISTRAR( test_name )( \
137 boost::unit_test::ut_detail::template_test_case_gen< \
138 BOOST_AUTO_TC_INVOKER( test_name ),TL >( \
139 BOOST_STRINGIZE( test_name ) ) ); \
141 template<typename type_name> \
142 void test_name<type_name>::test_method() \
143 /**/
145 // ************************************************************************** //
146 // ************** BOOST_TEST_CASE_TEMPLATE ************** //
147 // ************************************************************************** //
149 #define BOOST_TEST_CASE_TEMPLATE( name, typelist ) \
150 boost::unit_test::ut_detail::template_test_case_gen<name,typelist >( \
151 BOOST_TEST_STRINGIZE( name ) ) \
152 /**/
154 // ************************************************************************** //
155 // ************** BOOST_TEST_CASE_TEMPLATE_FUNCTION ************** //
156 // ************************************************************************** //
158 #define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name ) \
159 template<typename type_name> \
160 void BOOST_JOIN( name, _impl )( boost::type<type_name>* ); \
162 struct name { \
163 template<typename TestType> \
164 static void run( boost::type<TestType>* frwrd = 0 ) \
166 BOOST_JOIN( name, _impl )( frwrd ); \
168 }; \
170 template<typename type_name> \
171 void BOOST_JOIN( name, _impl )( boost::type<type_name>* ) \
172 /**/
174 // ************************************************************************** //
175 // ************** BOOST_GLOBAL_FIXURE ************** //
176 // ************************************************************************** //
178 #define BOOST_GLOBAL_FIXTURE( F ) \
179 static boost::unit_test::ut_detail::global_fixture_impl<F> BOOST_JOIN( gf_, F ) ; \
180 /**/
182 // ************************************************************************** //
183 // ************** BOOST_AUTO_TEST_CASE_FIXTURE ************** //
184 // ************************************************************************** //
186 namespace boost { namespace unit_test { namespace ut_detail {
188 struct nil_t {};
190 } // namespace ut_detail
191 } // unit_test
192 } // namespace boost
194 // Intentionally is in global namespace, so that FIXURE_TEST_SUITE can reset it in user code.
195 typedef ::boost::unit_test::ut_detail::nil_t BOOST_AUTO_TEST_CASE_FIXTURE;
197 // ************************************************************************** //
198 // ************** Auto registration facility helper macros ************** //
199 // ************************************************************************** //
201 #define BOOST_AUTO_TU_REGISTRAR( test_name ) \
202 static boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ )
203 #define BOOST_AUTO_TC_INVOKER( test_name ) BOOST_JOIN( test_name, _invoker )
204 #define BOOST_AUTO_TC_UNIQUE_ID( test_name ) BOOST_JOIN( test_name, _id )
206 // ************************************************************************** //
207 // ************** BOOST_TEST_MAIN ************** //
208 // ************************************************************************** //
210 #if defined(BOOST_TEST_MAIN)
212 #ifdef BOOST_TEST_ALTERNATIVE_INIT_API
213 bool init_unit_test() {
214 #else
215 ::boost::unit_test::test_suite*
216 init_unit_test_suite( int, char* [] ) {
217 #endif
219 #ifdef BOOST_TEST_MODULE
220 using namespace ::boost::unit_test;
221 assign_op( framework::master_test_suite().p_name.value, BOOST_TEST_STRINGIZE( BOOST_TEST_MODULE ).trim( "\"" ), 0 );
223 #endif
225 #ifdef BOOST_TEST_ALTERNATIVE_INIT_API
226 return true;
228 #else
229 return 0;
231 #endif
233 #endif
235 //____________________________________________________________________________//
237 #endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER