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