1 /* 2 * Created by Phil Nash on 08/02/2017. 3 * Copyright (c) 2017 Two Blue Cubes Ltd. All rights reserved. 4 * 5 * Distributed under the Boost Software License, Version 1.0. (See accompanying 6 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 #ifndef TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED 9 #define TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED 10 11 #include "catch_matchers.hpp" 12 13 namespace Catch { 14 namespace Matchers { 15 16 namespace StdString { 17 18 struct CasedString 19 { 20 CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ); 21 std::string adjustString( std::string const& str ) const; 22 std::string caseSensitivitySuffix() const; 23 24 CaseSensitive::Choice m_caseSensitivity; 25 std::string m_str; 26 }; 27 28 struct StringMatcherBase : MatcherBase<std::string> { 29 StringMatcherBase( std::string const& operation, CasedString const& comparator ); 30 virtual std::string describe() const CATCH_OVERRIDE; 31 32 CasedString m_comparator; 33 std::string m_operation; 34 }; 35 36 struct EqualsMatcher : StringMatcherBase { 37 EqualsMatcher( CasedString const& comparator ); 38 virtual bool match( std::string const& source ) const CATCH_OVERRIDE; 39 }; 40 struct ContainsMatcher : StringMatcherBase { 41 ContainsMatcher( CasedString const& comparator ); 42 virtual bool match( std::string const& source ) const CATCH_OVERRIDE; 43 }; 44 struct StartsWithMatcher : StringMatcherBase { 45 StartsWithMatcher( CasedString const& comparator ); 46 virtual bool match( std::string const& source ) const CATCH_OVERRIDE; 47 }; 48 struct EndsWithMatcher : StringMatcherBase { 49 EndsWithMatcher( CasedString const& comparator ); 50 virtual bool match( std::string const& source ) const CATCH_OVERRIDE; 51 }; 52 53 } // namespace StdString 54 55 56 // The following functions create the actual matcher objects. 57 // This allows the types to be inferred 58 59 StdString::EqualsMatcher Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); 60 StdString::ContainsMatcher Contains( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); 61 StdString::EndsWithMatcher EndsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); 62 StdString::StartsWithMatcher StartsWith( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ); 63 64 } // namespace Matchers 65 } // namespace Catch 66 67 #endif // TWOBLUECUBES_CATCH_MATCHERS_STRING_H_INCLUDED 68