#pragma once
#include <util/generic/string.h>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
namespace testing {
/**
* When matching `const TStringBuf&`, implicitly convert other strings and string views to `Eq` matchers.
*/
template <typename T, typename TT>
class Matcher<const TBasicStringBuf<T, TT>&>: public internal::MatcherBase<const TBasicStringBuf<T, TT>&> {
public:
Matcher() {
}
explicit Matcher(const MatcherInterface<const TBasicStringBuf<T, TT>&>* impl)
: internal::MatcherBase<const TBasicStringBuf<T, TT>&>(impl) {
}
template <typename M, typename = typename std::remove_reference<M>::type::is_gtest_matcher>
Matcher(M&& m)
: internal::MatcherBase<const TBasicStringBuf<T, TT>&>(std::forward<M>(m)) {
}
Matcher(const TBasicString<T, TT>& s) {
*this = Eq(TBasicStringBuf<T, TT>(s));
}
Matcher(const T* s) {
*this = Eq(TBasicStringBuf<T, TT>(s));
}
Matcher(TBasicStringBuf<T, TT> s) {
*this = Eq(s);
}
};
/**
* When matching `TBasicBuf`, implicitly convert other strings and string views to `Eq` matchers.
*/
template <typename T, typename TT>
class Matcher<TBasicStringBuf<T, TT>>: public internal::MatcherBase<TBasicStringBuf<T, TT>> {
public:
Matcher() {
}
explicit Matcher(const MatcherInterface <TBasicStringBuf<T, TT>>* impl)
: internal::MatcherBase<TBasicStringBuf<T, TT>>(impl) {
}
explicit Matcher(const MatcherInterface<const TBasicStringBuf<T, TT>&>* impl)
: internal::MatcherBase<TBasicStringBuf<T, TT>>(impl) {
}
template <typename M, typename = typename std::remove_reference<M>::type::is_gtest_matcher>
Matcher(M&& m)
: internal::MatcherBase<TBasicStringBuf<T, TT>>(std::forward<M>(m)) {
}
Matcher(const TBasicString<T, TT>& s) {
*this = Eq(TBasicString<T, TT>(s));
}
Matcher(const T* s) {
*this = Eq(TBasicString<T, TT>(s));
}
Matcher(TBasicStringBuf<T, TT> s) {
*this = Eq(s);
}
};
/**
* When matching `const TString&`, implicitly convert other strings and string views to `Eq` matchers.
*/
template <typename T, typename TT>
class Matcher<const TBasicString<T, TT>&>: public internal::MatcherBase<const TBasicString<T, TT>&> {
public:
Matcher() {
}
explicit Matcher(const MatcherInterface<const TBasicString<T, TT>&>* impl)
: internal::MatcherBase<const TBasicString<T, TT>&>(impl) {
}
Matcher(const TBasicString<T, TT>& s) {
*this = Eq(s);
}
template <typename M, typename = typename std::remove_reference<M>::type::is_gtest_matcher>
Matcher(M&& m)
: internal::MatcherBase<const TBasicString<T, TT>&>(std::forward<M>(m)) {
}
Matcher(const T* s) {
*this = Eq(TBasicString<T, TT>(s));
}
};
/**
* When matching `TString`, implicitly convert other strings and string views to `Eq` matchers.
*/
template <typename T, typename TT>
class Matcher<TBasicString<T, TT>>: public internal::MatcherBase<TBasicString<T, TT>> {
public:
Matcher() {
}
explicit Matcher(const MatcherInterface <TBasicString<T, TT>>* impl)
: internal::MatcherBase<TBasicString<T, TT>>(impl) {
}
explicit Matcher(const MatcherInterface<const TBasicString<T, TT>&>* impl)
: internal::MatcherBase<TBasicString<T, TT>>(impl) {
}
template <typename M, typename = typename std::remove_reference<M>::type::is_gtest_matcher>
Matcher(M&& m)
: internal::MatcherBase<TBasicString<T, TT>>(std::forward<M>(m)) {
}
Matcher(const TBasicString<T, TT>& s) {
*this = Eq(s);
}
Matcher(const T* s) {
*this = Eq(TBasicString<T, TT>(s));
}
};
}