Skip to content

Commit

Permalink
Added StrEq matcher.
Browse files Browse the repository at this point in the history
  • Loading branch information
FranckRJ committed Aug 22, 2021
1 parent ae06073 commit eb10dc6
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
35 changes: 35 additions & 0 deletions include/fakeit/argument_matchers.hpp
Expand Up @@ -8,6 +8,8 @@
*/
#pragma once

#include <cstring>

namespace fakeit {

struct IMatcher : Destructible {
Expand Down Expand Up @@ -245,6 +247,34 @@ namespace fakeit {
}

};

struct StrEqMatcherCreator : public ComparisonMatcherCreator<const char*> {

virtual ~StrEqMatcherCreator() = default;

StrEqMatcherCreator(const char* const &expected)
: ComparisonMatcherCreator<const char*>(expected) {
}

struct Matcher : public ComparisonMatcherCreator<const char*>::Matcher {
Matcher(const char* const &expected)
: ComparisonMatcherCreator<const char*>::Matcher(expected) {
}

virtual std::string format() const override {
return TypeFormatter<const char*>::format(this->_expected);
}

virtual bool matches(const char* const &actual) const override {
return std::strcmp(actual, this->_expected) == 0;
}
};

virtual TypedMatcher<const char*> *createMatcher() const {
return new Matcher(this->_expected);
}

};
}

struct AnyMatcher {
Expand Down Expand Up @@ -292,4 +322,9 @@ namespace fakeit {
return rv;
}

inline internal::StrEqMatcherCreator StrEq(const char* const &arg) {
internal::StrEqMatcherCreator rv(arg);
return rv;
}

}
17 changes: 17 additions & 0 deletions tests/argument_matching_tests.cpp
Expand Up @@ -20,6 +20,7 @@ struct ArgumentMatchingTests: tpunit::TestFixture {
TEST(ArgumentMatchingTests::test_eq_matcher), TEST(ArgumentMatchingTests::test_ge_matcher),
TEST(ArgumentMatchingTests::test_lt_matcher), TEST(ArgumentMatchingTests::test_le_matcher),
TEST(ArgumentMatchingTests::test_ne_matcher), TEST(ArgumentMatchingTests::test_gt_matcher),
TEST(ArgumentMatchingTests::test_str_eq_matcher),
TEST(ArgumentMatchingTests::test_any_matcher), TEST(ArgumentMatchingTests::test_any_matcher2),
TEST(ArgumentMatchingTests::test_any_matcher), TEST(ArgumentMatchingTests::format_Any),
TEST(ArgumentMatchingTests::test_any_matcher), TEST(ArgumentMatchingTests::format_Eq),
Expand All @@ -45,6 +46,7 @@ struct ArgumentMatchingTests: tpunit::TestFixture {
virtual int func(int) = 0;
virtual int func2(int, std::string) = 0;
virtual int func3(const int&) = 0;
virtual int strfunc(const char*) = 0;
};

void mixed_matchers() {
Expand Down Expand Up @@ -165,6 +167,21 @@ struct ArgumentMatchingTests: tpunit::TestFixture {
Verify(Method(mock, func).Using(Ne(10))).Twice();
}

void test_str_eq_matcher() {

Mock<SomeInterface> mock;

When(Method(mock, strfunc).Using(StrEq("first"))).Return(1);
When(Method(mock, strfunc).Using(StrEq("second"))).Return(2);

SomeInterface &i = mock.get();
ASSERT_EQUAL(1, i.strfunc("first"));
ASSERT_EQUAL(2, i.strfunc("second"));

Verify(Method(mock, strfunc).Using(StrEq("first"))).Once();
Verify(Method(mock, strfunc).Using(StrEq("second"))).Once();
}

void test_any_matcher() {

Mock<SomeInterface> mock;
Expand Down

0 comments on commit eb10dc6

Please sign in to comment.