// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file
- \brief Exception.test unit tests */
+ \brief Exception unit tests */
//#include "Exception.test.hh"
//#include "Exception.test.ih"
// Custom includes
#include "Exception.hh"
+#include <boost/format.hpp>
+#include <errno.h>
#include "../Utils/auto_unit_test.hh"
#include <boost/test/test_tools.hpp>
-#include <boost/format.hpp>
-#include <errno.h>
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
-BOOST_AUTO_UNIT_TEST(errnoException)
+BOOST_AUTO_UNIT_TEST(wrapException)
{
- BOOST_CHECK_THROW( senf::throwErrno(), senf::SystemException );
- BOOST_CHECK_THROW( senf::throwErrno(ENOENT), senf::SystemException );
- BOOST_CHECK_THROW( senf::throwErrno(""), senf::SystemException );
- BOOST_CHECK_THROW( senf::throwErrno("", ENOENT), senf::SystemException );
+ bool bad_cast (false);
+
+ try {
+ try {
+ try {
+ try {
+ try {
+ throw std::bad_cast();
+ }
+ SENF_WRAP_EXC(std::bad_cast)
+ }
+ SENF_WRAP_EXC(std::bad_cast)
+ }
+ catch (senf::ExceptionMixin & ex) {
+ ex << "\nspecial exception";
+ throw;
+ }
+ }
+ catch (std::exception const & ex) {
+#ifdef SENF_DEBUG
+ BOOST_CHECK( std::string(ex.what()).find("-- \n") != std::string::npos );
+#endif
+ BOOST_CHECK( std::string(ex.what()).find("special exception") != std::string::npos );
+ throw;
+ }
+ }
+ catch (std::bad_cast &) {
+ bad_cast = true;
+ }
+ BOOST_CHECK( bad_cast );
+}
+BOOST_AUTO_UNIT_TEST(errnoException)
+{
try {
try {
- senf::throwErrno("::open()", ENOENT);
+ throw senf::SystemException("::open()", ENOENT) << "\nmore";
}
- catch(senf::SystemException & e) {
- e << ": x=" << 1 << boost::format(", y=%d") % 2;
+ catch(senf::Exception & e) {
+ e << "\nx=" << 1 << boost::format("\ny=%d") % 2;
throw;
}
}
catch (senf::SystemException & e) {
BOOST_CHECK_EQUAL( e.errorNumber(), ENOENT );
- BOOST_CHECK_EQUAL( e.what(), "::open(): (2) No such file or directory: x=1, y=2" );
+ BOOST_CHECK_EQUAL( e.errorString(), "No such file or directory" );
+ std::string what (e.what());
+ std::string::size_type pos (what.find("-- \n"));
+ if (pos != std::string::npos)
+ what = std::string(what, pos+4);
+ BOOST_CHECK_EQUAL( what, "[No such file or directory] ::open()\nmore\nx=1\ny=2" );
}
}