203 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			203 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | //  (C) Copyright Gennadiy Rozental 2001. | ||
|  | //  Distributed under the Boost Software License, Version 1.0. | ||
|  | //  (See accompanying file LICENSE_1_0.txt or copy at | ||
|  | //  http://www.boost.org/LICENSE_1_0.txt) | ||
|  | 
 | ||
|  | //  See http://www.boost.org/libs/test for the library home page. | ||
|  | // | ||
|  | //  File        : $RCSfile$ | ||
|  | // | ||
|  | //  Version     : $Revision$ | ||
|  | // | ||
|  | //  Description : unit test decorators implementation | ||
|  | // *************************************************************************** | ||
|  | 
 | ||
|  | #ifndef BOOST_TEST_TREE_DECORATOR_IPP_091911GER | ||
|  | #define BOOST_TEST_TREE_DECORATOR_IPP_091911GER | ||
|  | 
 | ||
|  | // Boost.Test | ||
|  | #include <boost/test/tree/decorator.hpp> | ||
|  | #include <boost/test/tree/test_unit.hpp> | ||
|  | 
 | ||
|  | #include <boost/test/framework.hpp> | ||
|  | #if BOOST_TEST_SUPPORT_TOKEN_ITERATOR | ||
|  | #include <boost/test/utils/iterator/token_iterator.hpp> | ||
|  | #endif | ||
|  | 
 | ||
|  | #include <boost/test/detail/throw_exception.hpp> | ||
|  | 
 | ||
|  | #include <boost/test/detail/suppress_warnings.hpp> | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | namespace boost { | ||
|  | namespace unit_test { | ||
|  | namespace decorator { | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************             decorator::collector             ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | collector& | ||
|  | collector::operator*( base const& d ) | ||
|  | { | ||
|  |     m_tu_decorators.push_back( d.clone() ); | ||
|  | 
 | ||
|  |     return *this; | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | void | ||
|  | collector::store_in( test_unit& tu ) | ||
|  | { | ||
|  |     tu.p_decorators.value.insert( tu.p_decorators.value.end(), m_tu_decorators.begin(), m_tu_decorators.end() ); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | void | ||
|  | collector::reset() | ||
|  | { | ||
|  |     m_tu_decorators.clear(); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************               decorator::base                ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | collector& | ||
|  | base::operator*() const | ||
|  | { | ||
|  |     return collector::instance() * *this; | ||
|  | } | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************               decorator::label               ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | label::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.add_label( m_label ); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************         decorator::expected_failures         ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | expected_failures::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.increase_exp_fail( m_exp_fail ); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************              decorator::timeout              ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | timeout::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.p_timeout.value = m_timeout; | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************            decorator::description            ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | description::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.p_description.value += m_description; | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************             decorator::depends_on            ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | depends_on::apply( test_unit& tu ) | ||
|  | { | ||
|  | #if !BOOST_TEST_SUPPORT_TOKEN_ITERATOR | ||
|  |     BOOST_TEST_SETUP_ASSERT( false, "depends_on decorator is not supported on this platform" ); | ||
|  | #else | ||
|  |     utils::string_token_iterator tit( m_dependency, (utils::dropped_delimeters = "/", utils::kept_delimeters = utils::dt_none) ); | ||
|  | 
 | ||
|  |     test_unit* dep = &framework::master_test_suite(); | ||
|  |     while( tit != utils::string_token_iterator() ) { | ||
|  |         BOOST_TEST_SETUP_ASSERT( dep->p_type == TUT_SUITE, std::string( "incorrect dependency specification " ) + m_dependency ); | ||
|  | 
 | ||
|  |         test_unit_id next_id = static_cast<test_suite*>(dep)->get( *tit ); | ||
|  | 
 | ||
|  |         BOOST_TEST_SETUP_ASSERT( next_id != INV_TEST_UNIT_ID, | ||
|  |                                  std::string( "incorrect dependency specification " ) + m_dependency ); | ||
|  | 
 | ||
|  |         dep = &framework::get( next_id, TUT_ANY ); | ||
|  |         ++tit; | ||
|  |     } | ||
|  | 
 | ||
|  |     tu.depends_on( dep ); | ||
|  | #endif | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************    decorator::enable_if/enabled/disabled     ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | enable_if_impl::apply_impl( test_unit& tu, bool condition ) | ||
|  | { | ||
|  |     BOOST_TEST_SETUP_ASSERT(tu.p_default_status == test_unit::RS_INHERIT, | ||
|  |                             "Can't apply multiple enabled/disabled decorators " | ||
|  |                             "to the same test unit " + tu.full_name()); | ||
|  | 
 | ||
|  |     tu.p_default_status.value = condition ? test_unit::RS_ENABLED : test_unit::RS_DISABLED; | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************              decorator::fixture              ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | fixture_t::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.p_fixtures.value.push_back( m_impl ); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | // ************************************************************************** // | ||
|  | // **************            decorator::depends_on             ************** // | ||
|  | // ************************************************************************** // | ||
|  | 
 | ||
|  | void | ||
|  | precondition::apply( test_unit& tu ) | ||
|  | { | ||
|  |     tu.add_precondition( m_precondition ); | ||
|  | } | ||
|  | 
 | ||
|  | //____________________________________________________________________________// | ||
|  | 
 | ||
|  | } // namespace decorator | ||
|  | } // namespace unit_test | ||
|  | } // namespace boost | ||
|  | 
 | ||
|  | #include <boost/test/detail/enable_warnings.hpp> | ||
|  | 
 | ||
|  | #endif // BOOST_TEST_TREE_DECORATOR_IPP_091911GER |