static bool expect_assertion = false;
static int assertion_failed_count = 0;
+//assertion handler throws it to exit like assert, but to be able to catch it and stop
+//usage: BOOST_TEST_THROWS( function_with_assert(), expected_assertion );
+struct expected_assertion {};
+
// BOOST_ASSERT custom handler
void boost::assertion_failed( char const * expr, char const * function, char const * file, long line )
{
if( expect_assertion )
{
++assertion_failed_count;
+ throw expected_assertion();
}
else
{
int old_count = assertion_failed_count;
expect_assertion = true;
- boost::polymorphic_downcast<Derived*>( base ); // should assert
+ BOOST_TEST_THROWS( boost::polymorphic_downcast<Derived*>( base ), expected_assertion ); // should assert
BOOST_TEST_EQ( assertion_failed_count, old_count + 1 );
expect_assertion = false;
int old_count = assertion_failed_count;
expect_assertion = true;
- boost::polymorphic_pointer_downcast<Derived>( base ); // should assert
+ BOOST_TEST_THROWS( boost::polymorphic_pointer_downcast<Derived>( base ), expected_assertion ); // should assert
BOOST_TEST_EQ( assertion_failed_count, old_count + 1 );
expect_assertion = false;
int old_count = assertion_failed_count;
expect_assertion = true;
- boost::polymorphic_pointer_downcast<Derived>( base ); // should assert
+ BOOST_TEST_THROWS( boost::polymorphic_pointer_downcast<Derived>( base ), expected_assertion ); // should assert
BOOST_TEST_EQ( assertion_failed_count, old_count + 1 );
expect_assertion = false;
int old_count = assertion_failed_count;
expect_assertion = true;
- boost::polymorphic_pointer_downcast<Derived>( base ); // should assert
+ BOOST_TEST_THROWS( boost::polymorphic_pointer_downcast<Derived>( base ), expected_assertion ); // should assert
BOOST_TEST_EQ( assertion_failed_count, old_count + 1 );
expect_assertion = false;
int old_count = assertion_failed_count;
expect_assertion = true;
- boost::polymorphic_pointer_downcast<Derived>( base ); // should assert
+ BOOST_TEST_THROWS( boost::polymorphic_pointer_downcast<Derived>( base ), expected_assertion); // should assert
BOOST_TEST_EQ( assertion_failed_count, old_count + 1 );
expect_assertion = false;