From c57eefbf4252aa98a76ea5653640010a8a4c6f67 Mon Sep 17 00:00:00 2001 From: Emil Dotchevski Date: Wed, 25 Mar 2015 14:28:54 -0700 Subject: [PATCH] More complete error_info testing --- test/Jamfile.v2 | 4 +- test/error_info_lv_const_test.cpp | 13 ++ test/error_info_lv_test.cpp | 13 ++ test/error_info_rv_const_test.cpp | 28 +++++ test/error_info_rv_test.cpp | 118 ++---------------- ...rror_info_test.cpp => error_info_test.hpp} | 30 ++--- 6 files changed, 81 insertions(+), 125 deletions(-) create mode 100644 test/error_info_lv_const_test.cpp create mode 100644 test/error_info_lv_test.cpp create mode 100644 test/error_info_rv_const_test.cpp rename test/{error_info_test.cpp => error_info_test.hpp} (88%) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index dceba8e..e7cf00d 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -34,8 +34,10 @@ run exception_test.cpp ; run enable_error_info_test.cpp helper1.cpp ; run throw_exception_test.cpp helper2.cpp ; run errno_test.cpp ; -run error_info_test.cpp ; +run error_info_lv_test.cpp ; +run error_info_lv_const_test.cpp ; run error_info_rv_test.cpp ; +run error_info_rv_const_test.cpp ; run diagnostic_information_test.cpp ; run refcount_ptr_test.cpp ; run current_exception_cast_test.cpp ; diff --git a/test/error_info_lv_const_test.cpp b/test/error_info_lv_const_test.cpp new file mode 100644 index 0000000..c79f97a --- /dev/null +++ b/test/error_info_lv_const_test.cpp @@ -0,0 +1,13 @@ +//Copyright (c) 2006-2015 Emil Dotchevski and Reverge Studios, Inc. + +//Distributed under the Boost Software License, Version 1.0. (See accompanying +//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "boost/exception/info.hpp" +template +E const & +add_info( E const & e, I const & i ) + { + return e << i; + } +#include "error_info_test.hpp" diff --git a/test/error_info_lv_test.cpp b/test/error_info_lv_test.cpp new file mode 100644 index 0000000..994b941 --- /dev/null +++ b/test/error_info_lv_test.cpp @@ -0,0 +1,13 @@ +//Copyright (c) 2006-2015 Emil Dotchevski and Reverge Studios, Inc. + +//Distributed under the Boost Software License, Version 1.0. (See accompanying +//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "boost/exception/info.hpp" +template +E const & +add_info( E const & e, I i ) + { + return e << i; + } +#include "error_info_test.hpp" diff --git a/test/error_info_rv_const_test.cpp b/test/error_info_rv_const_test.cpp new file mode 100644 index 0000000..2906061 --- /dev/null +++ b/test/error_info_rv_const_test.cpp @@ -0,0 +1,28 @@ +//Copyright (c) 2006-2015 Emil Dotchevski and Reverge Studios, Inc. + +//Distributed under the Boost Software License, Version 1.0. (See accompanying +//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#include "boost/exception/info.hpp" + +#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES +int +main() + { + return 0; + } +#else +template +I const +rv_const( I i ) + { + return i; + } +template +E const & +add_info( E const & e, I i ) + { + return e << rv_const(i); + } +#include "error_info_test.hpp" +#endif diff --git a/test/error_info_rv_test.cpp b/test/error_info_rv_test.cpp index 40f975f..433be92 100644 --- a/test/error_info_rv_test.cpp +++ b/test/error_info_rv_test.cpp @@ -1,122 +1,22 @@ -//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. +//Copyright (c) 2006-2015 Emil Dotchevski and Reverge Studios, Inc. //Distributed under the Boost Software License, Version 1.0. (See accompanying //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -#include -#include -#include -#include -#include +#include "boost/exception/info.hpp" #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES int main() - { - BOOST_FAIL("Platform does not support rvalue references."); - return 1; + { + return 0; } #else -struct move_only; -typedef boost::error_info test1; -struct -test_exception: - boost::exception - { - }; -struct -move_only - { - explicit move_only(int x) : x_(x) { } - move_only( move_only && other ) : x_(other.x_) { } - int x_; - private: - move_only( move_only const & ); - }; -void -throw_test1() - { - throw test_exception() << test1(move_only(7)); - } -void -throw_test_throw_file_rv() +template +E const & +add_info( E const & e, I i ) { - throw test_exception() << std::move(boost::throw_file("throw_file")); + return e << std::move(i); } -void -throw_test_throw_function_rv() - { - throw test_exception() << std::move(boost::throw_function("throw_function")); - } -void -throw_test_throw_line_rv() - { - throw test_exception() << std::move(boost::throw_line(42)); - } -int -main() - { - try - { - throw_test1(); - BOOST_ASSERT(false); - } - catch( - boost::exception & x ) - { - BOOST_TEST(boost::get_error_info(x)); - BOOST_TEST(boost::get_error_info(x)->x_ == 7); - } - catch( - ... ) - { - BOOST_TEST(false); - } - try - { - throw_test_throw_function_rv(); - BOOST_ASSERT(false); - } - catch( - boost::exception & x ) - { - BOOST_TEST(boost::get_error_info(x) && !strcmp(*boost::get_error_info(x),"throw_function")); - } - catch( - ... ) - { - BOOST_TEST(false); - } - try - { - throw_test_throw_file_rv(); - BOOST_ASSERT(false); - } - catch( - boost::exception & x ) - { - BOOST_TEST(boost::get_error_info(x) && !strcmp(*boost::get_error_info(x),"throw_file")); - } - catch( - ... ) - { - BOOST_TEST(false); - } - try - { - throw_test_throw_line_rv(); - BOOST_ASSERT(false); - } - catch( - boost::exception & x ) - { - BOOST_TEST(boost::get_error_info(x) && *boost::get_error_info(x)==42); - } - catch( - ... ) - { - BOOST_TEST(false); - } - return boost::report_errors(); - } +#include "error_info_test.hpp" #endif diff --git a/test/error_info_test.cpp b/test/error_info_test.hpp similarity index 88% rename from test/error_info_test.cpp rename to test/error_info_test.hpp index f3dda1a..8648362 100644 --- a/test/error_info_test.cpp +++ b/test/error_info_test.hpp @@ -1,4 +1,4 @@ -//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc. +//Copyright (c) 2006-2015 Emil Dotchevski and Reverge Studios, Inc. //Distributed under the Boost Software License, Version 1.0. (See accompanying //file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -69,7 +69,7 @@ basic_test() try { test_exception x; - x << test_1(1) << test_2(2u) << test_3(3.14159f); + add_info(add_info(add_info(x,test_1(1)),test_2(2u)),test_3(3.14159f)); throw x; } catch( @@ -86,7 +86,7 @@ basic_test() try { test_exception x; - x << test_1(1) << test_2(2u) << test_3(3.14159f); + add_info(add_info(add_info(x,test_1(1)),test_2(2u)),test_3(3.14159f)); throw x; } catch( @@ -105,7 +105,7 @@ exception_safety_test() test_exception x; try { - x << test_4(throws_on_copy()); + add_info(x,test_4(throws_on_copy())); BOOST_TEST(false); } catch( @@ -124,13 +124,13 @@ throw_empty() void throw_test_1( char const * value ) { - throw test_exception() << test_5(std::string(value)); + throw add_info(test_exception(),test_5(std::string(value))); } void throw_test_2() { - throw test_exception() << test_6(non_printable()); + throw add_info(test_exception(),test_6(non_printable())); } void @@ -144,7 +144,7 @@ throw_catch_add_file_name( char const * name ) catch( boost::exception & x ) { - x << test_5(std::string(name)); + add_info(x,test_5(std::string(name))); throw; } } @@ -256,10 +256,10 @@ test_add_tuple() typedef boost::tuple tuple_test_1235; try { - throw test_exception() << tuple_test_(); + throw add_info(test_exception(),tuple_test_()); } catch( - test_exception & x ) + test_exception & ) { } catch( @@ -269,7 +269,7 @@ test_add_tuple() } try { - throw test_exception() << tuple_test_1(42); + throw add_info(test_exception(),tuple_test_1(42)); } catch( test_exception & x ) @@ -283,7 +283,7 @@ test_add_tuple() } try { - throw test_exception() << tuple_test_12(42,42u); + throw add_info(test_exception(),tuple_test_12(42,42u)); } catch( test_exception & x ) @@ -298,7 +298,7 @@ test_add_tuple() } try { - throw test_exception() << tuple_test_123(42,42u,42.0f); + throw add_info(test_exception(),tuple_test_123(42,42u,42.0f)); } catch( test_exception & x ) @@ -314,7 +314,7 @@ test_add_tuple() } try { - throw test_exception() << tuple_test_1235(42,42u,42.0f,std::string("42")); + throw add_info(test_exception(),tuple_test_1235(42,42u,42.0f,std::string("42"))); } catch( test_exception & x ) @@ -337,7 +337,7 @@ test_lifetime1() int count=0; try { - throw test_exception() << test_7(user_data(count)); + throw add_info(test_exception(),test_7(user_data(count))); } catch( boost::exception & x ) @@ -359,7 +359,7 @@ test_lifetime2() int count=0; { boost::exception_ptr ep; - test_exception e; e<0); }