• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()34 main()
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