123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- *
- * Copyright (c) 2004
- * John Maddock
- *
- * Use, modification and distribution are subject to 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)
- *
- */
- /*
- * LOCATION: see http://www.boost.org for most recent version.
- * FILE test_not_regex.hpp
- * VERSION see <boost/version.hpp>
- * DESCRIPTION: Declares tests for invalid regexes.
- */
- #ifndef BOOST_REGEX_REGRESS_TEST_NOT_REGEX_HPP
- #define BOOST_REGEX_REGRESS_TEST_NOT_REGEX_HPP
- #include "info.hpp"
- //
- // this file implements a test for a regular expression that should not compile:
- //
- struct test_invalid_regex_tag{};
- template<class charT, class traits>
- void test_empty(boost::basic_regex<charT, traits>& r)
- {
- if(!r.empty())
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::empty().", charT);
- }
- if(r.size())
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::size().", charT);
- }
- if(r.str().size())
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::str().", charT);
- }
- if(r.begin() != r.end())
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::begin().", charT);
- }
- if(r.status() == 0)
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::status().", charT);
- }
- if(r.begin() != r.end())
- {
- BOOST_REGEX_TEST_ERROR("Invalid value returned from basic_regex<>::begin().", charT);
- }
- }
- template<class charT, class traits>
- 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:
- //
- #ifndef BOOST_NO_EXCEPTIONS
- try
- #endif
- {
- 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);
- }
- #ifndef BOOST_NO_EXCEPTIONS
- catch(...)
- {
- BOOST_REGEX_TEST_ERROR("Unexpected exception thrown.", charT);
- }
- #endif
- //
- // now try again with exceptions:
- //
- bool have_catch = false;
- #ifndef BOOST_NO_EXCEPTIONS
- try
- #endif
- {
- r.assign(expression, syntax_options);
- #ifdef BOOST_NO_EXCEPTIONS
- if(r.status())
- have_catch = true;
- #endif
- }
- #ifndef BOOST_NO_EXCEPTIONS
- catch(const boost::bad_expression&)
- {
- have_catch = true;
- test_empty(r);
- }
- catch(const std::runtime_error& e)
- {
- have_catch = true;
- BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::runtime_error instead: " << e.what(), charT);
- }
- catch(const std::exception& e)
- {
- have_catch = true;
- BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but a std::exception instead: " << e.what(), charT);
- }
- catch(...)
- {
- have_catch = true;
- BOOST_REGEX_TEST_ERROR("Expected a bad_expression exception, but got an exception of unknown type instead", charT);
- }
- #endif
- if(!have_catch)
- {
- // oops expected exception was not thrown:
- BOOST_REGEX_TEST_ERROR("Expected an exception, but didn't find one.", charT);
- }
- }
- #endif
|