1 /* 2 * Created by Martin on 19/07/2017. 3 * 4 * Distributed under the Boost Software License, Version 1.0. (See accompanying 5 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 */ 7 8 #include "catch_wildcard_pattern.h" 9 #include "catch_enforce.h" 10 #include "catch_string_manip.h" 11 12 namespace Catch { 13 WildcardPattern(std::string const & pattern,CaseSensitive::Choice caseSensitivity)14 WildcardPattern::WildcardPattern( std::string const& pattern, 15 CaseSensitive::Choice caseSensitivity ) 16 : m_caseSensitivity( caseSensitivity ), 17 m_pattern( normaliseString( pattern ) ) 18 { 19 if( startsWith( m_pattern, '*' ) ) { 20 m_pattern = m_pattern.substr( 1 ); 21 m_wildcard = WildcardAtStart; 22 } 23 if( endsWith( m_pattern, '*' ) ) { 24 m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); 25 m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd ); 26 } 27 } 28 matches(std::string const & str) const29 bool WildcardPattern::matches( std::string const& str ) const { 30 switch( m_wildcard ) { 31 case NoWildcard: 32 return m_pattern == normaliseString( str ); 33 case WildcardAtStart: 34 return endsWith( normaliseString( str ), m_pattern ); 35 case WildcardAtEnd: 36 return startsWith( normaliseString( str ), m_pattern ); 37 case WildcardAtBothEnds: 38 return contains( normaliseString( str ), m_pattern ); 39 default: 40 CATCH_INTERNAL_ERROR( "Unknown enum" ); 41 } 42 } 43 normaliseString(std::string const & str) const44 std::string WildcardPattern::normaliseString( std::string const& str ) const { 45 return trim( m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str ); 46 } 47 } 48