mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	| @@ -8,6 +8,9 @@ | ||||
|  | ||||
| #include "catch_matchers_string.h" | ||||
| #include "catch_string_manip.h" | ||||
| #include "catch_tostring.h" | ||||
|  | ||||
| #include <regex> | ||||
|  | ||||
| namespace Catch { | ||||
| namespace Matchers { | ||||
| @@ -74,6 +77,23 @@ namespace Matchers { | ||||
|             return endsWith( m_comparator.adjustString( source ), m_comparator.m_str ); | ||||
|         } | ||||
|  | ||||
|  | ||||
|  | ||||
|         RegexMatcher::RegexMatcher(std::string regex, CaseSensitive::Choice caseSensitivity): m_regex(std::move(regex)), m_caseSensitivity(caseSensitivity) {} | ||||
|  | ||||
|         bool RegexMatcher::match(std::string const& matchee) const { | ||||
|             auto flags = std::regex::ECMAScript; // ECMAScript is the default syntax option anyway | ||||
|             if (m_caseSensitivity == CaseSensitive::Choice::No) { | ||||
|                 flags |= std::regex::icase; | ||||
|             } | ||||
|             auto reg = std::regex(m_regex, flags); | ||||
|             return std::regex_match(matchee, reg); | ||||
|         } | ||||
|  | ||||
|         std::string RegexMatcher::describe() const { | ||||
|             return "matches " + ::Catch::Detail::stringify(m_regex) + ((m_caseSensitivity == CaseSensitive::Choice::Yes)? " case sensitively" : " case insensitively"); | ||||
|         } | ||||
|  | ||||
|     } // namespace StdString | ||||
|  | ||||
|  | ||||
| @@ -90,5 +110,9 @@ namespace Matchers { | ||||
|         return StdString::StartsWithMatcher( StdString::CasedString( str, caseSensitivity) ); | ||||
|     } | ||||
|  | ||||
|     StdString::RegexMatcher Matches(std::string const& regex, CaseSensitive::Choice caseSensitivity) { | ||||
|         return StdString::RegexMatcher(regex, caseSensitivity); | ||||
|     } | ||||
|  | ||||
| } // namespace Matchers | ||||
| } // namespace Catch | ||||
|   | ||||
| @@ -52,6 +52,16 @@ namespace Matchers { | ||||
|             bool match( std::string const& source ) const override; | ||||
|         }; | ||||
|  | ||||
|         struct RegexMatcher : MatcherBase<std::string> { | ||||
|             RegexMatcher( std::string regex, CaseSensitive::Choice caseSensitivity ); | ||||
|             bool match( std::string const& matchee ) const override; | ||||
|             std::string describe() const override; | ||||
|  | ||||
|         private: | ||||
|             std::string m_regex; | ||||
|             CaseSensitive::Choice m_caseSensitivity; | ||||
|         }; | ||||
|  | ||||
|     } // namespace StdString | ||||
|  | ||||
|  | ||||
| @@ -62,6 +72,7 @@ namespace Matchers { | ||||
|     StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); | ||||
|     StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); | ||||
|     StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); | ||||
|     StdString::RegexMatcher Matches( std::string const& regex, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); | ||||
|  | ||||
| } // namespace Matchers | ||||
| } // namespace Catch | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský