Home | History | Annotate | Download | only in impl
      1 //  (C) Copyright Gennadiy Rozental 2005-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)
      5 
      6 //  See http://www.boost.org/libs/test for the library home page.
      7 //
      8 //  File        : $RCSfile$
      9 //
     10 //  Version     : $Revision: 57992 $
     11 //
     12 //  Description : implements simple text based progress monitor
     13 // ***************************************************************************
     14 
     15 #ifndef BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
     16 #define BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
     17 
     18 // Boost.Test
     19 #include <boost/test/progress_monitor.hpp>
     20 #include <boost/test/unit_test_suite_impl.hpp>
     21 
     22 #include <boost/test/detail/unit_test_parameters.hpp>
     23 
     24 // Boost
     25 #include <boost/progress.hpp>
     26 #include <boost/scoped_ptr.hpp>
     27 
     28 #include <boost/test/detail/suppress_warnings.hpp>
     29 
     30 //____________________________________________________________________________//
     31 
     32 namespace boost {
     33 
     34 namespace unit_test {
     35 
     36 // ************************************************************************** //
     37 // **************                progress_monitor              ************** //
     38 // ************************************************************************** //
     39 
     40 namespace {
     41 
     42 struct progress_monitor_impl {
     43     // Constructor
     44     progress_monitor_impl()
     45         : m_stream( runtime_config::log_sink() )
     46     {}
     47 
     48     std::ostream*                m_stream;
     49     scoped_ptr<progress_display> m_progress_display;
     50 };
     51 
     52 progress_monitor_impl& s_pm_impl() { static progress_monitor_impl the_inst; return the_inst; }
     53 
     54 } // local namespace
     55 
     56 //____________________________________________________________________________//
     57 
     58 void
     59 progress_monitor_t::test_start( counter_t test_cases_amount )
     60 {
     61     s_pm_impl().m_progress_display.reset( new progress_display( test_cases_amount, *s_pm_impl().m_stream ) );
     62 }
     63 
     64 //____________________________________________________________________________//
     65 
     66 void
     67 progress_monitor_t::test_aborted()
     68 {
     69     (*s_pm_impl().m_progress_display) += s_pm_impl().m_progress_display->count();
     70 }
     71 
     72 //____________________________________________________________________________//
     73 
     74 void
     75 progress_monitor_t::test_unit_finish( test_unit const& tu, unsigned long )
     76 {
     77     if( tu.p_type == tut_case )
     78         ++(*s_pm_impl().m_progress_display);
     79 }
     80 
     81 //____________________________________________________________________________//
     82 
     83 void
     84 progress_monitor_t::test_unit_skipped( test_unit const& tu )
     85 {
     86     test_case_counter tcc;
     87     traverse_test_tree( tu, tcc );
     88     
     89     (*s_pm_impl().m_progress_display) += tcc.p_count;
     90 }
     91 
     92 //____________________________________________________________________________//
     93 
     94 void
     95 progress_monitor_t::set_stream( std::ostream& ostr )
     96 {
     97     s_pm_impl().m_stream = &ostr;
     98 }
     99 
    100 //____________________________________________________________________________//
    101     
    102 } // namespace unit_test
    103 
    104 } // namespace boost
    105 
    106 //____________________________________________________________________________//
    107 
    108 #include <boost/test/detail/enable_warnings.hpp>
    109 
    110 #endif // BOOST_TEST_PROGRESS_MONITOR_IPP_020105GER
    111