1 // (C) Copyright Gennadiy Rozental 2001. 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 9 //!@brief defines abstract interface for test observer 10 // *************************************************************************** 11 12 #ifndef BOOST_TEST_TEST_OBSERVER_HPP_021005GER 13 #define BOOST_TEST_TEST_OBSERVER_HPP_021005GER 14 15 // Boost.Test 16 #include <boost/test/detail/fwd_decl.hpp> 17 #include <boost/test/detail/global_typedef.hpp> 18 #include <boost/test/detail/config.hpp> 19 20 #include <boost/test/detail/suppress_warnings.hpp> 21 22 //____________________________________________________________________________// 23 24 namespace boost { 25 namespace unit_test { 26 27 // ************************************************************************** // 28 // ************** test_observer ************** // 29 // ************************************************************************** // 30 31 /// @brief Generic test observer interface 32 /// 33 /// This interface is used by observers in order to receive notifications from the 34 /// Boost.Test framework on the current execution state. 35 /// 36 /// Several observers can be running at the same time, and it is not unusual to 37 /// have interactions among them. The @ref test_observer::priority member function allows the specification 38 /// of a particular order among them (lowest priority executed first, except specified otherwise). 39 /// 40 class BOOST_TEST_DECL test_observer { 41 public: 42 43 //! Called before the framework starts executing the test cases 44 //! 45 //! @param[in] number_of_test_cases indicates the number of test cases. Only active 46 //! test cases are taken into account. test_start(counter_t)47 virtual void test_start( counter_t /* number_of_test_cases */ ) {} 48 49 //! Called after the framework ends executing the test cases 50 //! 51 //! @note The call is made with a reversed priority order. test_finish()52 virtual void test_finish() {} 53 54 //! Called when a critical error is detected 55 //! 56 //! The critical errors are mainly the signals sent by the system and caught by the Boost.Test framework. 57 //! Since the running binary may be in incoherent/instable state, the test execution is aborted and all remaining 58 //! tests are discarded. 59 //! 60 //! @note may be called before test_observer::test_unit_finish() test_aborted()61 virtual void test_aborted() {} 62 63 //! Called before the framework starts executing a test unit 64 //! 65 //! @param[in] test_unit the test being executed test_unit_start(test_unit const &)66 virtual void test_unit_start( test_unit const& /* test */) {} 67 68 //! Called at each end of a test unit. 69 //! 70 //! @param elapsed duration of the test unit in microseconds. test_unit_finish(test_unit const &,unsigned long)71 virtual void test_unit_finish( test_unit const& /* test */, unsigned long /* elapsed */ ) {} test_unit_skipped(test_unit const & tu,const_string)72 virtual void test_unit_skipped( test_unit const& tu, const_string ) { test_unit_skipped( tu ); } test_unit_skipped(test_unit const &)73 virtual void test_unit_skipped( test_unit const& ) {} ///< backward compatibility 74 75 //! Called when the test timed out 76 //! 77 //! This function is called to signal that a test unit (case or suite) timed out. 78 //! A valid test unit is available through boost::unit_test::framework::current_test_unit test_unit_timed_out(test_unit const &)79 virtual void test_unit_timed_out( test_unit const& ) {} 80 81 //! Called when a test unit indicates a fatal error. 82 //! 83 //! A fatal error happens when 84 //! - a strong assertion (with @c REQUIRE) fails, which indicates that the test case cannot continue 85 //! - an unexpected exception is caught by the Boost.Test framework test_unit_aborted(test_unit const &)86 virtual void test_unit_aborted( test_unit const& ) {} 87 assertion_result(unit_test::assertion_result)88 virtual void assertion_result( unit_test::assertion_result /* ar */ ) 89 { 90 } 91 92 //! Called when an exception is intercepted 93 //! 94 //! In case an exception is intercepted, this call happens before the call 95 //! to @ref test_unit_aborted in order to log 96 //! additional data about the exception. exception_caught(execution_exception const &)97 virtual void exception_caught( execution_exception const& ) {} 98 99 //! The priority indicates the order at which this observer is initialized 100 //! and tore down in the UTF framework. The order is lowest to highest priority. priority()101 virtual int priority() { return 0; } 102 103 protected: 104 ~test_observer()105 BOOST_TEST_PROTECTED_VIRTUAL ~test_observer() {} 106 }; 107 108 } // namespace unit_test 109 } // namespace boost 110 111 #include <boost/test/detail/enable_warnings.hpp> 112 113 #endif // BOOST_TEST_TEST_OBSERVER_HPP_021005GER 114 115