annotate DEPENDENCIES/generic/include/boost/test/impl/cpp_main.ipp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright Gennadiy Rozental 2001-2008.
Chris@16 2 // (C) Copyright Beman Dawes 1995-2001.
Chris@16 3 // Distributed under the Boost Software License, Version 1.0.
Chris@16 4 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 // See http://www.boost.org/libs/test for the library home page.
Chris@16 8 //
Chris@16 9 // File : $RCSfile$
Chris@16 10 //
Chris@101 11 // Version : $Revision$
Chris@16 12 //
Chris@16 13 // Description : main function implementation for Program Executon Monitor
Chris@16 14 // ***************************************************************************
Chris@16 15
Chris@16 16 #ifndef BOOST_TEST_CPP_MAIN_IPP_012205GER
Chris@16 17 #define BOOST_TEST_CPP_MAIN_IPP_012205GER
Chris@16 18
Chris@16 19 // Boost.Test
Chris@16 20 #include <boost/test/execution_monitor.hpp>
Chris@16 21 #include <boost/test/detail/config.hpp>
Chris@16 22 #include <boost/test/utils/basic_cstring/io.hpp>
Chris@16 23
Chris@16 24 // Boost
Chris@16 25 #include <boost/cstdlib.hpp> // for exit codes
Chris@16 26 #include <boost/config.hpp> // for workarounds
Chris@16 27
Chris@16 28 // STL
Chris@16 29 #include <iostream>
Chris@16 30 #include <cstdlib> // std::getenv
Chris@16 31 #include <cstring> // std::strerror
Chris@16 32
Chris@16 33 #include <boost/test/detail/suppress_warnings.hpp>
Chris@16 34
Chris@16 35 //____________________________________________________________________________//
Chris@16 36
Chris@16 37 #ifdef BOOST_NO_STDC_NAMESPACE
Chris@16 38 namespace std { using ::getenv; using ::strerror; }
Chris@16 39 #endif
Chris@16 40
Chris@16 41 namespace {
Chris@16 42
Chris@16 43 struct cpp_main_caller {
Chris@16 44 cpp_main_caller( int (*cpp_main_func)( int argc, char* argv[] ), int argc, char** argv )
Chris@16 45 : m_cpp_main_func( cpp_main_func )
Chris@16 46 , m_argc( argc )
Chris@16 47 , m_argv( argv ) {}
Chris@16 48
Chris@16 49 int operator()() { return (*m_cpp_main_func)( m_argc, m_argv ); }
Chris@16 50
Chris@16 51 private:
Chris@16 52 // Data members
Chris@16 53 int (*m_cpp_main_func)( int argc, char* argv[] );
Chris@16 54 int m_argc;
Chris@16 55 char** m_argv;
Chris@16 56 };
Chris@16 57
Chris@16 58 } // local namespace
Chris@16 59
Chris@16 60 // ************************************************************************** //
Chris@16 61 // ************** prg_exec_monitor_main ************** //
Chris@16 62 // ************************************************************************** //
Chris@16 63
Chris@16 64 namespace boost {
Chris@16 65
Chris@16 66 int BOOST_TEST_DECL
Chris@16 67 prg_exec_monitor_main( int (*cpp_main)( int argc, char* argv[] ), int argc, char* argv[] )
Chris@16 68 {
Chris@16 69 int result = 0;
Chris@16 70
Chris@16 71 try {
Chris@16 72 boost::unit_test::const_string p( std::getenv( "BOOST_TEST_CATCH_SYSTEM_ERRORS" ) );
Chris@16 73 ::boost::execution_monitor ex_mon;
Chris@16 74
Chris@16 75 ex_mon.p_catch_system_errors.value = p != "no";
Chris@16 76
Chris@16 77 result = ex_mon.execute(
Chris@16 78 ::boost::unit_test::callback0<int>( cpp_main_caller( cpp_main, argc, argv ) ) );
Chris@16 79
Chris@16 80 if( result == 0 )
Chris@16 81 result = ::boost::exit_success;
Chris@16 82 else if( result != ::boost::exit_success ) {
Chris@16 83 std::cout << "\n**** error return code: " << result << std::endl;
Chris@16 84 result = ::boost::exit_failure;
Chris@16 85 }
Chris@16 86 }
Chris@16 87 catch( ::boost::execution_exception const& exex ) {
Chris@16 88 std::cout << "\n**** exception(" << exex.code() << "): " << exex.what() << std::endl;
Chris@16 89 result = ::boost::exit_exception_failure;
Chris@16 90 }
Chris@16 91 catch( ::boost::system_error const& ex ) {
Chris@16 92 std::cout << "\n**** failed to initialize execution monitor."
Chris@16 93 << "\n**** expression at fault: " << ex.p_failed_exp
Chris@16 94 << "\n**** error(" << ex.p_errno << "): " << std::strerror( ex.p_errno ) << std::endl;
Chris@16 95 result = ::boost::exit_exception_failure;
Chris@16 96 }
Chris@16 97
Chris@16 98 if( result != ::boost::exit_success ) {
Chris@16 99 std::cerr << "******** errors detected; see standard output for details ********" << std::endl;
Chris@16 100 }
Chris@16 101 else {
Chris@16 102 // Some prefer a confirming message when all is well, while others don't
Chris@16 103 // like the clutter. Use an environment variable to avoid command
Chris@16 104 // line argument modifications; for use in production programs
Chris@16 105 // that's a no-no in some organizations.
Chris@16 106 ::boost::unit_test::const_string p( std::getenv( "BOOST_PRG_MON_CONFIRM" ) );
Chris@16 107 if( p != "no" ) {
Chris@16 108 std::cerr << std::flush << "no errors detected" << std::endl;
Chris@16 109 }
Chris@16 110 }
Chris@16 111
Chris@16 112 return result;
Chris@16 113 }
Chris@16 114
Chris@16 115 } // namespace boost
Chris@16 116
Chris@16 117 #if !defined(BOOST_TEST_DYN_LINK) && !defined(BOOST_TEST_NO_MAIN)
Chris@16 118
Chris@16 119 // ************************************************************************** //
Chris@16 120 // ************** main function for tests using lib ************** //
Chris@16 121 // ************************************************************************** //
Chris@16 122
Chris@16 123 int cpp_main( int argc, char* argv[] ); // prototype for user's cpp_main()
Chris@16 124
Chris@16 125 int BOOST_TEST_CALL_DECL
Chris@16 126 main( int argc, char* argv[] )
Chris@16 127 {
Chris@16 128 return ::boost::prg_exec_monitor_main( &cpp_main, argc, argv );
Chris@16 129 }
Chris@16 130
Chris@16 131 //____________________________________________________________________________//
Chris@16 132
Chris@16 133 #endif // !BOOST_TEST_DYN_LINK && !BOOST_TEST_NO_MAIN
Chris@16 134
Chris@16 135 //____________________________________________________________________________//
Chris@16 136
Chris@16 137 #include <boost/test/detail/enable_warnings.hpp>
Chris@16 138
Chris@16 139 #endif // BOOST_TEST_CPP_MAIN_IPP_012205GER