Chris@16: // (C) Copyright Gennadiy Rozental 2005-2008. Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: // See http://www.boost.org/libs/test for the library home page. Chris@16: // Chris@16: // File : $RCSfile$ Chris@16: // Chris@101: // Version : $Revision$ Chris@16: // Chris@16: // Description : implements simple text based progress monitor Chris@16: // *************************************************************************** Chris@16: Chris@16: #ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER Chris@16: #define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER Chris@16: Chris@16: // Boost.Test Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: // Boost Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: namespace unit_test { Chris@16: Chris@16: // ************************************************************************** // Chris@16: // ************** progress_monitor ************** // Chris@16: // ************************************************************************** // Chris@16: Chris@16: namespace { Chris@16: Chris@16: struct progress_monitor_impl { Chris@16: // Constructor Chris@16: progress_monitor_impl() Chris@16: : m_stream( runtime_config::log_sink() ) Chris@16: {} Chris@16: Chris@16: std::ostream* m_stream; Chris@16: scoped_ptr m_progress_display; Chris@16: }; Chris@16: Chris@16: progress_monitor_impl& s_pm_impl() { static progress_monitor_impl the_inst; return the_inst; } Chris@16: Chris@16: } // local namespace Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: void Chris@16: progress_monitor_t::test_start( counter_t test_cases_amount ) Chris@16: { Chris@16: s_pm_impl().m_progress_display.reset( new progress_display( test_cases_amount, *s_pm_impl().m_stream ) ); Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: void Chris@16: progress_monitor_t::test_aborted() Chris@16: { Chris@16: (*s_pm_impl().m_progress_display) += s_pm_impl().m_progress_display->count(); Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: void Chris@16: progress_monitor_t::test_unit_finish( test_unit const& tu, unsigned long ) Chris@16: { Chris@16: if( tu.p_type == tut_case ) Chris@16: ++(*s_pm_impl().m_progress_display); Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: void Chris@16: progress_monitor_t::test_unit_skipped( test_unit const& tu ) Chris@16: { Chris@16: test_case_counter tcc; Chris@16: traverse_test_tree( tu, tcc ); Chris@16: Chris@16: (*s_pm_impl().m_progress_display) += tcc.p_count; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: void Chris@16: progress_monitor_t::set_stream( std::ostream& ostr ) Chris@16: { Chris@16: s_pm_impl().m_stream = &ostr; Chris@16: } Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: } // namespace unit_test Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: //____________________________________________________________________________// Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER