]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/test/impl/results_collector.ipp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / test / impl / results_collector.ipp
index fd74bdb65cdeab4f077299138c0f359a1063b417..906aa56aed02b037eeab7fc6b0efb8cb50561654 100644 (file)
@@ -5,11 +5,9 @@
 
 //  See http://www.boost.org/libs/test for the library home page.
 //
-//  File        : $RCSfile$
-//
-//  Version     : $Revision$
-//
-//  Description : implements Unit Test results collecting facility.
+/// @file
+/// Test results collecting facility.
+///
 // ***************************************************************************
 
 #ifndef BOOST_TEST_RESULTS_COLLECTOR_IPP_021105GER
@@ -19,6 +17,7 @@
 #include <boost/test/unit_test_log.hpp>
 #include <boost/test/results_collector.hpp>
 #include <boost/test/framework.hpp>
+#include <boost/test/execution_monitor.hpp>
 
 #include <boost/test/tree/test_unit.hpp>
 #include <boost/test/tree/visitor.hpp>
@@ -52,13 +51,19 @@ test_results::test_results()
 bool
 test_results::passed() const
 {
+    // if it is skipped, it is not passed. However, if any children is not failed/aborted
+    // then their skipped status is not taken into account.
     return  !p_skipped                                  &&
             p_test_cases_failed == 0                    &&
             p_assertions_failed <= p_expected_failures  &&
-            p_test_cases_skipped == 0                   &&
-            !p_aborted;
+            // p_test_cases_skipped == 0                   &&
+            !p_timed_out                                 &&
+            p_test_cases_timed_out == 0                  &&
+            !aborted();
 }
 
+//____________________________________________________________________________//
+
 bool
 test_results::aborted() const
 {
@@ -67,11 +72,19 @@ test_results::aborted() const
 
 //____________________________________________________________________________//
 
+bool
+test_results::skipped() const
+{
+    return  p_skipped;
+}
+
+//____________________________________________________________________________//
+
 int
 test_results::result_code() const
 {
     return passed() ? exit_success
-           : ( (p_assertions_failed > p_expected_failures || p_skipped )
+           : ( (p_assertions_failed > p_expected_failures || p_skipped || p_timed_out || p_test_cases_timed_out )
                     ? exit_test_failure
                     : exit_exception_failure );
 }
@@ -81,6 +94,7 @@ test_results::result_code() const
 void
 test_results::operator+=( test_results const& tr )
 {
+    p_test_suites.value         += tr.p_test_suites;
     p_assertions_passed.value   += tr.p_assertions_passed;
     p_assertions_failed.value   += tr.p_assertions_failed;
     p_warnings_failed.value     += tr.p_warnings_failed;
@@ -89,6 +103,8 @@ test_results::operator+=( test_results const& tr )
     p_test_cases_failed.value   += tr.p_test_cases_failed;
     p_test_cases_skipped.value  += tr.p_test_cases_skipped;
     p_test_cases_aborted.value  += tr.p_test_cases_aborted;
+    p_test_cases_timed_out.value += tr.p_test_cases_timed_out;
+    p_test_suites_timed_out.value += tr.p_test_suites_timed_out;
     p_duration_microseconds.value += tr.p_duration_microseconds;
 }
 
@@ -97,6 +113,7 @@ test_results::operator+=( test_results const& tr )
 void
 test_results::clear()
 {
+    p_test_suites.value         = 0;
     p_assertions_passed.value   = 0;
     p_assertions_failed.value   = 0;
     p_warnings_failed.value     = 0;
@@ -106,9 +123,12 @@ test_results::clear()
     p_test_cases_failed.value   = 0;
     p_test_cases_skipped.value  = 0;
     p_test_cases_aborted.value  = 0;
+    p_test_cases_timed_out.value = 0;
+    p_test_suites_timed_out.value = 0;
     p_duration_microseconds.value= 0;
     p_aborted.value             = false;
     p_skipped.value             = false;
+    p_timed_out.value           = false;
 }
 
 //____________________________________________________________________________//
@@ -129,6 +149,10 @@ results_collector_impl& s_rc_impl() { static results_collector_impl the_inst; re
 
 //____________________________________________________________________________//
 
+BOOST_TEST_SINGLETON_CONS_IMPL( results_collector_t )
+
+//____________________________________________________________________________//
+
 void
 results_collector_t::test_start( counter_t )
 {
@@ -165,8 +189,12 @@ public:
             else
                 m_tr.p_test_cases_passed.value++;
         }
-        else if( tr.p_skipped )
+        else if( tr.p_timed_out ) {
+            m_tr.p_test_cases_timed_out.value++;
+        }
+        else if( tr.p_skipped || !tc.is_enabled() ) {
             m_tr.p_test_cases_skipped.value++;
+        }
         else {
             if( tr.p_aborted )
                 m_tr.p_test_cases_aborted.value++;
@@ -180,6 +208,10 @@ public:
             return true;
 
         m_tr += results_collector.results( ts.p_id );
+        m_tr.p_test_suites.value++;
+
+        if( results_collector.results( ts.p_id ).p_timed_out )
+            m_tr.p_test_suites_timed_out.value++;
         return false;
     }
 
@@ -194,15 +226,12 @@ private:
 void
 results_collector_t::test_unit_finish( test_unit const& tu, unsigned long elapsed_in_microseconds )
 {
+    test_results & tr = s_rc_impl().m_results_store[tu.p_id];
     if( tu.p_type == TUT_SUITE ) {
-        results_collect_helper ch( s_rc_impl().m_results_store[tu.p_id], tu );
-
-        traverse_test_tree( tu, ch );
+        results_collect_helper ch( tr, tu );
+        traverse_test_tree( tu, ch, true ); // true to ignore the status: we need to count the skipped/disabled tests
     }
     else {
-        test_results & tr = s_rc_impl().m_results_store[tu.p_id];
-        tr.p_duration_microseconds.value = elapsed_in_microseconds;
-
         bool num_failures_match = tr.p_aborted || tr.p_assertions_failed >= tr.p_expected_failures;
         if( !num_failures_match )
             BOOST_TEST_FRAMEWORK_MESSAGE( "Test case " << tu.full_name() << " has fewer failures than expected" );
@@ -211,6 +240,7 @@ results_collector_t::test_unit_finish( test_unit const& tu, unsigned long elapse
         if( !check_any_assertions )
             BOOST_TEST_FRAMEWORK_MESSAGE( "Test case " << tu.full_name() << " did not check any assertions" );
     }
+    tr.p_duration_microseconds.value = elapsed_in_microseconds;
 }
 
 //____________________________________________________________________________//
@@ -219,14 +249,13 @@ void
 results_collector_t::test_unit_skipped( test_unit const& tu, const_string /*reason*/ )
 {
     test_results& tr = s_rc_impl().m_results_store[tu.p_id];
-
     tr.clear();
 
     tr.p_skipped.value = true;
 
     if( tu.p_type == TUT_SUITE ) {
-        test_case_counter tcc;
-        traverse_test_tree( tu, tcc );
+        test_case_counter tcc(true);
+        traverse_test_tree( tu, tcc, true ); // true because need to count the disabled tests/units
 
         tr.p_test_cases_skipped.value = tcc.p_count;
     }
@@ -234,6 +263,15 @@ results_collector_t::test_unit_skipped( test_unit const& tu, const_string /*reas
 
 //____________________________________________________________________________//
 
+void
+results_collector_t::test_unit_timed_out(test_unit const& tu)
+{
+    test_results& tr = s_rc_impl().m_results_store[tu.p_id];
+    tr.p_timed_out.value = true;
+}
+
+//____________________________________________________________________________//
+
 void
 results_collector_t::assertion_result( unit_test::assertion_result ar )
 {
@@ -252,11 +290,14 @@ results_collector_t::assertion_result( unit_test::assertion_result ar )
 //____________________________________________________________________________//
 
 void
-results_collector_t::exception_caught( execution_exception const& )
+results_collector_t::exception_caught( execution_exception const& ex)
 {
     test_results& tr = s_rc_impl().m_results_store[framework::current_test_case_id()];
 
     tr.p_assertions_failed.value++;
+    if( ex.code() == execution_exception::timeout_error ) {
+        tr.p_timed_out.value = true;
+    }
 }
 
 //____________________________________________________________________________//