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.
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
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 ) ); \
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; \
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 ); \
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 ) > \
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 ) \
82 } BOOST_JOIN( test_name, _exp_fail_num_spec_inst ); \
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 )() \
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() \
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 )
118 // ************************************************************************** //
119 // ************** BOOST_FIXTURE_TEST_CASE_TEMPLATE ************** //
120 // ************************************************************************** //
122 #define BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, F ) \
123 template<typename type_name> \
124 struct test_name : public F \
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; \
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() \
145 // ************************************************************************** //
146 // ************** BOOST_AUTO_TEST_CASE_TEMPLATE ************** //
147 // ************************************************************************** //
149 #define BOOST_AUTO_TEST_CASE_TEMPLATE( test_name, type_name, TL ) \
150 BOOST_FIXTURE_TEST_CASE_TEMPLATE( test_name, type_name, TL, BOOST_AUTO_TEST_CASE_FIXTURE )
152 // ************************************************************************** //
153 // ************** BOOST_TEST_CASE_TEMPLATE ************** //
154 // ************************************************************************** //
156 #define BOOST_TEST_CASE_TEMPLATE( name, typelist ) \
157 boost::unit_test::ut_detail::template_test_case_gen<name,typelist >( \
158 BOOST_TEST_STRINGIZE( name ) ) \
161 // ************************************************************************** //
162 // ************** BOOST_TEST_CASE_TEMPLATE_FUNCTION ************** //
163 // ************************************************************************** //
165 #define BOOST_TEST_CASE_TEMPLATE_FUNCTION( name, type_name ) \
166 template<typename type_name> \
167 void BOOST_JOIN( name, _impl )( boost::type<type_name>* ); \
170 template<typename TestType> \
171 static void run( boost::type<TestType>* frwrd = 0 ) \
173 BOOST_JOIN( name, _impl )( frwrd ); \
177 template<typename type_name> \
178 void BOOST_JOIN( name, _impl )( boost::type<type_name>* ) \
181 // ************************************************************************** //
182 // ************** BOOST_GLOBAL_FIXURE ************** //
183 // ************************************************************************** //
185 #define BOOST_GLOBAL_FIXTURE( F ) \
186 static boost::unit_test::ut_detail::global_fixture_impl<F> BOOST_JOIN( gf_, F ) ; \
189 // ************************************************************************** //
190 // ************** BOOST_AUTO_TEST_CASE_FIXTURE ************** //
191 // ************************************************************************** //
193 namespace boost { namespace unit_test { namespace ut_detail {
197 } // namespace ut_detail
201 // Intentionally is in global namespace, so that FIXURE_TEST_SUITE can reset it in user code.
202 typedef ::boost::unit_test::ut_detail::nil_t BOOST_AUTO_TEST_CASE_FIXTURE;
204 // ************************************************************************** //
205 // ************** Auto registration facility helper macros ************** //
206 // ************************************************************************** //
208 #define BOOST_AUTO_TU_REGISTRAR( test_name ) \
209 static boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ )
210 #define BOOST_AUTO_TC_INVOKER( test_name ) BOOST_JOIN( test_name, _invoker )
211 #define BOOST_AUTO_TC_UNIQUE_ID( test_name ) BOOST_JOIN( test_name, _id )
213 // ************************************************************************** //
214 // ************** BOOST_TEST_MAIN ************** //
215 // ************************************************************************** //
217 #if defined(BOOST_TEST_MAIN)
219 #ifdef BOOST_TEST_ALTERNATIVE_INIT_API
220 bool init_unit_test() {
222 ::boost::unit_test::test_suite*
223 init_unit_test_suite( int, char* [] ) {
226 #ifdef BOOST_TEST_MODULE
227 using namespace ::boost::unit_test;
228 assign_op( framework::master_test_suite().p_name.value, BOOST_TEST_STRINGIZE( BOOST_TEST_MODULE ).trim( "\"" ), 0 );
232 #ifdef BOOST_TEST_ALTERNATIVE_INIT_API
242 //____________________________________________________________________________//
244 #endif // BOOST_TEST_UNIT_TEST_SUITE_HPP_071894GER