1 //Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
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)
6 #include <boost/exception/diagnostic_information.hpp>
7 #include <boost/exception/info.hpp>
8 #include <boost/detail/lightweight_test.hpp>
9 #include <boost/detail/workaround.hpp>
11 #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
16 typedef boost::error_info
<struct test_tag1
,int> tagged_int1
;
17 typedef boost::error_info
<struct test_tag2
,int> tagged_int2
;
20 to_string( tagged_int2
const & x
)
22 return '[' +boost::error_info_name(x
) + "] = " + (x
.value()==42 ? "fourty-two" : "bad value");
31 what() const BOOST_NOEXCEPT_OR_NOTHROW
48 what() const BOOST_NOEXCEPT_OR_NOTHROW
60 what() const BOOST_NOEXCEPT_OR_NOTHROW
62 return diagnostic_information_what(*this);
67 test1( std::string
const & di1
, std::string
const & di2
)
69 BOOST_TEST( di1
!=di2
);
71 BOOST_TEST(di1
.find("type:")!=std::string::npos
);
72 BOOST_TEST(di1
.find("error1")!=std::string::npos
);
74 BOOST_TEST(di1
.find("test_tag1")!=std::string::npos
);
75 BOOST_TEST(di1
.find("test_tag2")!=std::string::npos
);
76 BOOST_TEST(di1
.find("fourty-two")!=std::string::npos
);
78 BOOST_TEST(di2
.find("type:")!=std::string::npos
);
79 BOOST_TEST(di2
.find("error1")!=std::string::npos
);
81 BOOST_TEST(di2
.find("test_tag1")!=std::string::npos
);
82 BOOST_TEST(di2
.find("test_tag2")!=std::string::npos
);
83 BOOST_TEST(di2
.find("bad value")!=std::string::npos
);
87 test2( std::string
const & di1
, std::string
const & di2
)
89 BOOST_TEST( di1
!=di2
);
90 BOOST_TEST(di1
.find("test_tag1")!=std::string::npos
);
91 BOOST_TEST(di1
.find("test_tag2")!=std::string::npos
);
92 BOOST_TEST(di1
.find("fourty-two")!=std::string::npos
);
93 BOOST_TEST(di2
.find("test_tag1")!=std::string::npos
);
94 BOOST_TEST(di2
.find("test_tag2")!=std::string::npos
);
95 BOOST_TEST(di2
.find("bad value")!=std::string::npos
);
99 test3( std::string
const & di
)
101 #ifndef BOOST_NO_RTTI
102 BOOST_TEST(di
.find("type:")!=std::string::npos
);
104 BOOST_TEST(di
.find("error3")!=std::string::npos
);
108 test4( std::string
const & di1
, std::string
const & di2
)
110 BOOST_TEST( di1
!=di2
);
111 #ifndef BOOST_NO_RTTI
112 BOOST_TEST(di1
.find("type:")!=std::string::npos
);
114 BOOST_TEST(di1
.find("test_tag1")!=std::string::npos
);
115 BOOST_TEST(di1
.find("test_tag2")!=std::string::npos
);
116 BOOST_TEST(di1
.find("fourty-two")!=std::string::npos
);
117 #ifndef BOOST_NO_RTTI
118 BOOST_TEST(di2
.find("type:")!=std::string::npos
);
120 BOOST_TEST(di2
.find("test_tag1")!=std::string::npos
);
121 BOOST_TEST(di2
.find("test_tag2")!=std::string::npos
);
122 BOOST_TEST(di2
.find("bad value")!=std::string::npos
);
128 using namespace boost
;
131 error1 x
; x
<< tagged_int1(42) << tagged_int2(42);
132 BOOST_TEST(x
.what()==std::string("error1"));
138 std::string di1
=boost::diagnostic_information(x
);
139 x
<< tagged_int1(2) << tagged_int2(2);
140 std::string di2
= diagnostic_information(x
);
145 error1 x
; x
<< tagged_int1(42) << tagged_int2(42);
146 BOOST_TEST(x
.what()==std::string("error1"));
152 std::string di1
=boost::current_exception_diagnostic_information();
153 x
<< tagged_int1(2) << tagged_int2(2);
154 std::string di2
= current_exception_diagnostic_information();
160 x
<< tagged_int1(42) << tagged_int2(42);
166 std::string di1
= diagnostic_information(x
);
167 x
<< tagged_int1(2) << tagged_int2(2);
168 std::string di2
= diagnostic_information(x
);
174 x
<< tagged_int1(42) << tagged_int2(42);
180 std::string di1
= current_exception_diagnostic_information();
181 BOOST_TEST(di1
==boost::diagnostic_information_what(x
));
182 x
<< tagged_int1(2) << tagged_int2(2);
183 std::string di2
= current_exception_diagnostic_information();
184 BOOST_TEST(di2
==boost::diagnostic_information_what(x
));
190 std::string di
=diagnostic_information(x
);
197 std::string di
=current_exception_diagnostic_information();
207 std::string di1
=boost::diagnostic_information(x
);
208 std::string wh1
=x
.what();
209 BOOST_TEST(wh1
==di1
);
213 error4 x
; x
<< tagged_int1(42) << tagged_int2(42);
219 std::string di1
=boost::diagnostic_information(x
);
220 std::string wh1
=x
.what();
221 BOOST_TEST(wh1
==di1
);
222 x
<< tagged_int1(2) << tagged_int2(2);
223 std::string di2
= diagnostic_information(x
);
224 std::string wh2
=x
.what();
225 BOOST_TEST(wh2
==di2
);
230 error4 x
; x
<< tagged_int1(42) << tagged_int2(42);
236 std::string di1
=boost::current_exception_diagnostic_information();
237 std::string wh1
=x
.what();
238 BOOST_TEST(wh1
==di1
);
239 x
<< tagged_int1(2) << tagged_int2(2);
240 std::string di2
= current_exception_diagnostic_information();
241 std::string wh2
=x
.what();
242 BOOST_TEST(wh2
==di2
);
245 return boost::report_errors();