// Copyright Catch2 Authors // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.txt or copy at // https://www.boost.org/LICENSE_1_0.txt) // SPDX-License-Identifier: BSL-1.0 #pragma once #include #include #include #include namespace Catch { namespace Matchers { class StringMatcherBase : public MatcherBase { protected: std::string m_target; StringRef m_operation; CaseSensitive m_caseSensitivity; StringMatcherBase( std::string target, StringRef operation, CaseSensitive caseSensitivity ); public: std::string describe() const override; }; class StringEqualsMatcher final : public StringMatcherBase { public: StringEqualsMatcher( std::string comparator, CaseSensitive caseSensitivity ); bool match( std::string const& source ) const override; }; class StringContainsMatcher final : public StringMatcherBase { public: StringContainsMatcher( std::string comparator, CaseSensitive caseSensitivity ); bool match( std::string const& source ) const override; }; class StartsWithMatcher final : public StringMatcherBase { public: StartsWithMatcher( std::string comparator, CaseSensitive caseSensitivity ); bool match( std::string const& source ) const override; }; class EndsWithMatcher final : public StringMatcherBase { public: EndsWithMatcher( std::string comparator, CaseSensitive caseSensitivity ); bool match( std::string const& source ) const override; }; class RegexMatcher final : public MatcherBase { std::string m_regex; CaseSensitive m_caseSensitivity; public: RegexMatcher( std::string regex, CaseSensitive caseSensitivity ); bool match( std::string const& matchee ) const override; std::string describe() const override; }; //! Creates matcher that accepts strings that are exactly equal to `str` StringEqualsMatcher Equals( std::string str, CaseSensitive caseSensitivity = CaseSensitive::Yes ); //! Creates matcher that accepts strings that contain `str` StringContainsMatcher ContainsSubstring( std::string str, CaseSensitive caseSensitivity = CaseSensitive::Yes ); //! Creates matcher that accepts strings that _end_ with `str` EndsWithMatcher EndsWith( std::string str, CaseSensitive caseSensitivity = CaseSensitive::Yes ); //! Creates matcher that accepts strings that _start_ with `str` StartsWithMatcher StartsWith( std::string str, CaseSensitive caseSensitivity = CaseSensitive::Yes ); //! Creates matcher that accepts strings matching `regex` RegexMatcher Matches( std::string regex, CaseSensitive caseSensitivity = CaseSensitive::Yes ); } // namespace Matchers } // namespace Catch