test_not_regex.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 115 行

HPP
115
字号
/* * * 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);   }}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:   //   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);   }}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?