WhisperCom/include/internal/catch_wildcard_pattern.cpp
Dominik Meyer 9266232d41 Squashed 'libs/Catch2/' content from commit a05a54ec
git-subtree-dir: libs/Catch2
git-subtree-split: a05a54ec25d2854b27afd38afa605fa6e3a36430
2021-08-19 17:00:44 +02:00

48 lines
1.7 KiB
C++

/*
* Created by Martin on 19/07/2017.
*
* Distributed under 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)
*/
#include "catch_wildcard_pattern.h"
#include "catch_enforce.h"
#include "catch_string_manip.h"
namespace Catch {
WildcardPattern::WildcardPattern( std::string const& pattern,
CaseSensitive::Choice caseSensitivity )
: m_caseSensitivity( caseSensitivity ),
m_pattern( normaliseString( pattern ) )
{
if( startsWith( m_pattern, '*' ) ) {
m_pattern = m_pattern.substr( 1 );
m_wildcard = WildcardAtStart;
}
if( endsWith( m_pattern, '*' ) ) {
m_pattern = m_pattern.substr( 0, m_pattern.size()-1 );
m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd );
}
}
bool WildcardPattern::matches( std::string const& str ) const {
switch( m_wildcard ) {
case NoWildcard:
return m_pattern == normaliseString( str );
case WildcardAtStart:
return endsWith( normaliseString( str ), m_pattern );
case WildcardAtEnd:
return startsWith( normaliseString( str ), m_pattern );
case WildcardAtBothEnds:
return contains( normaliseString( str ), m_pattern );
default:
CATCH_INTERNAL_ERROR( "Unknown enum" );
}
}
std::string WildcardPattern::normaliseString( std::string const& str ) const {
return trim( m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str );
}
}