void test(boost::basic_regex<charT, traits>& r, const test_invalid_regex_tag&) { const std::basic_string<charT>& expression = test_info<charT>::expression(); boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); // // try it with exceptions disabled first: // try { if(0 == r.assign(expression, syntax_options | boost::regex_constants::no_except).status()) { BOOST_REGEX_TEST_ERROR("Expression compiled when it should not have done so.", charT); } test_empty(r); } catch(...) { BOOST_REGEX_TEST_ERROR("Unexpected exception thrown.", charT); } // // now try again with exceptions: // bool have_catch = false; try{ r.assign(expression, syntax_options); #ifdef BOOST_NO_EXCEPTIONS if(r.status()) have_catch = true; #endif } catch(const boost::bad_expression&) { have_catch = true; test_empty(r); } catch(const std::runtime_error& r) { have_catch = true; BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << r.what(), charT); } catch(const std::exception& r) { have_catch = true; BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << r.what(), charT); } catch(...) { have_catch = true; BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", charT); } if(!have_catch) { // oops expected exception was not thrown: BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", charT); } }
void test(boost::basic_regex<charT, traits>& r, const test_regex_replace_tag&) { const std::basic_string<charT>& expression = test_info<charT>::expression(); boost::regex_constants::syntax_option_type syntax_options = test_info<charT>::syntax_options(); try{ r.assign(expression, syntax_options); if(r.status()) { BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done, error code = " << r.status(), charT); } test_regex_replace(r); } catch(const boost::bad_expression& e) { BOOST_REGEX_TEST_ERROR("Expression did not compile when it should have done: " << e.what(), charT); } catch(const std::runtime_error& r) { BOOST_REGEX_TEST_ERROR("Received an unexpected std::runtime_error: " << r.what(), charT); } catch(const std::exception& r) { BOOST_REGEX_TEST_ERROR("Received an unexpected std::exception: " << r.what(), charT); } catch(...) { BOOST_REGEX_TEST_ERROR("Received an unexpected exception of unknown type", charT); } }