12ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// (C) Copyright Gennadiy Rozental 2001-2008. 22ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Distributed under the Boost Software License, Version 1.0. 32ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// (See accompanying file LICENSE_1_0.txt or copy at 42ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// http://www.boost.org/LICENSE_1_0.txt) 52ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 62ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// See http://www.boost.org/libs/test for the library home page. 72ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// 82ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// File : $RCSfile$ 92ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// 102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Version : $Revision: 54633 $ 112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// 122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Description : defines test_unit, test_case, test_case_results, test_suite and test_tree_visitor 132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// *************************************************************************** 142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#ifndef BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER 162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#define BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER 172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Boost.Test 192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/config.hpp> 202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/global_typedef.hpp> 212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/utils/class_properties.hpp> 222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/utils/callback.hpp> 232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/fwd_decl.hpp> 242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/workaround.hpp> 252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/test_observer.hpp> 262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Boost 282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/shared_ptr.hpp> 292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/for_each.hpp> 302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/identity.hpp> 312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/type.hpp> 322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/type_traits/is_const.hpp> 332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// STL 352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <typeinfo> // for typeid 362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <string> // for std::string 372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <list> // for std::list 382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <vector> // for std::vector 392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/suppress_warnings.hpp> 412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehnamespace boost { 452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehnamespace unit_test { 472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_unit ************** // 502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL test_unit { 532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh enum { type = tut_any }; 552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh test_unit( const_string tu_name, test_unit_type t ); 582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // dependencies management 602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void depends_on( test_unit* tu ); 612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh bool check_dependencies() const; 622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Public r/o properties 642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh typedef BOOST_READONLY_PROPERTY(test_unit_id,(framework_impl)) id_t; 652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh typedef BOOST_READONLY_PROPERTY(test_unit_id,(test_suite)) parent_id_t; 662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh readonly_property<test_unit_type> p_type; // type for this test unit 672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh readonly_property<const_string> p_type_name; // "case"/"suite" 682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh id_t p_id; // unique id for this test unit 692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh parent_id_t p_parent_id; // parent test suite id 702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Public r/w properties 722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh readwrite_property<std::string> p_name; // name for this test unit 732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh readwrite_property<unsigned> p_timeout; // timeout for the test unit execution 742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh readwrite_property<counter_t> p_expected_failures; // number of expected failures in this test unit 752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh mutable readwrite_property<bool> p_enabled; // enabled status for this unit 762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void increase_exp_fail( unsigned num ); 782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprotected: 802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh ~test_unit(); 812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh std::list<test_unit_id> m_dependencies; 852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_case_generator ************** // 892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL test_unit_generator { 922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual test_unit* next() const = 0; 942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprotected: 962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh BOOST_TEST_PROTECTED_VIRTUAL ~test_unit_generator() {} 972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_case ************** // 1012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL test_case : public test_unit { 1042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 1052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh enum { type = tut_case }; 1062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 1082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh test_case( const_string tc_name, callback0<> const& test_func ); 1092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Access methods 1112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh callback0<> const& test_func() const { return m_test_func; } 1122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 1142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh friend class framework_impl; 1152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh ~test_case() {} 1162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // BOOST_MSVC <= 1200 have problems with callback as property 1182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 1192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh callback0<> m_test_func; 1202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 1212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_suite ************** // 1242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL test_suite : public test_unit { 1272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 1282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh enum { type = tut_suite }; 1292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 1312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit test_suite( const_string ts_name ); 1322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // test unit list management 1342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void add( test_unit* tu, counter_t expected_failures = 0, unsigned timeout = 0 ); 1352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void add( test_unit_generator const& gen, unsigned timeout = 0 ); 1362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void remove( test_unit_id id ); 1372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // access methods 1392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh test_unit_id get( const_string tu_name ) const; 1402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh std::size_t size() const { return m_members.size(); } 1412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprotected: 1432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh friend BOOST_TEST_DECL 1442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void traverse_test_tree( test_suite const&, test_tree_visitor& ); 1452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh friend class framework_impl; 1462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual ~test_suite() {} 1472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 1492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh std::vector<test_unit_id> m_members; 1502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 1512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** master_test_suite ************** // 1542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL master_test_suite_t : public test_suite { 1572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 1582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh master_test_suite_t() : test_suite( "Master Test Suite" ) 1592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh , argc( 0 ) 1602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh , argv( 0 ) 1612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh {} 1622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 1642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh int argc; 1652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh char** argv; 1662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 1672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_tree_visitor ************** // 1712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL test_tree_visitor { 1742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 1752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // test tree visitor interface 1762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void visit( test_case const& ) {} 1772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual bool test_suite_start( test_suite const& ) { return true; } 1782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void test_suite_finish( test_suite const& ) {} 1792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprotected: 1812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh BOOST_TEST_PROTECTED_VIRTUAL ~test_tree_visitor() {} 1822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 1832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** traverse_test_tree ************** // 1862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 1872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_TEST_DECL void traverse_test_tree( test_case const&, test_tree_visitor& ); 1892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_TEST_DECL void traverse_test_tree( test_suite const&, test_tree_visitor& ); 1902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_TEST_DECL void traverse_test_tree( test_unit_id , test_tree_visitor& ); 1912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 1932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 1942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehinline void 1952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtraverse_test_tree( test_unit const& tu, test_tree_visitor& V ) 1962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ 1972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh if( tu.p_type == tut_case ) 1982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh traverse_test_tree( static_cast<test_case const&>( tu ), V ); 1992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh else 2002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh traverse_test_tree( static_cast<test_suite const&>( tu ), V ); 2012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} 2022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 2042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_case_counter ************** // 2072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass test_case_counter : public test_tree_visitor { 2102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 2112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 2122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh test_case_counter() : p_count( 0 ) {} 2132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh BOOST_READONLY_PROPERTY( counter_t, (test_case_counter)) p_count; 2152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 2162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // test tree visitor interface 2172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void visit( test_case const& ); 2182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual bool test_suite_start( test_suite const& ts ) { return ts.p_enabled; } 2192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 2202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_being_aborted ************** // 2232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct BOOST_TEST_DECL test_being_aborted {}; 2262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** object generators ************** // 2292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehnamespace ut_detail { 2322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_TEST_DECL std::string normalize_test_case_name( const_string tu_name ); 2342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename InstanceType,typename UserTestCase> 2362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct user_tc_method_invoker { 2372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh typedef void (UserTestCase::*TestMethod )(); 2382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh user_tc_method_invoker( shared_ptr<InstanceType> inst, TestMethod test_method ) 2402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh : m_inst( inst ), m_test_method( test_method ) {} 2412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void operator()() { ((*m_inst).*m_test_method)(); } 2432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh shared_ptr<InstanceType> m_inst; 2452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh TestMethod m_test_method; 2462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 2472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} // namespace ut_detail 2492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 2512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehinline test_case* 2532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehmake_test_case( callback0<> const& test_func, const_string tc_name ) 2542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ 2552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh return new test_case( ut_detail::normalize_test_case_name( tc_name ), test_func ); 2562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} 2572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 2592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename UserTestCase, typename InstanceType> 2612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehinline test_case* 2622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehmake_test_case( void (UserTestCase::* test_method )(), 2632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh const_string tc_name, 2642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh boost::shared_ptr<InstanceType> user_test_case ) 2652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ 2662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh return new test_case( ut_detail::normalize_test_case_name( tc_name ), 2672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh ut_detail::user_tc_method_invoker<InstanceType,UserTestCase>( user_test_case, test_method ) ); 2682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} 2692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 2712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** auto_test_unit_registrar ************** // 2742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 2752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehnamespace ut_detail { 2772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct BOOST_TEST_DECL auto_test_unit_registrar 2792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ 2802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructors 2812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh auto_test_unit_registrar( test_case* tc, counter_t exp_fail ); 2822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit auto_test_unit_registrar( const_string ts_name ); 2832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit auto_test_unit_registrar( test_unit_generator const& tc_gen ); 2842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit auto_test_unit_registrar( int ); 2852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 2872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh static std::list<test_suite*>& curr_ts_store(); 2882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 2892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 2912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename T> 2932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct auto_tc_exp_fail { 2942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh auto_tc_exp_fail() : m_value( 0 ) {} 2952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 2962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit auto_tc_exp_fail( unsigned v ) 2972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh : m_value( v ) 2982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh { 2992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh instance() = this; 3002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh } 3012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh static auto_tc_exp_fail*& instance() 3032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh { 3042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh static auto_tc_exp_fail inst; 3052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh static auto_tc_exp_fail* inst_ptr = &inst; 3062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh return inst_ptr; 3082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh } 3092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh unsigned value() const { return m_value; } 3112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 3132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 3142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh unsigned m_value; 3152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 3162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 3182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} // namespace ut_detail 3202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** global_fixture ************** // 3232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass BOOST_TEST_DECL global_fixture : public test_observer { 3262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 3272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 3282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh global_fixture(); 3292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 3302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 3322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehnamespace ut_detail { 3342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename F> 3362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct global_fixture_impl : public global_fixture { 3372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 3382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh global_fixture_impl(): m_fixure( 0 ) {} 3392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // test observer interface 3412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void test_start( counter_t ) { m_fixure = new F; } 3422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void test_finish() { delete m_fixure; m_fixure = 0; } 3432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual void test_aborted() { delete m_fixure; m_fixure = 0; } 3442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 3462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 3472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh F* m_fixure; 3482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 3492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_case_template_invoker ************** // 3522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename TestCaseTemplate,typename TestType> 3552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass test_case_template_invoker { 3562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 3572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void operator()() { TestCaseTemplate::run( (boost::type<TestType>*)0 ); } 3582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 3592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** generate_test_case_4_type ************** // 3622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename Generator,typename TestCaseTemplate> 3652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct generate_test_case_4_type { 3662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh explicit generate_test_case_4_type( const_string tc_name, Generator& G ) 3672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh : m_test_case_name( tc_name ) 3682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh , m_holder( G ) 3692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh {} 3702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh template<typename TestType> 3722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh void operator()( mpl::identity<TestType> ) 3732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh { 3742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh std::string full_name; 3752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh assign_op( full_name, m_test_case_name, 0 ); 3762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh full_name += '<'; 3772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh full_name += typeid(TestType).name(); 3782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh if( boost::is_const<TestType>::value ) 3792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh full_name += " const"; 3802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh full_name += '>'; 3812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh m_holder.m_test_cases.push_back( 3832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh new test_case( full_name, test_case_template_invoker<TestCaseTemplate,TestType>() ) ); 3842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh } 3852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehprivate: 3872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 3882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh const_string m_test_case_name; 3892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh Generator& m_holder; 3902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 3912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************** test_case_template ************** // 3942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// ************************************************************************** // 3952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 3962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<typename TestCaseTemplate,typename TestTypesList> 3972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehclass template_test_case_gen : public test_unit_generator { 3982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehpublic: 3992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Constructor 4002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh template_test_case_gen( const_string tc_name ) 4012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh { 4022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh typedef generate_test_case_4_type<template_test_case_gen<TestCaseTemplate,TestTypesList>, 4032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh TestCaseTemplate 4042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh > single_test_gen; 4052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh mpl::for_each<TestTypesList,mpl::make_identity<mpl::_> >( single_test_gen( tc_name, *this ) ); 4062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh } 4072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh virtual test_unit* next() const 4092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh { 4102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh if( m_test_cases.empty() ) 4112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh return 0; 4122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh test_unit* res = m_test_cases.front(); 4142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh m_test_cases.pop_front(); 4152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh return res; 4172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh } 4182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh // Data members 4202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh mutable std::list<test_unit*> m_test_cases; 4212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}; 4222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//____________________________________________________________________________// 4242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} // namespace ut_detail 4262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} // unit_test 4282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} // namespace boost 4302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/test/detail/enable_warnings.hpp> 4322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 4332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif // BOOST_TEST_UNIT_TEST_SUITE_IMPL_HPP_071894GER 4342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh 435