1 //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. 2 3 //Distributed under the Boost Software License, Version 1.0. (See accompanying 4 //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 #include <boost/config.hpp> 7 8 #if defined( BOOST_NO_EXCEPTIONS ) 9 # error This program requires exception handling. 10 #endif 11 12 #include <boost/exception/errinfo_api_function.hpp> 13 #include <boost/exception/errinfo_at_line.hpp> 14 #include <boost/exception/errinfo_errno.hpp> 15 #include <boost/exception/errinfo_file_handle.hpp> 16 #include <boost/exception/errinfo_file_name.hpp> 17 #include <boost/exception/errinfo_file_open_mode.hpp> 18 #include <boost/exception/errinfo_type_info_name.hpp> 19 #include <boost/exception/info.hpp> 20 #include <boost/exception/get_error_info.hpp> 21 #include <boost/throw_exception.hpp> 22 #include <boost/weak_ptr.hpp> 23 #include <boost/detail/lightweight_test.hpp> 24 #include <exception> 25 26 struct 27 test_exception: 28 virtual boost::exception, 29 virtual std::exception 30 { 31 }; 32 33 int main()34main() 35 { 36 using namespace boost; 37 try 38 { 39 test_exception e; 40 e << 41 errinfo_api_function("failed_api_function") << 42 errinfo_at_line(42) << 43 errinfo_errno(0) << 44 errinfo_file_handle(weak_ptr<FILE>()) << 45 errinfo_file_name("filename.txt") << 46 errinfo_file_open_mode("rb"); 47 #ifdef BOOST_NO_TYPEID 48 BOOST_THROW_EXCEPTION(e); 49 #else 50 BOOST_THROW_EXCEPTION(e<<errinfo_type_info_name(typeid(int).name())); 51 #endif 52 BOOST_ERROR("BOOST_THROW_EXCEPTION failed to throw."); 53 } 54 catch( 55 boost::exception & e ) 56 { 57 BOOST_TEST(get_error_info<errinfo_api_function>(e) && *get_error_info<errinfo_api_function>(e)==std::string("failed_api_function")); 58 BOOST_TEST(get_error_info<errinfo_at_line>(e) && *get_error_info<errinfo_at_line>(e)==42); 59 BOOST_TEST(get_error_info<errinfo_errno>(e) && *get_error_info<errinfo_errno>(e)==0); 60 BOOST_TEST(get_error_info<errinfo_file_handle>(e) && get_error_info<errinfo_file_handle>(e)->expired()); 61 BOOST_TEST(get_error_info<errinfo_file_name>(e) && *get_error_info<errinfo_file_name>(e)=="filename.txt"); 62 BOOST_TEST(get_error_info<errinfo_file_open_mode>(e) && *get_error_info<errinfo_file_open_mode>(e)=="rb"); 63 #ifndef BOOST_NO_TYPEID 64 BOOST_TEST(get_error_info<errinfo_type_info_name>(e) && *get_error_info<errinfo_type_info_name>(e)==typeid(int).name()); 65 #endif 66 } 67 catch( 68 ... ) 69 { 70 BOOST_TEST(false); 71 } 72 return boost::report_errors(); 73 } 74