errinfos_test.cpp 2.4 KB

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