Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2005-2008.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : implements specific subclass of Executon Monitor used by Unit
|
Chris@16
|
13 // Test Framework to monitor test cases run.
|
Chris@16
|
14 // ***************************************************************************
|
Chris@16
|
15
|
Chris@16
|
16 #ifndef BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
|
Chris@16
|
17 #define BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
|
Chris@16
|
18
|
Chris@16
|
19 // Boost.Test
|
Chris@16
|
20 #include <boost/test/unit_test_monitor.hpp>
|
Chris@16
|
21 #include <boost/test/unit_test_suite_impl.hpp>
|
Chris@16
|
22 #include <boost/test/test_tools.hpp>
|
Chris@16
|
23 #include <boost/test/framework.hpp>
|
Chris@16
|
24
|
Chris@16
|
25 #include <boost/test/detail/unit_test_parameters.hpp>
|
Chris@16
|
26
|
Chris@16
|
27 #include <boost/test/detail/suppress_warnings.hpp>
|
Chris@16
|
28
|
Chris@16
|
29 //____________________________________________________________________________//
|
Chris@16
|
30
|
Chris@16
|
31 namespace boost {
|
Chris@16
|
32
|
Chris@16
|
33 namespace unit_test {
|
Chris@16
|
34
|
Chris@16
|
35 namespace {
|
Chris@16
|
36
|
Chris@16
|
37 template<typename F>
|
Chris@16
|
38 struct zero_return_wrapper_t {
|
Chris@16
|
39 explicit zero_return_wrapper_t( F const& f ) : m_f( f ) {}
|
Chris@16
|
40
|
Chris@16
|
41 int operator()() { m_f(); return 0; }
|
Chris@16
|
42
|
Chris@16
|
43 F const& m_f;
|
Chris@16
|
44 };
|
Chris@16
|
45
|
Chris@16
|
46 template<typename F>
|
Chris@16
|
47 zero_return_wrapper_t<F>
|
Chris@16
|
48 zero_return_wrapper( F const& f )
|
Chris@16
|
49 {
|
Chris@16
|
50 return zero_return_wrapper_t<F>( f );
|
Chris@16
|
51 }
|
Chris@16
|
52
|
Chris@16
|
53 }
|
Chris@16
|
54
|
Chris@16
|
55 // ************************************************************************** //
|
Chris@16
|
56 // ************** unit_test_monitor ************** //
|
Chris@16
|
57 // ************************************************************************** //
|
Chris@16
|
58
|
Chris@16
|
59 unit_test_monitor_t::error_level
|
Chris@16
|
60 unit_test_monitor_t::execute_and_translate( test_case const& tc )
|
Chris@16
|
61 {
|
Chris@16
|
62 try {
|
Chris@16
|
63 p_catch_system_errors.value = runtime_config::catch_sys_errors();
|
Chris@16
|
64 p_timeout.value = tc.p_timeout.get();
|
Chris@16
|
65 p_auto_start_dbg.value = runtime_config::auto_start_dbg();
|
Chris@16
|
66 p_use_alt_stack.value = runtime_config::use_alt_stack();
|
Chris@16
|
67 p_detect_fp_exceptions.value = runtime_config::detect_fp_exceptions();
|
Chris@16
|
68
|
Chris@16
|
69 execute( callback0<int>( zero_return_wrapper( tc.test_func() ) ) );
|
Chris@16
|
70 }
|
Chris@16
|
71 catch( execution_exception const& ex ) {
|
Chris@16
|
72 framework::exception_caught( ex );
|
Chris@16
|
73 framework::test_unit_aborted( framework::current_test_case() );
|
Chris@16
|
74
|
Chris@16
|
75 // translate execution_exception::error_code to error_level
|
Chris@16
|
76 switch( ex.code() ) {
|
Chris@16
|
77 case execution_exception::no_error: return test_ok;
|
Chris@16
|
78 case execution_exception::user_error: return unexpected_exception;
|
Chris@16
|
79 case execution_exception::cpp_exception_error: return unexpected_exception;
|
Chris@16
|
80 case execution_exception::system_error: return os_exception;
|
Chris@16
|
81 case execution_exception::timeout_error: return os_timeout;
|
Chris@16
|
82 case execution_exception::user_fatal_error:
|
Chris@16
|
83 case execution_exception::system_fatal_error: return fatal_error;
|
Chris@16
|
84 default: return unexpected_exception;
|
Chris@16
|
85 }
|
Chris@16
|
86 }
|
Chris@16
|
87
|
Chris@16
|
88 return test_ok;
|
Chris@16
|
89 }
|
Chris@16
|
90
|
Chris@16
|
91 //____________________________________________________________________________//
|
Chris@16
|
92
|
Chris@16
|
93 } // namespace unit_test
|
Chris@16
|
94
|
Chris@16
|
95 } // namespace boost
|
Chris@16
|
96
|
Chris@16
|
97 //____________________________________________________________________________//
|
Chris@16
|
98
|
Chris@16
|
99 #include <boost/test/detail/enable_warnings.hpp>
|
Chris@16
|
100
|
Chris@16
|
101 #endif // BOOST_TEST_UNIT_TEST_MONITOR_IPP_012205GER
|