Unconditionally use std::tuple.
Remove all mention of TR1 tuple and our own implementation of tuple. PiperOrigin-RevId: 216395043
This commit is contained in:
committed by
Gennadiy Civil
parent
5434989dbd
commit
7d3b73c85a
@@ -75,13 +75,9 @@ using testing::SetArgPointee;
|
||||
using testing::SetArgumentPointee;
|
||||
using testing::Unused;
|
||||
using testing::_;
|
||||
using testing::get;
|
||||
using testing::internal::BuiltInDefaultValue;
|
||||
using testing::internal::Int64;
|
||||
using testing::internal::UInt64;
|
||||
using testing::make_tuple;
|
||||
using testing::tuple;
|
||||
using testing::tuple_element;
|
||||
|
||||
#if !GTEST_OS_WINDOWS_MOBILE
|
||||
using testing::SetErrnoAndReturn;
|
||||
@@ -382,8 +378,8 @@ typedef int MyGlobalFunction(bool, int);
|
||||
|
||||
class MyActionImpl : public ActionInterface<MyGlobalFunction> {
|
||||
public:
|
||||
virtual int Perform(const tuple<bool, int>& args) {
|
||||
return get<0>(args) ? get<1>(args) : 0;
|
||||
virtual int Perform(const std::tuple<bool, int>& args) {
|
||||
return std::get<0>(args) ? std::get<1>(args) : 0;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -399,8 +395,8 @@ TEST(ActionInterfaceTest, MakeAction) {
|
||||
// it a tuple whose size and type are compatible with F's argument
|
||||
// types. For example, if F is int(), then Perform() takes a
|
||||
// 0-tuple; if F is void(bool, int), then Perform() takes a
|
||||
// tuple<bool, int>, and so on.
|
||||
EXPECT_EQ(5, action.Perform(make_tuple(true, 5)));
|
||||
// std::tuple<bool, int>, and so on.
|
||||
EXPECT_EQ(5, action.Perform(std::make_tuple(true, 5)));
|
||||
}
|
||||
|
||||
// Tests that Action<F> can be contructed from a pointer to
|
||||
@@ -413,8 +409,8 @@ TEST(ActionTest, CanBeConstructedFromActionInterface) {
|
||||
TEST(ActionTest, DelegatesWorkToActionInterface) {
|
||||
const Action<MyGlobalFunction> action(new MyActionImpl);
|
||||
|
||||
EXPECT_EQ(5, action.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, action.Perform(make_tuple(false, 1)));
|
||||
EXPECT_EQ(5, action.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, action.Perform(std::make_tuple(false, 1)));
|
||||
}
|
||||
|
||||
// Tests that Action<F> can be copied.
|
||||
@@ -423,22 +419,22 @@ TEST(ActionTest, IsCopyable) {
|
||||
Action<MyGlobalFunction> a2(a1); // Tests the copy constructor.
|
||||
|
||||
// a1 should continue to work after being copied from.
|
||||
EXPECT_EQ(5, a1.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(make_tuple(false, 1)));
|
||||
EXPECT_EQ(5, a1.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(std::make_tuple(false, 1)));
|
||||
|
||||
// a2 should work like the action it was copied from.
|
||||
EXPECT_EQ(5, a2.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a2.Perform(make_tuple(false, 1)));
|
||||
EXPECT_EQ(5, a2.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a2.Perform(std::make_tuple(false, 1)));
|
||||
|
||||
a2 = a1; // Tests the assignment operator.
|
||||
|
||||
// a1 should continue to work after being copied from.
|
||||
EXPECT_EQ(5, a1.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(make_tuple(false, 1)));
|
||||
EXPECT_EQ(5, a1.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(std::make_tuple(false, 1)));
|
||||
|
||||
// a2 should work like the action it was copied from.
|
||||
EXPECT_EQ(5, a2.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a2.Perform(make_tuple(false, 1)));
|
||||
EXPECT_EQ(5, a2.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a2.Perform(std::make_tuple(false, 1)));
|
||||
}
|
||||
|
||||
// Tests that an Action<From> object can be converted to a
|
||||
@@ -446,8 +442,8 @@ TEST(ActionTest, IsCopyable) {
|
||||
|
||||
class IsNotZero : public ActionInterface<bool(int)> { // NOLINT
|
||||
public:
|
||||
virtual bool Perform(const tuple<int>& arg) {
|
||||
return get<0>(arg) != 0;
|
||||
virtual bool Perform(const std::tuple<int>& arg) {
|
||||
return std::get<0>(arg) != 0;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -460,8 +456,8 @@ class IsNotZero : public ActionInterface<bool(int)> { // NOLINT
|
||||
TEST(ActionTest, CanBeConvertedToOtherActionType) {
|
||||
const Action<bool(int)> a1(new IsNotZero); // NOLINT
|
||||
const Action<int(char)> a2 = Action<int(char)>(a1); // NOLINT
|
||||
EXPECT_EQ(1, a2.Perform(make_tuple('a')));
|
||||
EXPECT_EQ(0, a2.Perform(make_tuple('\0')));
|
||||
EXPECT_EQ(1, a2.Perform(std::make_tuple('a')));
|
||||
EXPECT_EQ(0, a2.Perform(std::make_tuple('\0')));
|
||||
}
|
||||
#endif // !GTEST_OS_SYMBIAN
|
||||
|
||||
@@ -475,7 +471,9 @@ class ReturnSecondArgumentAction {
|
||||
// polymorphic action whose Perform() method template is either
|
||||
// const or not. This lets us verify the non-const case.
|
||||
template <typename Result, typename ArgumentTuple>
|
||||
Result Perform(const ArgumentTuple& args) { return get<1>(args); }
|
||||
Result Perform(const ArgumentTuple& args) {
|
||||
return std::get<1>(args);
|
||||
}
|
||||
};
|
||||
|
||||
// Implements a polymorphic action that can be used in a nullary
|
||||
@@ -490,7 +488,9 @@ class ReturnZeroFromNullaryFunctionAction {
|
||||
// polymorphic action whose Perform() method template is either
|
||||
// const or not. This lets us verify the const case.
|
||||
template <typename Result>
|
||||
Result Perform(const tuple<>&) const { return 0; }
|
||||
Result Perform(const std::tuple<>&) const {
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
// These functions verify that MakePolymorphicAction() returns a
|
||||
@@ -509,42 +509,42 @@ ReturnZeroFromNullaryFunction() {
|
||||
// implementation class into a polymorphic action.
|
||||
TEST(MakePolymorphicActionTest, ConstructsActionFromImpl) {
|
||||
Action<int(bool, int, double)> a1 = ReturnSecondArgument(); // NOLINT
|
||||
EXPECT_EQ(5, a1.Perform(make_tuple(false, 5, 2.0)));
|
||||
EXPECT_EQ(5, a1.Perform(std::make_tuple(false, 5, 2.0)));
|
||||
}
|
||||
|
||||
// Tests that MakePolymorphicAction() works when the implementation
|
||||
// class' Perform() method template has only one template parameter.
|
||||
TEST(MakePolymorphicActionTest, WorksWhenPerformHasOneTemplateParameter) {
|
||||
Action<int()> a1 = ReturnZeroFromNullaryFunction();
|
||||
EXPECT_EQ(0, a1.Perform(make_tuple()));
|
||||
EXPECT_EQ(0, a1.Perform(std::make_tuple()));
|
||||
|
||||
Action<void*()> a2 = ReturnZeroFromNullaryFunction();
|
||||
EXPECT_TRUE(a2.Perform(make_tuple()) == nullptr);
|
||||
EXPECT_TRUE(a2.Perform(std::make_tuple()) == nullptr);
|
||||
}
|
||||
|
||||
// Tests that Return() works as an action for void-returning
|
||||
// functions.
|
||||
TEST(ReturnTest, WorksForVoid) {
|
||||
const Action<void(int)> ret = Return(); // NOLINT
|
||||
return ret.Perform(make_tuple(1));
|
||||
return ret.Perform(std::make_tuple(1));
|
||||
}
|
||||
|
||||
// Tests that Return(v) returns v.
|
||||
TEST(ReturnTest, ReturnsGivenValue) {
|
||||
Action<int()> ret = Return(1); // NOLINT
|
||||
EXPECT_EQ(1, ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(1, ret.Perform(std::make_tuple()));
|
||||
|
||||
ret = Return(-5);
|
||||
EXPECT_EQ(-5, ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(-5, ret.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that Return("string literal") works.
|
||||
TEST(ReturnTest, AcceptsStringLiteral) {
|
||||
Action<const char*()> a1 = Return("Hello");
|
||||
EXPECT_STREQ("Hello", a1.Perform(make_tuple()));
|
||||
EXPECT_STREQ("Hello", a1.Perform(std::make_tuple()));
|
||||
|
||||
Action<std::string()> a2 = Return("world");
|
||||
EXPECT_EQ("world", a2.Perform(make_tuple()));
|
||||
EXPECT_EQ("world", a2.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Test struct which wraps a vector of integers. Used in
|
||||
@@ -563,7 +563,7 @@ TEST(ReturnTest, SupportsWrapperReturnType) {
|
||||
// Return() called with 'v' as argument. The Action will return the same data
|
||||
// as 'v' (copy) but it will be wrapped in an IntegerVectorWrapper.
|
||||
Action<IntegerVectorWrapper()> a = Return(v);
|
||||
const std::vector<int>& result = *(a.Perform(make_tuple()).v);
|
||||
const std::vector<int>& result = *(a.Perform(std::make_tuple()).v);
|
||||
EXPECT_THAT(result, ::testing::ElementsAre(0, 1, 2, 3, 4));
|
||||
}
|
||||
|
||||
@@ -581,10 +581,10 @@ TEST(ReturnTest, IsCovariant) {
|
||||
Base base;
|
||||
Derived derived;
|
||||
Action<Base*()> ret = Return(&base);
|
||||
EXPECT_EQ(&base, ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(&base, ret.Perform(std::make_tuple()));
|
||||
|
||||
ret = Return(&derived);
|
||||
EXPECT_EQ(&derived, ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(&derived, ret.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that the type of the value passed into Return is converted into T
|
||||
@@ -615,7 +615,7 @@ TEST(ReturnTest, ConvertsArgumentWhenConverted) {
|
||||
EXPECT_TRUE(converted) << "Return must convert its argument in its own "
|
||||
<< "conversion operator.";
|
||||
converted = false;
|
||||
action.Perform(tuple<>());
|
||||
action.Perform(std::tuple<>());
|
||||
EXPECT_FALSE(converted) << "Action must NOT convert its argument "
|
||||
<< "when performed.";
|
||||
}
|
||||
@@ -636,10 +636,10 @@ TEST(ReturnTest, CanConvertArgumentUsingNonConstTypeCastOperator) {
|
||||
// Tests that ReturnNull() returns NULL in a pointer-returning function.
|
||||
TEST(ReturnNullTest, WorksInPointerReturningFunction) {
|
||||
const Action<int*()> a1 = ReturnNull();
|
||||
EXPECT_TRUE(a1.Perform(make_tuple()) == nullptr);
|
||||
EXPECT_TRUE(a1.Perform(std::make_tuple()) == nullptr);
|
||||
|
||||
const Action<const char*(bool)> a2 = ReturnNull(); // NOLINT
|
||||
EXPECT_TRUE(a2.Perform(make_tuple(true)) == nullptr);
|
||||
EXPECT_TRUE(a2.Perform(std::make_tuple(true)) == nullptr);
|
||||
}
|
||||
|
||||
#if GTEST_HAS_STD_UNIQUE_PTR_
|
||||
@@ -647,10 +647,10 @@ TEST(ReturnNullTest, WorksInPointerReturningFunction) {
|
||||
// functions.
|
||||
TEST(ReturnNullTest, WorksInSmartPointerReturningFunction) {
|
||||
const Action<std::unique_ptr<const int>()> a1 = ReturnNull();
|
||||
EXPECT_TRUE(a1.Perform(make_tuple()) == nullptr);
|
||||
EXPECT_TRUE(a1.Perform(std::make_tuple()) == nullptr);
|
||||
|
||||
const Action<std::shared_ptr<int>(std::string)> a2 = ReturnNull();
|
||||
EXPECT_TRUE(a2.Perform(make_tuple("foo")) == nullptr);
|
||||
EXPECT_TRUE(a2.Perform(std::make_tuple("foo")) == nullptr);
|
||||
}
|
||||
#endif // GTEST_HAS_STD_UNIQUE_PTR_
|
||||
|
||||
@@ -659,7 +659,7 @@ TEST(ReturnRefTest, WorksForReference) {
|
||||
const int n = 0;
|
||||
const Action<const int&(bool)> ret = ReturnRef(n); // NOLINT
|
||||
|
||||
EXPECT_EQ(&n, &ret.Perform(make_tuple(true)));
|
||||
EXPECT_EQ(&n, &ret.Perform(std::make_tuple(true)));
|
||||
}
|
||||
|
||||
// Tests that ReturnRef(v) is covariant.
|
||||
@@ -667,10 +667,10 @@ TEST(ReturnRefTest, IsCovariant) {
|
||||
Base base;
|
||||
Derived derived;
|
||||
Action<Base&()> a = ReturnRef(base);
|
||||
EXPECT_EQ(&base, &a.Perform(make_tuple()));
|
||||
EXPECT_EQ(&base, &a.Perform(std::make_tuple()));
|
||||
|
||||
a = ReturnRef(derived);
|
||||
EXPECT_EQ(&derived, &a.Perform(make_tuple()));
|
||||
EXPECT_EQ(&derived, &a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that ReturnRefOfCopy(v) works for reference types.
|
||||
@@ -678,12 +678,12 @@ TEST(ReturnRefOfCopyTest, WorksForReference) {
|
||||
int n = 42;
|
||||
const Action<const int&()> ret = ReturnRefOfCopy(n);
|
||||
|
||||
EXPECT_NE(&n, &ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(42, ret.Perform(make_tuple()));
|
||||
EXPECT_NE(&n, &ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(42, ret.Perform(std::make_tuple()));
|
||||
|
||||
n = 43;
|
||||
EXPECT_NE(&n, &ret.Perform(make_tuple()));
|
||||
EXPECT_EQ(42, ret.Perform(make_tuple()));
|
||||
EXPECT_NE(&n, &ret.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(42, ret.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that ReturnRefOfCopy(v) is covariant.
|
||||
@@ -691,10 +691,10 @@ TEST(ReturnRefOfCopyTest, IsCovariant) {
|
||||
Base base;
|
||||
Derived derived;
|
||||
Action<Base&()> a = ReturnRefOfCopy(base);
|
||||
EXPECT_NE(&base, &a.Perform(make_tuple()));
|
||||
EXPECT_NE(&base, &a.Perform(std::make_tuple()));
|
||||
|
||||
a = ReturnRefOfCopy(derived);
|
||||
EXPECT_NE(&derived, &a.Perform(make_tuple()));
|
||||
EXPECT_NE(&derived, &a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that DoDefault() does the default action for the mock method.
|
||||
@@ -800,14 +800,14 @@ TEST(SetArgPointeeTest, SetsTheNthPointee) {
|
||||
|
||||
int n = 0;
|
||||
char ch = '\0';
|
||||
a.Perform(make_tuple(true, &n, &ch));
|
||||
a.Perform(std::make_tuple(true, &n, &ch));
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('\0', ch);
|
||||
|
||||
a = SetArgPointee<2>('a');
|
||||
n = 0;
|
||||
ch = '\0';
|
||||
a.Perform(make_tuple(true, &n, &ch));
|
||||
a.Perform(std::make_tuple(true, &n, &ch));
|
||||
EXPECT_EQ(0, n);
|
||||
EXPECT_EQ('a', ch);
|
||||
}
|
||||
@@ -820,13 +820,13 @@ TEST(SetArgPointeeTest, AcceptsStringLiteral) {
|
||||
Action<MyFunction> a = SetArgPointee<0>("hi");
|
||||
std::string str;
|
||||
const char* ptr = nullptr;
|
||||
a.Perform(make_tuple(&str, &ptr));
|
||||
a.Perform(std::make_tuple(&str, &ptr));
|
||||
EXPECT_EQ("hi", str);
|
||||
EXPECT_TRUE(ptr == nullptr);
|
||||
|
||||
a = SetArgPointee<1>("world");
|
||||
str = "";
|
||||
a.Perform(make_tuple(&str, &ptr));
|
||||
a.Perform(std::make_tuple(&str, &ptr));
|
||||
EXPECT_EQ("", str);
|
||||
EXPECT_STREQ("world", ptr);
|
||||
}
|
||||
@@ -835,7 +835,7 @@ TEST(SetArgPointeeTest, AcceptsWideStringLiteral) {
|
||||
typedef void MyFunction(const wchar_t**);
|
||||
Action<MyFunction> a = SetArgPointee<0>(L"world");
|
||||
const wchar_t* ptr = nullptr;
|
||||
a.Perform(make_tuple(&ptr));
|
||||
a.Perform(std::make_tuple(&ptr));
|
||||
EXPECT_STREQ(L"world", ptr);
|
||||
|
||||
# if GTEST_HAS_STD_WSTRING
|
||||
@@ -843,7 +843,7 @@ TEST(SetArgPointeeTest, AcceptsWideStringLiteral) {
|
||||
typedef void MyStringFunction(std::wstring*);
|
||||
Action<MyStringFunction> a2 = SetArgPointee<0>(L"world");
|
||||
std::wstring str = L"";
|
||||
a2.Perform(make_tuple(&str));
|
||||
a2.Perform(std::make_tuple(&str));
|
||||
EXPECT_EQ(L"world", str);
|
||||
|
||||
# endif
|
||||
@@ -857,7 +857,7 @@ TEST(SetArgPointeeTest, AcceptsCharPointer) {
|
||||
Action<MyFunction> a = SetArgPointee<1>(hi);
|
||||
std::string str;
|
||||
const char* ptr = nullptr;
|
||||
a.Perform(make_tuple(true, &str, &ptr));
|
||||
a.Perform(std::make_tuple(true, &str, &ptr));
|
||||
EXPECT_EQ("hi", str);
|
||||
EXPECT_TRUE(ptr == nullptr);
|
||||
|
||||
@@ -865,7 +865,7 @@ TEST(SetArgPointeeTest, AcceptsCharPointer) {
|
||||
char* const world = world_array;
|
||||
a = SetArgPointee<2>(world);
|
||||
str = "";
|
||||
a.Perform(make_tuple(true, &str, &ptr));
|
||||
a.Perform(std::make_tuple(true, &str, &ptr));
|
||||
EXPECT_EQ("", str);
|
||||
EXPECT_EQ(world, ptr);
|
||||
}
|
||||
@@ -875,7 +875,7 @@ TEST(SetArgPointeeTest, AcceptsWideCharPointer) {
|
||||
const wchar_t* const hi = L"hi";
|
||||
Action<MyFunction> a = SetArgPointee<1>(hi);
|
||||
const wchar_t* ptr = nullptr;
|
||||
a.Perform(make_tuple(true, &ptr));
|
||||
a.Perform(std::make_tuple(true, &ptr));
|
||||
EXPECT_EQ(hi, ptr);
|
||||
|
||||
# if GTEST_HAS_STD_WSTRING
|
||||
@@ -885,7 +885,7 @@ TEST(SetArgPointeeTest, AcceptsWideCharPointer) {
|
||||
wchar_t* const world = world_array;
|
||||
Action<MyStringFunction> a2 = SetArgPointee<1>(world);
|
||||
std::wstring str;
|
||||
a2.Perform(make_tuple(true, &str));
|
||||
a2.Perform(std::make_tuple(true, &str));
|
||||
EXPECT_EQ(world_array, str);
|
||||
# endif
|
||||
}
|
||||
@@ -898,14 +898,14 @@ TEST(SetArgumentPointeeTest, SetsTheNthPointee) {
|
||||
|
||||
int n = 0;
|
||||
char ch = '\0';
|
||||
a.Perform(make_tuple(true, &n, &ch));
|
||||
a.Perform(std::make_tuple(true, &n, &ch));
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('\0', ch);
|
||||
|
||||
a = SetArgumentPointee<2>('a');
|
||||
n = 0;
|
||||
ch = '\0';
|
||||
a.Perform(make_tuple(true, &n, &ch));
|
||||
a.Perform(std::make_tuple(true, &n, &ch));
|
||||
EXPECT_EQ(0, n);
|
||||
EXPECT_EQ('a', ch);
|
||||
}
|
||||
@@ -940,16 +940,16 @@ class Foo {
|
||||
TEST(InvokeWithoutArgsTest, Function) {
|
||||
// As an action that takes one argument.
|
||||
Action<int(int)> a = InvokeWithoutArgs(Nullary); // NOLINT
|
||||
EXPECT_EQ(1, a.Perform(make_tuple(2)));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple(2)));
|
||||
|
||||
// As an action that takes two arguments.
|
||||
Action<int(int, double)> a2 = InvokeWithoutArgs(Nullary); // NOLINT
|
||||
EXPECT_EQ(1, a2.Perform(make_tuple(2, 3.5)));
|
||||
EXPECT_EQ(1, a2.Perform(std::make_tuple(2, 3.5)));
|
||||
|
||||
// As an action that returns void.
|
||||
Action<void(int)> a3 = InvokeWithoutArgs(VoidNullary); // NOLINT
|
||||
g_done = false;
|
||||
a3.Perform(make_tuple(1));
|
||||
a3.Perform(std::make_tuple(1));
|
||||
EXPECT_TRUE(g_done);
|
||||
}
|
||||
|
||||
@@ -957,17 +957,17 @@ TEST(InvokeWithoutArgsTest, Function) {
|
||||
TEST(InvokeWithoutArgsTest, Functor) {
|
||||
// As an action that takes no argument.
|
||||
Action<int()> a = InvokeWithoutArgs(NullaryFunctor()); // NOLINT
|
||||
EXPECT_EQ(2, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(2, a.Perform(std::make_tuple()));
|
||||
|
||||
// As an action that takes three arguments.
|
||||
Action<int(int, double, char)> a2 = // NOLINT
|
||||
InvokeWithoutArgs(NullaryFunctor());
|
||||
EXPECT_EQ(2, a2.Perform(make_tuple(3, 3.5, 'a')));
|
||||
EXPECT_EQ(2, a2.Perform(std::make_tuple(3, 3.5, 'a')));
|
||||
|
||||
// As an action that returns void.
|
||||
Action<void()> a3 = InvokeWithoutArgs(VoidNullaryFunctor());
|
||||
g_done = false;
|
||||
a3.Perform(make_tuple());
|
||||
a3.Perform(std::make_tuple());
|
||||
EXPECT_TRUE(g_done);
|
||||
}
|
||||
|
||||
@@ -976,13 +976,13 @@ TEST(InvokeWithoutArgsTest, Method) {
|
||||
Foo foo;
|
||||
Action<int(bool, char)> a = // NOLINT
|
||||
InvokeWithoutArgs(&foo, &Foo::Nullary);
|
||||
EXPECT_EQ(123, a.Perform(make_tuple(true, 'a')));
|
||||
EXPECT_EQ(123, a.Perform(std::make_tuple(true, 'a')));
|
||||
}
|
||||
|
||||
// Tests using IgnoreResult() on a polymorphic action.
|
||||
TEST(IgnoreResultTest, PolymorphicAction) {
|
||||
Action<void(int)> a = IgnoreResult(Return(5)); // NOLINT
|
||||
a.Perform(make_tuple(1));
|
||||
a.Perform(std::make_tuple(1));
|
||||
}
|
||||
|
||||
// Tests using IgnoreResult() on a monomorphic action.
|
||||
@@ -995,7 +995,7 @@ int ReturnOne() {
|
||||
TEST(IgnoreResultTest, MonomorphicAction) {
|
||||
g_done = false;
|
||||
Action<void()> a = IgnoreResult(Invoke(ReturnOne));
|
||||
a.Perform(make_tuple());
|
||||
a.Perform(std::make_tuple());
|
||||
EXPECT_TRUE(g_done);
|
||||
}
|
||||
|
||||
@@ -1010,28 +1010,28 @@ TEST(IgnoreResultTest, ActionReturningClass) {
|
||||
g_done = false;
|
||||
Action<void(int)> a =
|
||||
IgnoreResult(Invoke(ReturnMyNonDefaultConstructible)); // NOLINT
|
||||
a.Perform(make_tuple(2));
|
||||
a.Perform(std::make_tuple(2));
|
||||
EXPECT_TRUE(g_done);
|
||||
}
|
||||
|
||||
TEST(AssignTest, Int) {
|
||||
int x = 0;
|
||||
Action<void(int)> a = Assign(&x, 5);
|
||||
a.Perform(make_tuple(0));
|
||||
a.Perform(std::make_tuple(0));
|
||||
EXPECT_EQ(5, x);
|
||||
}
|
||||
|
||||
TEST(AssignTest, String) {
|
||||
::std::string x;
|
||||
Action<void(void)> a = Assign(&x, "Hello, world");
|
||||
a.Perform(make_tuple());
|
||||
a.Perform(std::make_tuple());
|
||||
EXPECT_EQ("Hello, world", x);
|
||||
}
|
||||
|
||||
TEST(AssignTest, CompatibleTypes) {
|
||||
double x = 0;
|
||||
Action<void(int)> a = Assign(&x, 5);
|
||||
a.Perform(make_tuple(0));
|
||||
a.Perform(std::make_tuple(0));
|
||||
EXPECT_DOUBLE_EQ(5, x);
|
||||
}
|
||||
|
||||
@@ -1045,20 +1045,20 @@ class SetErrnoAndReturnTest : public testing::Test {
|
||||
|
||||
TEST_F(SetErrnoAndReturnTest, Int) {
|
||||
Action<int(void)> a = SetErrnoAndReturn(ENOTTY, -5);
|
||||
EXPECT_EQ(-5, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(-5, a.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(ENOTTY, errno);
|
||||
}
|
||||
|
||||
TEST_F(SetErrnoAndReturnTest, Ptr) {
|
||||
int x;
|
||||
Action<int*(void)> a = SetErrnoAndReturn(ENOTTY, &x);
|
||||
EXPECT_EQ(&x, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(&x, a.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(ENOTTY, errno);
|
||||
}
|
||||
|
||||
TEST_F(SetErrnoAndReturnTest, CompatibleTypes) {
|
||||
Action<double()> a = SetErrnoAndReturn(EINVAL, 5);
|
||||
EXPECT_DOUBLE_EQ(5.0, a.Perform(make_tuple()));
|
||||
EXPECT_DOUBLE_EQ(5.0, a.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(EINVAL, errno);
|
||||
}
|
||||
|
||||
@@ -1298,47 +1298,47 @@ TEST(FunctorActionTest, ActionFromFunction) {
|
||||
|
||||
TEST(FunctorActionTest, ActionFromLambda) {
|
||||
Action<int(bool, int)> a1 = [](bool b, int i) { return b ? i : 0; };
|
||||
EXPECT_EQ(5, a1.Perform(make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(make_tuple(false, 5)));
|
||||
EXPECT_EQ(5, a1.Perform(std::make_tuple(true, 5)));
|
||||
EXPECT_EQ(0, a1.Perform(std::make_tuple(false, 5)));
|
||||
|
||||
std::unique_ptr<int> saved;
|
||||
Action<void(std::unique_ptr<int>)> a2 = [&saved](std::unique_ptr<int> p) {
|
||||
saved = std::move(p);
|
||||
};
|
||||
a2.Perform(make_tuple(UniqueInt(5)));
|
||||
a2.Perform(std::make_tuple(UniqueInt(5)));
|
||||
EXPECT_EQ(5, *saved);
|
||||
}
|
||||
|
||||
TEST(FunctorActionTest, PolymorphicFunctor) {
|
||||
Action<int(int)> ai = Double();
|
||||
EXPECT_EQ(2, ai.Perform(make_tuple(1)));
|
||||
EXPECT_EQ(2, ai.Perform(std::make_tuple(1)));
|
||||
Action<double(double)> ad = Double(); // Double? Double double!
|
||||
EXPECT_EQ(3.0, ad.Perform(make_tuple(1.5)));
|
||||
EXPECT_EQ(3.0, ad.Perform(std::make_tuple(1.5)));
|
||||
}
|
||||
|
||||
TEST(FunctorActionTest, TypeConversion) {
|
||||
// Numeric promotions are allowed.
|
||||
const Action<bool(int)> a1 = [](int i) { return i > 1; };
|
||||
const Action<int(bool)> a2 = Action<int(bool)>(a1);
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple(42)));
|
||||
EXPECT_EQ(0, a2.Perform(make_tuple(42)));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple(42)));
|
||||
EXPECT_EQ(0, a2.Perform(std::make_tuple(42)));
|
||||
|
||||
// Implicit constructors are allowed.
|
||||
const Action<bool(std::string)> s1 = [](std::string s) { return !s.empty(); };
|
||||
const Action<int(const char*)> s2 = Action<int(const char*)>(s1);
|
||||
EXPECT_EQ(0, s2.Perform(make_tuple("")));
|
||||
EXPECT_EQ(1, s2.Perform(make_tuple("hello")));
|
||||
EXPECT_EQ(0, s2.Perform(std::make_tuple("")));
|
||||
EXPECT_EQ(1, s2.Perform(std::make_tuple("hello")));
|
||||
|
||||
// Also between the lambda and the action itself.
|
||||
const Action<bool(std::string)> x = [](Unused) { return 42; };
|
||||
EXPECT_TRUE(x.Perform(make_tuple("hello")));
|
||||
EXPECT_TRUE(x.Perform(std::make_tuple("hello")));
|
||||
}
|
||||
|
||||
TEST(FunctorActionTest, UnusedArguments) {
|
||||
// Verify that users can ignore uninteresting arguments.
|
||||
Action<int(int, double y, double z)> a =
|
||||
[](int i, Unused, Unused) { return 2 * i; };
|
||||
tuple<int, double, double> dummy = make_tuple(3, 7.3, 9.44);
|
||||
std::tuple<int, double, double> dummy = std::make_tuple(3, 7.3, 9.44);
|
||||
EXPECT_EQ(6, a.Perform(dummy));
|
||||
}
|
||||
|
||||
@@ -1349,14 +1349,14 @@ TEST(FunctorActionTest, UnusedArguments) {
|
||||
// so maybe it's better to make users use lambdas instead.
|
||||
TEST(MoveOnlyArgumentsTest, ReturningActions) {
|
||||
Action<int(std::unique_ptr<int>)> a = Return(1);
|
||||
EXPECT_EQ(1, a.Perform(make_tuple(nullptr)));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple(nullptr)));
|
||||
|
||||
a = testing::WithoutArgs([]() { return 7; });
|
||||
EXPECT_EQ(7, a.Perform(make_tuple(nullptr)));
|
||||
EXPECT_EQ(7, a.Perform(std::make_tuple(nullptr)));
|
||||
|
||||
Action<void(std::unique_ptr<int>, int*)> a2 = testing::SetArgPointee<1>(3);
|
||||
int x = 0;
|
||||
a2.Perform(make_tuple(nullptr, &x));
|
||||
a2.Perform(std::make_tuple(nullptr, &x));
|
||||
EXPECT_EQ(x, 3);
|
||||
}
|
||||
|
||||
|
||||
@@ -45,10 +45,6 @@ namespace gmock_generated_actions_test {
|
||||
|
||||
using ::std::plus;
|
||||
using ::std::string;
|
||||
using testing::get;
|
||||
using testing::make_tuple;
|
||||
using testing::tuple;
|
||||
using testing::tuple_element;
|
||||
using testing::_;
|
||||
using testing::Action;
|
||||
using testing::ActionInterface;
|
||||
@@ -168,41 +164,41 @@ inline const char* CharPtr(const char* s) { return s; }
|
||||
// Tests using InvokeArgument with a nullary function.
|
||||
TEST(InvokeArgumentTest, Function0) {
|
||||
Action<int(int, int(*)())> a = InvokeArgument<1>(); // NOLINT
|
||||
EXPECT_EQ(1, a.Perform(make_tuple(2, &Nullary)));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple(2, &Nullary)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a unary function.
|
||||
TEST(InvokeArgumentTest, Functor1) {
|
||||
Action<int(UnaryFunctor)> a = InvokeArgument<0>(true); // NOLINT
|
||||
EXPECT_EQ(1, a.Perform(make_tuple(UnaryFunctor())));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple(UnaryFunctor())));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 5-ary function.
|
||||
TEST(InvokeArgumentTest, Function5) {
|
||||
Action<int(int(*)(int, int, int, int, int))> a = // NOLINT
|
||||
InvokeArgument<0>(10000, 2000, 300, 40, 5);
|
||||
EXPECT_EQ(12345, a.Perform(make_tuple(&SumOf5)));
|
||||
EXPECT_EQ(12345, a.Perform(std::make_tuple(&SumOf5)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 5-ary functor.
|
||||
TEST(InvokeArgumentTest, Functor5) {
|
||||
Action<int(SumOf5Functor)> a = // NOLINT
|
||||
InvokeArgument<0>(10000, 2000, 300, 40, 5);
|
||||
EXPECT_EQ(12345, a.Perform(make_tuple(SumOf5Functor())));
|
||||
EXPECT_EQ(12345, a.Perform(std::make_tuple(SumOf5Functor())));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 6-ary function.
|
||||
TEST(InvokeArgumentTest, Function6) {
|
||||
Action<int(int(*)(int, int, int, int, int, int))> a = // NOLINT
|
||||
InvokeArgument<0>(100000, 20000, 3000, 400, 50, 6);
|
||||
EXPECT_EQ(123456, a.Perform(make_tuple(&SumOf6)));
|
||||
EXPECT_EQ(123456, a.Perform(std::make_tuple(&SumOf6)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 6-ary functor.
|
||||
TEST(InvokeArgumentTest, Functor6) {
|
||||
Action<int(SumOf6Functor)> a = // NOLINT
|
||||
InvokeArgument<0>(100000, 20000, 3000, 400, 50, 6);
|
||||
EXPECT_EQ(123456, a.Perform(make_tuple(SumOf6Functor())));
|
||||
EXPECT_EQ(123456, a.Perform(std::make_tuple(SumOf6Functor())));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 7-ary function.
|
||||
@@ -211,7 +207,7 @@ TEST(InvokeArgumentTest, Function7) {
|
||||
const char*, const char*, const char*,
|
||||
const char*))>
|
||||
a = InvokeArgument<0>("1", "2", "3", "4", "5", "6", "7");
|
||||
EXPECT_EQ("1234567", a.Perform(make_tuple(&Concat7)));
|
||||
EXPECT_EQ("1234567", a.Perform(std::make_tuple(&Concat7)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 8-ary function.
|
||||
@@ -220,7 +216,7 @@ TEST(InvokeArgumentTest, Function8) {
|
||||
const char*, const char*, const char*,
|
||||
const char*, const char*))>
|
||||
a = InvokeArgument<0>("1", "2", "3", "4", "5", "6", "7", "8");
|
||||
EXPECT_EQ("12345678", a.Perform(make_tuple(&Concat8)));
|
||||
EXPECT_EQ("12345678", a.Perform(std::make_tuple(&Concat8)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 9-ary function.
|
||||
@@ -229,7 +225,7 @@ TEST(InvokeArgumentTest, Function9) {
|
||||
const char*, const char*, const char*,
|
||||
const char*, const char*, const char*))>
|
||||
a = InvokeArgument<0>("1", "2", "3", "4", "5", "6", "7", "8", "9");
|
||||
EXPECT_EQ("123456789", a.Perform(make_tuple(&Concat9)));
|
||||
EXPECT_EQ("123456789", a.Perform(std::make_tuple(&Concat9)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a 10-ary function.
|
||||
@@ -238,14 +234,14 @@ TEST(InvokeArgumentTest, Function10) {
|
||||
const char*, const char*, const char*, const char*, const char*,
|
||||
const char*, const char*, const char*, const char*, const char*))>
|
||||
a = InvokeArgument<0>("1", "2", "3", "4", "5", "6", "7", "8", "9", "0");
|
||||
EXPECT_EQ("1234567890", a.Perform(make_tuple(&Concat10)));
|
||||
EXPECT_EQ("1234567890", a.Perform(std::make_tuple(&Concat10)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a function that takes a pointer argument.
|
||||
TEST(InvokeArgumentTest, ByPointerFunction) {
|
||||
Action<const char*(const char*(*)(const char* input, short n))> a = // NOLINT
|
||||
InvokeArgument<0>(static_cast<const char*>("Hi"), Short(1));
|
||||
EXPECT_STREQ("i", a.Perform(make_tuple(&Binary)));
|
||||
EXPECT_STREQ("i", a.Perform(std::make_tuple(&Binary)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a function that takes a const char*
|
||||
@@ -253,7 +249,7 @@ TEST(InvokeArgumentTest, ByPointerFunction) {
|
||||
TEST(InvokeArgumentTest, FunctionWithCStringLiteral) {
|
||||
Action<const char*(const char*(*)(const char* input, short n))> a = // NOLINT
|
||||
InvokeArgument<0>("Hi", Short(1));
|
||||
EXPECT_STREQ("i", a.Perform(make_tuple(&Binary)));
|
||||
EXPECT_STREQ("i", a.Perform(std::make_tuple(&Binary)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with a function that takes a const reference.
|
||||
@@ -263,7 +259,7 @@ TEST(InvokeArgumentTest, ByConstReferenceFunction) {
|
||||
// When action 'a' is constructed, it makes a copy of the temporary
|
||||
// string object passed to it, so it's OK to use 'a' later, when the
|
||||
// temporary object has already died.
|
||||
EXPECT_TRUE(a.Perform(make_tuple(&ByConstRef)));
|
||||
EXPECT_TRUE(a.Perform(std::make_tuple(&ByConstRef)));
|
||||
}
|
||||
|
||||
// Tests using InvokeArgument with ByRef() and a function that takes a
|
||||
@@ -272,18 +268,18 @@ TEST(InvokeArgumentTest, ByExplicitConstReferenceFunction) {
|
||||
Action<bool(bool(*)(const double& x))> a = // NOLINT
|
||||
InvokeArgument<0>(ByRef(g_double));
|
||||
// The above line calls ByRef() on a const value.
|
||||
EXPECT_TRUE(a.Perform(make_tuple(&ReferencesGlobalDouble)));
|
||||
EXPECT_TRUE(a.Perform(std::make_tuple(&ReferencesGlobalDouble)));
|
||||
|
||||
double x = 0;
|
||||
a = InvokeArgument<0>(ByRef(x)); // This calls ByRef() on a non-const.
|
||||
EXPECT_FALSE(a.Perform(make_tuple(&ReferencesGlobalDouble)));
|
||||
EXPECT_FALSE(a.Perform(std::make_tuple(&ReferencesGlobalDouble)));
|
||||
}
|
||||
|
||||
// Tests using WithArgs and with an action that takes 1 argument.
|
||||
TEST(WithArgsTest, OneArg) {
|
||||
Action<bool(double x, int n)> a = WithArgs<1>(Invoke(Unary)); // NOLINT
|
||||
EXPECT_TRUE(a.Perform(make_tuple(1.5, -1)));
|
||||
EXPECT_FALSE(a.Perform(make_tuple(1.5, 1)));
|
||||
EXPECT_TRUE(a.Perform(std::make_tuple(1.5, -1)));
|
||||
EXPECT_FALSE(a.Perform(std::make_tuple(1.5, 1)));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 2 arguments.
|
||||
@@ -291,14 +287,14 @@ TEST(WithArgsTest, TwoArgs) {
|
||||
Action<const char*(const char* s, double x, short n)> a =
|
||||
WithArgs<0, 2>(Invoke(Binary));
|
||||
const char s[] = "Hello";
|
||||
EXPECT_EQ(s + 2, a.Perform(make_tuple(CharPtr(s), 0.5, Short(2))));
|
||||
EXPECT_EQ(s + 2, a.Perform(std::make_tuple(CharPtr(s), 0.5, Short(2))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 3 arguments.
|
||||
TEST(WithArgsTest, ThreeArgs) {
|
||||
Action<int(int, double, char, short)> a = // NOLINT
|
||||
WithArgs<0, 2, 3>(Invoke(Ternary));
|
||||
EXPECT_EQ(123, a.Perform(make_tuple(100, 6.5, Char(20), Short(3))));
|
||||
EXPECT_EQ(123, a.Perform(std::make_tuple(100, 6.5, Char(20), Short(3))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 4 arguments.
|
||||
@@ -306,8 +302,8 @@ TEST(WithArgsTest, FourArgs) {
|
||||
Action<std::string(const char*, const char*, double, const char*,
|
||||
const char*)>
|
||||
a = WithArgs<4, 3, 1, 0>(Invoke(Concat4));
|
||||
EXPECT_EQ("4310", a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), 2.5,
|
||||
CharPtr("3"), CharPtr("4"))));
|
||||
EXPECT_EQ("4310", a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"), 2.5,
|
||||
CharPtr("3"), CharPtr("4"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 5 arguments.
|
||||
@@ -316,34 +312,32 @@ TEST(WithArgsTest, FiveArgs) {
|
||||
const char*)>
|
||||
a = WithArgs<4, 3, 2, 1, 0>(Invoke(Concat5));
|
||||
EXPECT_EQ("43210",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"), CharPtr("4"))));
|
||||
a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"), CharPtr("4"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 6 arguments.
|
||||
TEST(WithArgsTest, SixArgs) {
|
||||
Action<std::string(const char*, const char*, const char*)> a =
|
||||
WithArgs<0, 1, 2, 2, 1, 0>(Invoke(Concat6));
|
||||
EXPECT_EQ("012210",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"))));
|
||||
EXPECT_EQ("012210", a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"),
|
||||
CharPtr("2"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 7 arguments.
|
||||
TEST(WithArgsTest, SevenArgs) {
|
||||
Action<std::string(const char*, const char*, const char*, const char*)> a =
|
||||
WithArgs<0, 1, 2, 3, 2, 1, 0>(Invoke(Concat7));
|
||||
EXPECT_EQ("0123210",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
EXPECT_EQ("0123210", a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"),
|
||||
CharPtr("2"), CharPtr("3"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 8 arguments.
|
||||
TEST(WithArgsTest, EightArgs) {
|
||||
Action<std::string(const char*, const char*, const char*, const char*)> a =
|
||||
WithArgs<0, 1, 2, 3, 0, 1, 2, 3>(Invoke(Concat8));
|
||||
EXPECT_EQ("01230123",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
EXPECT_EQ("01230123", a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"),
|
||||
CharPtr("2"), CharPtr("3"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 9 arguments.
|
||||
@@ -351,8 +345,8 @@ TEST(WithArgsTest, NineArgs) {
|
||||
Action<std::string(const char*, const char*, const char*, const char*)> a =
|
||||
WithArgs<0, 1, 2, 3, 1, 2, 3, 2, 3>(Invoke(Concat9));
|
||||
EXPECT_EQ("012312323",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that takes 10 arguments.
|
||||
@@ -360,22 +354,23 @@ TEST(WithArgsTest, TenArgs) {
|
||||
Action<std::string(const char*, const char*, const char*, const char*)> a =
|
||||
WithArgs<0, 1, 2, 3, 2, 1, 0, 1, 2, 3>(Invoke(Concat10));
|
||||
EXPECT_EQ("0123210123",
|
||||
a.Perform(make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
a.Perform(std::make_tuple(CharPtr("0"), CharPtr("1"), CharPtr("2"),
|
||||
CharPtr("3"))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that is not Invoke().
|
||||
class SubstractAction : public ActionInterface<int(int, int)> { // NOLINT
|
||||
public:
|
||||
virtual int Perform(const tuple<int, int>& args) {
|
||||
return get<0>(args) - get<1>(args);
|
||||
virtual int Perform(const std::tuple<int, int>& args) {
|
||||
return std::get<0>(args) - std::get<1>(args);
|
||||
}
|
||||
};
|
||||
|
||||
TEST(WithArgsTest, NonInvokeAction) {
|
||||
Action<int(const std::string&, int, int)> a = // NOLINT
|
||||
WithArgs<2, 1>(MakeAction(new SubstractAction));
|
||||
tuple<std::string, int, int> dummy = make_tuple(std::string("hi"), 2, 10);
|
||||
std::tuple<std::string, int, int> dummy =
|
||||
std::make_tuple(std::string("hi"), 2, 10);
|
||||
EXPECT_EQ(8, a.Perform(dummy));
|
||||
}
|
||||
|
||||
@@ -383,14 +378,14 @@ TEST(WithArgsTest, NonInvokeAction) {
|
||||
TEST(WithArgsTest, Identity) {
|
||||
Action<int(int x, char y, short z)> a = // NOLINT
|
||||
WithArgs<0, 1, 2>(Invoke(Ternary));
|
||||
EXPECT_EQ(123, a.Perform(make_tuple(100, Char(20), Short(3))));
|
||||
EXPECT_EQ(123, a.Perform(std::make_tuple(100, Char(20), Short(3))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with repeated arguments.
|
||||
TEST(WithArgsTest, RepeatedArguments) {
|
||||
Action<int(bool, int m, int n)> a = // NOLINT
|
||||
WithArgs<1, 1, 1, 1>(Invoke(SumOf4));
|
||||
EXPECT_EQ(4, a.Perform(make_tuple(false, 1, 10)));
|
||||
EXPECT_EQ(4, a.Perform(std::make_tuple(false, 1, 10)));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with reversed argument order.
|
||||
@@ -398,21 +393,22 @@ TEST(WithArgsTest, ReversedArgumentOrder) {
|
||||
Action<const char*(short n, const char* input)> a = // NOLINT
|
||||
WithArgs<1, 0>(Invoke(Binary));
|
||||
const char s[] = "Hello";
|
||||
EXPECT_EQ(s + 2, a.Perform(make_tuple(Short(2), CharPtr(s))));
|
||||
EXPECT_EQ(s + 2, a.Perform(std::make_tuple(Short(2), CharPtr(s))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with compatible, but not identical, argument types.
|
||||
TEST(WithArgsTest, ArgsOfCompatibleTypes) {
|
||||
Action<long(short x, char y, double z, char c)> a = // NOLINT
|
||||
WithArgs<0, 1, 3>(Invoke(Ternary));
|
||||
EXPECT_EQ(123, a.Perform(make_tuple(Short(100), Char(20), 5.6, Char(3))));
|
||||
EXPECT_EQ(123,
|
||||
a.Perform(std::make_tuple(Short(100), Char(20), 5.6, Char(3))));
|
||||
}
|
||||
|
||||
// Tests using WithArgs with an action that returns void.
|
||||
TEST(WithArgsTest, VoidAction) {
|
||||
Action<void(double x, char c, int n)> a = WithArgs<2, 1>(Invoke(VoidBinary));
|
||||
g_done = false;
|
||||
a.Perform(make_tuple(1.5, 'a', 3));
|
||||
a.Perform(std::make_tuple(1.5, 'a', 3));
|
||||
EXPECT_TRUE(g_done);
|
||||
}
|
||||
|
||||
@@ -421,7 +417,7 @@ TEST(DoAllTest, TwoActions) {
|
||||
int n = 0;
|
||||
Action<int(int*)> a = DoAll(SetArgPointee<0>(1), // NOLINT
|
||||
Return(2));
|
||||
EXPECT_EQ(2, a.Perform(make_tuple(&n)));
|
||||
EXPECT_EQ(2, a.Perform(std::make_tuple(&n)));
|
||||
EXPECT_EQ(1, n);
|
||||
}
|
||||
|
||||
@@ -431,7 +427,7 @@ TEST(DoAllTest, ThreeActions) {
|
||||
Action<int(int*, int*)> a = DoAll(SetArgPointee<0>(1), // NOLINT
|
||||
SetArgPointee<1>(2),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, a.Perform(make_tuple(&m, &n)));
|
||||
EXPECT_EQ(3, a.Perform(std::make_tuple(&m, &n)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
}
|
||||
@@ -445,7 +441,7 @@ TEST(DoAllTest, FourActions) {
|
||||
SetArgPointee<1>(2),
|
||||
SetArgPointee<2>('a'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, a.Perform(make_tuple(&m, &n, &ch)));
|
||||
EXPECT_EQ(3, a.Perform(std::make_tuple(&m, &n, &ch)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', ch);
|
||||
@@ -461,7 +457,7 @@ TEST(DoAllTest, FiveActions) {
|
||||
SetArgPointee<2>('a'),
|
||||
SetArgPointee<3>('b'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b)));
|
||||
EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &n, &a, &b)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -479,7 +475,7 @@ TEST(DoAllTest, SixActions) {
|
||||
SetArgPointee<3>('b'),
|
||||
SetArgPointee<4>('c'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b, &c)));
|
||||
EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &n, &a, &b, &c)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -499,7 +495,7 @@ TEST(DoAllTest, SevenActions) {
|
||||
SetArgPointee<4>('c'),
|
||||
SetArgPointee<5>('d'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b, &c, &d)));
|
||||
EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &n, &a, &b, &c, &d)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -522,7 +518,7 @@ TEST(DoAllTest, EightActions) {
|
||||
SetArgPointee<5>('d'),
|
||||
SetArgPointee<6>('e'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b, &c, &d, &e)));
|
||||
EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &n, &a, &b, &c, &d, &e)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -547,7 +543,7 @@ TEST(DoAllTest, NineActions) {
|
||||
SetArgPointee<6>('e'),
|
||||
SetArgPointee<7>('f'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b, &c, &d, &e, &f)));
|
||||
EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &n, &a, &b, &c, &d, &e, &f)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -575,7 +571,8 @@ TEST(DoAllTest, TenActions) {
|
||||
SetArgPointee<7>('f'),
|
||||
SetArgPointee<8>('g'),
|
||||
Return(3));
|
||||
EXPECT_EQ(3, action.Perform(make_tuple(&m, &n, &a, &b, &c, &d, &e, &f, &g)));
|
||||
EXPECT_EQ(
|
||||
3, action.Perform(std::make_tuple(&m, &n, &a, &b, &c, &d, &e, &f, &g)));
|
||||
EXPECT_EQ(1, m);
|
||||
EXPECT_EQ(2, n);
|
||||
EXPECT_EQ('a', a);
|
||||
@@ -605,10 +602,10 @@ ACTION(Return5) { return 5; }
|
||||
|
||||
TEST(ActionMacroTest, WorksWhenNotReferencingArguments) {
|
||||
Action<double()> a1 = Return5();
|
||||
EXPECT_DOUBLE_EQ(5, a1.Perform(make_tuple()));
|
||||
EXPECT_DOUBLE_EQ(5, a1.Perform(std::make_tuple()));
|
||||
|
||||
Action<int(double, bool)> a2 = Return5();
|
||||
EXPECT_EQ(5, a2.Perform(make_tuple(1, true)));
|
||||
EXPECT_EQ(5, a2.Perform(std::make_tuple(1, true)));
|
||||
}
|
||||
|
||||
// Tests that ACTION() can define an action that returns void.
|
||||
@@ -617,7 +614,7 @@ ACTION(IncrementArg1) { (*arg1)++; }
|
||||
TEST(ActionMacroTest, WorksWhenReturningVoid) {
|
||||
Action<void(int, int*)> a1 = IncrementArg1();
|
||||
int n = 0;
|
||||
a1.Perform(make_tuple(5, &n));
|
||||
a1.Perform(std::make_tuple(5, &n));
|
||||
EXPECT_EQ(1, n);
|
||||
}
|
||||
|
||||
@@ -632,22 +629,22 @@ ACTION(IncrementArg2) {
|
||||
TEST(ActionMacroTest, CanReferenceArgumentType) {
|
||||
Action<void(int, bool, int*)> a1 = IncrementArg2();
|
||||
int n = 0;
|
||||
a1.Perform(make_tuple(5, false, &n));
|
||||
a1.Perform(std::make_tuple(5, false, &n));
|
||||
EXPECT_EQ(1, n);
|
||||
}
|
||||
|
||||
// Tests that the body of ACTION() can reference the argument tuple
|
||||
// via args_type and args.
|
||||
ACTION(Sum2) {
|
||||
StaticAssertTypeEq<tuple<int, char, int*>, args_type>();
|
||||
StaticAssertTypeEq<std::tuple<int, char, int*>, args_type>();
|
||||
args_type args_copy = args;
|
||||
return get<0>(args_copy) + get<1>(args_copy);
|
||||
return std::get<0>(args_copy) + std::get<1>(args_copy);
|
||||
}
|
||||
|
||||
TEST(ActionMacroTest, CanReferenceArgumentTuple) {
|
||||
Action<int(int, char, int*)> a1 = Sum2();
|
||||
int dummy = 0;
|
||||
EXPECT_EQ(11, a1.Perform(make_tuple(5, Char(6), &dummy)));
|
||||
EXPECT_EQ(11, a1.Perform(std::make_tuple(5, Char(6), &dummy)));
|
||||
}
|
||||
|
||||
// Tests that the body of ACTION() can reference the mock function
|
||||
@@ -662,8 +659,8 @@ ACTION(InvokeDummy) {
|
||||
|
||||
TEST(ActionMacroTest, CanReferenceMockFunctionType) {
|
||||
Action<int(bool)> a1 = InvokeDummy();
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple(true)));
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple(false)));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple(true)));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple(false)));
|
||||
}
|
||||
|
||||
// Tests that the body of ACTION() can reference the mock function's
|
||||
@@ -676,8 +673,8 @@ ACTION(InvokeDummy2) {
|
||||
|
||||
TEST(ActionMacroTest, CanReferenceMockFunctionReturnType) {
|
||||
Action<int(bool)> a1 = InvokeDummy2();
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple(true)));
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple(false)));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple(true)));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple(false)));
|
||||
}
|
||||
|
||||
// Tests that ACTION() works for arguments passed by const reference.
|
||||
@@ -689,7 +686,7 @@ ACTION(ReturnAddrOfConstBoolReferenceArg) {
|
||||
TEST(ActionMacroTest, WorksForConstReferenceArg) {
|
||||
Action<const bool*(int, const bool&)> a = ReturnAddrOfConstBoolReferenceArg();
|
||||
const bool b = false;
|
||||
EXPECT_EQ(&b, a.Perform(tuple<int, const bool&>(0, b)));
|
||||
EXPECT_EQ(&b, a.Perform(std::tuple<int, const bool&>(0, b)));
|
||||
}
|
||||
|
||||
// Tests that ACTION() works for arguments passed by non-const reference.
|
||||
@@ -701,7 +698,7 @@ ACTION(ReturnAddrOfIntReferenceArg) {
|
||||
TEST(ActionMacroTest, WorksForNonConstReferenceArg) {
|
||||
Action<int*(int&, bool, int)> a = ReturnAddrOfIntReferenceArg();
|
||||
int n = 0;
|
||||
EXPECT_EQ(&n, a.Perform(tuple<int&, bool, int>(n, true, 1)));
|
||||
EXPECT_EQ(&n, a.Perform(std::tuple<int&, bool, int>(n, true, 1)));
|
||||
}
|
||||
|
||||
// Tests that ACTION() can be used in a namespace.
|
||||
@@ -711,7 +708,7 @@ ACTION(Sum) { return arg0 + arg1; }
|
||||
|
||||
TEST(ActionMacroTest, WorksInNamespace) {
|
||||
Action<int(int, int)> a1 = action_test::Sum();
|
||||
EXPECT_EQ(3, a1.Perform(make_tuple(1, 2)));
|
||||
EXPECT_EQ(3, a1.Perform(std::make_tuple(1, 2)));
|
||||
}
|
||||
|
||||
// Tests that the same ACTION definition works for mock functions with
|
||||
@@ -720,11 +717,11 @@ ACTION(PlusTwo) { return arg0 + 2; }
|
||||
|
||||
TEST(ActionMacroTest, WorksForDifferentArgumentNumbers) {
|
||||
Action<int(int)> a1 = PlusTwo();
|
||||
EXPECT_EQ(4, a1.Perform(make_tuple(2)));
|
||||
EXPECT_EQ(4, a1.Perform(std::make_tuple(2)));
|
||||
|
||||
Action<double(float, void*)> a2 = PlusTwo();
|
||||
int dummy;
|
||||
EXPECT_DOUBLE_EQ(6, a2.Perform(make_tuple(4.0f, &dummy)));
|
||||
EXPECT_DOUBLE_EQ(6, a2.Perform(std::make_tuple(4.0f, &dummy)));
|
||||
}
|
||||
|
||||
// Tests that ACTION_P can define a parameterized action.
|
||||
@@ -732,7 +729,7 @@ ACTION_P(Plus, n) { return arg0 + n; }
|
||||
|
||||
TEST(ActionPMacroTest, DefinesParameterizedAction) {
|
||||
Action<int(int m, bool t)> a1 = Plus(9);
|
||||
EXPECT_EQ(10, a1.Perform(make_tuple(1, true)));
|
||||
EXPECT_EQ(10, a1.Perform(std::make_tuple(1, true)));
|
||||
}
|
||||
|
||||
// Tests that the body of ACTION_P can reference the argument types
|
||||
@@ -745,7 +742,7 @@ ACTION_P(TypedPlus, n) {
|
||||
|
||||
TEST(ActionPMacroTest, CanReferenceArgumentAndParameterTypes) {
|
||||
Action<int(char m, bool t)> a1 = TypedPlus(9);
|
||||
EXPECT_EQ(10, a1.Perform(make_tuple(Char(1), true)));
|
||||
EXPECT_EQ(10, a1.Perform(std::make_tuple(Char(1), true)));
|
||||
}
|
||||
|
||||
// Tests that a parameterized action can be used in any mock function
|
||||
@@ -753,7 +750,7 @@ TEST(ActionPMacroTest, CanReferenceArgumentAndParameterTypes) {
|
||||
TEST(ActionPMacroTest, WorksInCompatibleMockFunction) {
|
||||
Action<std::string(const std::string& s)> a1 = Plus("tail");
|
||||
const std::string re = "re";
|
||||
tuple<const std::string> dummy = make_tuple(re);
|
||||
std::tuple<const std::string> dummy = std::make_tuple(re);
|
||||
EXPECT_EQ("retail", a1.Perform(dummy));
|
||||
}
|
||||
|
||||
@@ -774,16 +771,16 @@ TEST(ActionMacroTest, CanDefineOverloadedActions) {
|
||||
typedef Action<const char*(bool, const char*)> MyAction;
|
||||
|
||||
const MyAction a1 = OverloadedAction();
|
||||
EXPECT_STREQ("hello", a1.Perform(make_tuple(false, CharPtr("world"))));
|
||||
EXPECT_STREQ("world", a1.Perform(make_tuple(true, CharPtr("world"))));
|
||||
EXPECT_STREQ("hello", a1.Perform(std::make_tuple(false, CharPtr("world"))));
|
||||
EXPECT_STREQ("world", a1.Perform(std::make_tuple(true, CharPtr("world"))));
|
||||
|
||||
const MyAction a2 = OverloadedAction("hi");
|
||||
EXPECT_STREQ("hi", a2.Perform(make_tuple(false, CharPtr("world"))));
|
||||
EXPECT_STREQ("world", a2.Perform(make_tuple(true, CharPtr("world"))));
|
||||
EXPECT_STREQ("hi", a2.Perform(std::make_tuple(false, CharPtr("world"))));
|
||||
EXPECT_STREQ("world", a2.Perform(std::make_tuple(true, CharPtr("world"))));
|
||||
|
||||
const MyAction a3 = OverloadedAction("hi", "you");
|
||||
EXPECT_STREQ("hi", a3.Perform(make_tuple(true, CharPtr("world"))));
|
||||
EXPECT_STREQ("you", a3.Perform(make_tuple(false, CharPtr("world"))));
|
||||
EXPECT_STREQ("hi", a3.Perform(std::make_tuple(true, CharPtr("world"))));
|
||||
EXPECT_STREQ("you", a3.Perform(std::make_tuple(false, CharPtr("world"))));
|
||||
}
|
||||
|
||||
// Tests ACTION_Pn where n >= 3.
|
||||
@@ -792,11 +789,11 @@ ACTION_P3(Plus, m, n, k) { return arg0 + m + n + k; }
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor3Parameters) {
|
||||
Action<double(int m, bool t)> a1 = Plus(100, 20, 3.4);
|
||||
EXPECT_DOUBLE_EQ(3123.4, a1.Perform(make_tuple(3000, true)));
|
||||
EXPECT_DOUBLE_EQ(3123.4, a1.Perform(std::make_tuple(3000, true)));
|
||||
|
||||
Action<std::string(const std::string& s)> a2 = Plus("tail", "-", ">");
|
||||
const std::string re = "re";
|
||||
tuple<const std::string> dummy = make_tuple(re);
|
||||
std::tuple<const std::string> dummy = std::make_tuple(re);
|
||||
EXPECT_EQ("retail->", a2.Perform(dummy));
|
||||
}
|
||||
|
||||
@@ -804,14 +801,14 @@ ACTION_P4(Plus, p0, p1, p2, p3) { return arg0 + p0 + p1 + p2 + p3; }
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor4Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4, a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P5(Plus, p0, p1, p2, p3, p4) { return arg0 + p0 + p1 + p2 + p3 + p4; }
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor5Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5, a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P6(Plus, p0, p1, p2, p3, p4, p5) {
|
||||
@@ -820,7 +817,7 @@ ACTION_P6(Plus, p0, p1, p2, p3, p4, p5) {
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor6Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5, 6);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6, a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P7(Plus, p0, p1, p2, p3, p4, p5, p6) {
|
||||
@@ -829,7 +826,7 @@ ACTION_P7(Plus, p0, p1, p2, p3, p4, p5, p6) {
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor7Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5, 6, 7);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7, a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P8(Plus, p0, p1, p2, p3, p4, p5, p6, p7) {
|
||||
@@ -838,7 +835,8 @@ ACTION_P8(Plus, p0, p1, p2, p3, p4, p5, p6, p7) {
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor8Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5, 6, 7, 8);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8,
|
||||
a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P9(Plus, p0, p1, p2, p3, p4, p5, p6, p7, p8) {
|
||||
@@ -847,7 +845,8 @@ ACTION_P9(Plus, p0, p1, p2, p3, p4, p5, p6, p7, p8) {
|
||||
|
||||
TEST(ActionPnMacroTest, WorksFor9Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5, 6, 7, 8, 9);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9, a1.Perform(make_tuple(10)));
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9,
|
||||
a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
ACTION_P10(Plus, p0, p1, p2, p3, p4, p5, p6, p7, p8, last_param) {
|
||||
@@ -859,7 +858,7 @@ ACTION_P10(Plus, p0, p1, p2, p3, p4, p5, p6, p7, p8, last_param) {
|
||||
TEST(ActionPnMacroTest, WorksFor10Parameters) {
|
||||
Action<int(int)> a1 = Plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
|
||||
EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10,
|
||||
a1.Perform(make_tuple(10)));
|
||||
a1.Perform(std::make_tuple(10)));
|
||||
}
|
||||
|
||||
// Tests that the action body can promote the parameter types.
|
||||
@@ -876,8 +875,8 @@ TEST(ActionPnMacroTest, SimpleTypePromotion) {
|
||||
PadArgument(std::string("foo"), 'r');
|
||||
Action<std::string(const char*)> promo =
|
||||
PadArgument("foo", static_cast<int>('r'));
|
||||
EXPECT_EQ("foobar", no_promo.Perform(make_tuple(CharPtr("ba"))));
|
||||
EXPECT_EQ("foobar", promo.Perform(make_tuple(CharPtr("ba"))));
|
||||
EXPECT_EQ("foobar", no_promo.Perform(std::make_tuple(CharPtr("ba"))));
|
||||
EXPECT_EQ("foobar", promo.Perform(std::make_tuple(CharPtr("ba"))));
|
||||
}
|
||||
|
||||
// Tests that we can partially restrict parameter types using a
|
||||
@@ -926,10 +925,10 @@ Concat(T1 a, int b, T2 c) {
|
||||
|
||||
TEST(ActionPnMacroTest, CanPartiallyRestrictParameterTypes) {
|
||||
Action<const std::string()> a1 = Concat("Hello", "1", 2);
|
||||
EXPECT_EQ("Hello12", a1.Perform(make_tuple()));
|
||||
EXPECT_EQ("Hello12", a1.Perform(std::make_tuple()));
|
||||
|
||||
a1 = Concat(1, 2, 3);
|
||||
EXPECT_EQ("123", a1.Perform(make_tuple()));
|
||||
EXPECT_EQ("123", a1.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Verifies the type of an ACTION*.
|
||||
@@ -987,7 +986,7 @@ ACTION_P10(Plus10, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {
|
||||
|
||||
TEST(ActionPnMacroTest, CanExplicitlyInstantiateWithReferenceTypes) {
|
||||
int x = 1, y = 2, z = 3;
|
||||
const tuple<> empty = make_tuple();
|
||||
const std::tuple<> empty = std::make_tuple();
|
||||
|
||||
Action<int()> a = Plus1<int&>(x);
|
||||
EXPECT_EQ(1, a.Perform(empty));
|
||||
@@ -1014,7 +1013,7 @@ class NullaryConstructorClass {
|
||||
// Tests using ReturnNew() with a nullary constructor.
|
||||
TEST(ReturnNewTest, NoArgs) {
|
||||
Action<NullaryConstructorClass*()> a = ReturnNew<NullaryConstructorClass>();
|
||||
NullaryConstructorClass* c = a.Perform(make_tuple());
|
||||
NullaryConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(123, c->value_);
|
||||
delete c;
|
||||
}
|
||||
@@ -1028,7 +1027,7 @@ class UnaryConstructorClass {
|
||||
// Tests using ReturnNew() with a unary constructor.
|
||||
TEST(ReturnNewTest, Unary) {
|
||||
Action<UnaryConstructorClass*()> a = ReturnNew<UnaryConstructorClass>(4000);
|
||||
UnaryConstructorClass* c = a.Perform(make_tuple());
|
||||
UnaryConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(4000, c->value_);
|
||||
delete c;
|
||||
}
|
||||
@@ -1036,7 +1035,7 @@ TEST(ReturnNewTest, Unary) {
|
||||
TEST(ReturnNewTest, UnaryWorksWhenMockMethodHasArgs) {
|
||||
Action<UnaryConstructorClass*(bool, int)> a =
|
||||
ReturnNew<UnaryConstructorClass>(4000);
|
||||
UnaryConstructorClass* c = a.Perform(make_tuple(false, 5));
|
||||
UnaryConstructorClass* c = a.Perform(std::make_tuple(false, 5));
|
||||
EXPECT_EQ(4000, c->value_);
|
||||
delete c;
|
||||
}
|
||||
@@ -1044,7 +1043,7 @@ TEST(ReturnNewTest, UnaryWorksWhenMockMethodHasArgs) {
|
||||
TEST(ReturnNewTest, UnaryWorksWhenMockMethodReturnsPointerToConst) {
|
||||
Action<const UnaryConstructorClass*()> a =
|
||||
ReturnNew<UnaryConstructorClass>(4000);
|
||||
const UnaryConstructorClass* c = a.Perform(make_tuple());
|
||||
const UnaryConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(4000, c->value_);
|
||||
delete c;
|
||||
}
|
||||
@@ -1064,7 +1063,7 @@ TEST(ReturnNewTest, ConstructorThatTakes10Arguments) {
|
||||
ReturnNew<TenArgConstructorClass>(1000000000, 200000000, 30000000,
|
||||
4000000, 500000, 60000,
|
||||
7000, 800, 90, 0);
|
||||
TenArgConstructorClass* c = a.Perform(make_tuple());
|
||||
TenArgConstructorClass* c = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(1234567890, c->value_);
|
||||
delete c;
|
||||
}
|
||||
@@ -1078,7 +1077,7 @@ ACTION_TEMPLATE(CreateNew,
|
||||
|
||||
TEST(ActionTemplateTest, WorksWithoutValueParam) {
|
||||
const Action<int*()> a = CreateNew<int>();
|
||||
int* p = a.Perform(make_tuple());
|
||||
int* p = a.Perform(std::make_tuple());
|
||||
delete p;
|
||||
}
|
||||
|
||||
@@ -1091,7 +1090,7 @@ ACTION_TEMPLATE(CreateNew,
|
||||
|
||||
TEST(ActionTemplateTest, WorksWithValueParams) {
|
||||
const Action<int*()> a = CreateNew<int>(42);
|
||||
int* p = a.Perform(make_tuple());
|
||||
int* p = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(42, *p);
|
||||
delete p;
|
||||
}
|
||||
@@ -1100,7 +1099,7 @@ TEST(ActionTemplateTest, WorksWithValueParams) {
|
||||
ACTION_TEMPLATE(MyDeleteArg,
|
||||
HAS_1_TEMPLATE_PARAMS(int, k),
|
||||
AND_0_VALUE_PARAMS()) {
|
||||
delete get<k>(args);
|
||||
delete std::get<k>(args);
|
||||
}
|
||||
|
||||
// Resets a bool variable in the destructor.
|
||||
@@ -1117,7 +1116,7 @@ TEST(ActionTemplateTest, WorksForIntegralTemplateParams) {
|
||||
int n = 0;
|
||||
bool b = true;
|
||||
BoolResetter* resetter = new BoolResetter(&b);
|
||||
a.Perform(make_tuple(&n, resetter));
|
||||
a.Perform(std::make_tuple(&n, resetter));
|
||||
EXPECT_FALSE(b); // Verifies that resetter is deleted.
|
||||
}
|
||||
|
||||
@@ -1132,7 +1131,7 @@ ACTION_TEMPLATE(ReturnSmartPointer,
|
||||
TEST(ActionTemplateTest, WorksForTemplateTemplateParameters) {
|
||||
using ::testing::internal::linked_ptr;
|
||||
const Action<linked_ptr<int>()> a = ReturnSmartPointer<linked_ptr>(42);
|
||||
linked_ptr<int> p = a.Perform(make_tuple());
|
||||
linked_ptr<int> p = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(42, *p);
|
||||
}
|
||||
|
||||
@@ -1167,7 +1166,7 @@ TEST(ActionTemplateTest, WorksFor10TemplateParameters) {
|
||||
true, 6, char, unsigned, int> Giant;
|
||||
const Action<Giant()> a = ReturnGiant<
|
||||
int, bool, double, 5, true, 6, char, unsigned, int, linked_ptr>(42);
|
||||
Giant giant = a.Perform(make_tuple());
|
||||
Giant giant = a.Perform(std::make_tuple());
|
||||
EXPECT_EQ(42, giant.value);
|
||||
}
|
||||
|
||||
@@ -1180,7 +1179,7 @@ ACTION_TEMPLATE(ReturnSum,
|
||||
|
||||
TEST(ActionTemplateTest, WorksFor10ValueParameters) {
|
||||
const Action<int()> a = ReturnSum<int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
|
||||
EXPECT_EQ(55, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(55, a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests that ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded
|
||||
@@ -1214,11 +1213,11 @@ TEST(ActionTemplateTest, CanBeOverloadedOnNumberOfValueParameters) {
|
||||
const Action<int()> a2 = ReturnSum<int>(1, 2);
|
||||
const Action<int()> a3 = ReturnSum<int>(1, 2, 3);
|
||||
const Action<int()> a4 = ReturnSum<int, 10000>(2000, 300, 40, 5);
|
||||
EXPECT_EQ(0, a0.Perform(make_tuple()));
|
||||
EXPECT_EQ(1, a1.Perform(make_tuple()));
|
||||
EXPECT_EQ(3, a2.Perform(make_tuple()));
|
||||
EXPECT_EQ(6, a3.Perform(make_tuple()));
|
||||
EXPECT_EQ(12345, a4.Perform(make_tuple()));
|
||||
EXPECT_EQ(0, a0.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(1, a1.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(3, a2.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(6, a3.Perform(std::make_tuple()));
|
||||
EXPECT_EQ(12345, a4.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
|
||||
namespace {
|
||||
|
||||
using ::testing::tuple;
|
||||
using ::testing::Matcher;
|
||||
using ::testing::internal::CompileAssertTypesEqual;
|
||||
using ::testing::internal::MatcherTuple;
|
||||
@@ -48,24 +47,24 @@ using ::testing::internal::IgnoredValue;
|
||||
// Tests the MatcherTuple template struct.
|
||||
|
||||
TEST(MatcherTupleTest, ForSize0) {
|
||||
CompileAssertTypesEqual<tuple<>, MatcherTuple<tuple<> >::type>();
|
||||
CompileAssertTypesEqual<std::tuple<>, MatcherTuple<std::tuple<> >::type>();
|
||||
}
|
||||
|
||||
TEST(MatcherTupleTest, ForSize1) {
|
||||
CompileAssertTypesEqual<tuple<Matcher<int> >,
|
||||
MatcherTuple<tuple<int> >::type>();
|
||||
CompileAssertTypesEqual<std::tuple<Matcher<int> >,
|
||||
MatcherTuple<std::tuple<int> >::type>();
|
||||
}
|
||||
|
||||
TEST(MatcherTupleTest, ForSize2) {
|
||||
CompileAssertTypesEqual<tuple<Matcher<int>, Matcher<char> >,
|
||||
MatcherTuple<tuple<int, char> >::type>();
|
||||
CompileAssertTypesEqual<std::tuple<Matcher<int>, Matcher<char> >,
|
||||
MatcherTuple<std::tuple<int, char> >::type>();
|
||||
}
|
||||
|
||||
TEST(MatcherTupleTest, ForSize5) {
|
||||
CompileAssertTypesEqual<
|
||||
tuple<Matcher<int>, Matcher<char>, Matcher<bool>, Matcher<double>,
|
||||
Matcher<char*> >,
|
||||
MatcherTuple<tuple<int, char, bool, double, char*> >::type>();
|
||||
std::tuple<Matcher<int>, Matcher<char>, Matcher<bool>, Matcher<double>,
|
||||
Matcher<char*> >,
|
||||
MatcherTuple<std::tuple<int, char, bool, double, char*> >::type>();
|
||||
}
|
||||
|
||||
// Tests the Function template struct.
|
||||
@@ -73,8 +72,8 @@ TEST(MatcherTupleTest, ForSize5) {
|
||||
TEST(FunctionTest, Nullary) {
|
||||
typedef Function<int()> F; // NOLINT
|
||||
CompileAssertTypesEqual<int, F::Result>();
|
||||
CompileAssertTypesEqual<tuple<>, F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<tuple<>, F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<std::tuple<>, F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<std::tuple<>, F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<void(), F::MakeResultVoid>();
|
||||
CompileAssertTypesEqual<IgnoredValue(), F::MakeResultIgnoredValue>();
|
||||
}
|
||||
@@ -83,8 +82,9 @@ TEST(FunctionTest, Unary) {
|
||||
typedef Function<int(bool)> F; // NOLINT
|
||||
CompileAssertTypesEqual<int, F::Result>();
|
||||
CompileAssertTypesEqual<bool, F::Argument1>();
|
||||
CompileAssertTypesEqual<tuple<bool>, F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<tuple<Matcher<bool> >, F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<std::tuple<bool>, F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<std::tuple<Matcher<bool> >,
|
||||
F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<void(bool), F::MakeResultVoid>(); // NOLINT
|
||||
CompileAssertTypesEqual<IgnoredValue(bool), // NOLINT
|
||||
F::MakeResultIgnoredValue>();
|
||||
@@ -95,9 +95,10 @@ TEST(FunctionTest, Binary) {
|
||||
CompileAssertTypesEqual<int, F::Result>();
|
||||
CompileAssertTypesEqual<bool, F::Argument1>();
|
||||
CompileAssertTypesEqual<const long&, F::Argument2>(); // NOLINT
|
||||
CompileAssertTypesEqual<tuple<bool, const long&>, F::ArgumentTuple>(); // NOLINT
|
||||
CompileAssertTypesEqual<std::tuple<bool, const long&>, // NOLINT
|
||||
F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<
|
||||
tuple<Matcher<bool>, Matcher<const long&> >, // NOLINT
|
||||
std::tuple<Matcher<bool>, Matcher<const long&> >, // NOLINT
|
||||
F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<void(bool, const long&), F::MakeResultVoid>(); // NOLINT
|
||||
CompileAssertTypesEqual<IgnoredValue(bool, const long&), // NOLINT
|
||||
@@ -112,11 +113,12 @@ TEST(FunctionTest, LongArgumentList) {
|
||||
CompileAssertTypesEqual<char*, F::Argument3>();
|
||||
CompileAssertTypesEqual<int&, F::Argument4>();
|
||||
CompileAssertTypesEqual<const long&, F::Argument5>(); // NOLINT
|
||||
CompileAssertTypesEqual<tuple<bool, int, char*, int&, const long&>, // NOLINT
|
||||
F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<
|
||||
tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, Matcher<int&>,
|
||||
Matcher<const long&> >, // NOLINT
|
||||
std::tuple<bool, int, char*, int&, const long&>, // NOLINT
|
||||
F::ArgumentTuple>();
|
||||
CompileAssertTypesEqual<
|
||||
std::tuple<Matcher<bool>, Matcher<int>, Matcher<char*>, Matcher<int&>,
|
||||
Matcher<const long&> >, // NOLINT
|
||||
F::ArgumentMatcherTuple>();
|
||||
CompileAssertTypesEqual<void(bool, int, char*, int&, const long&), // NOLINT
|
||||
F::MakeResultVoid>();
|
||||
|
||||
@@ -62,9 +62,6 @@ using std::pair;
|
||||
using std::set;
|
||||
using std::stringstream;
|
||||
using std::vector;
|
||||
using testing::get;
|
||||
using testing::make_tuple;
|
||||
using testing::tuple;
|
||||
using testing::_;
|
||||
using testing::AllOf;
|
||||
using testing::AnyOf;
|
||||
@@ -118,20 +115,20 @@ std::string Explain(const MatcherType& m, const Value& x) {
|
||||
// Tests Args<k0, ..., kn>(m).
|
||||
|
||||
TEST(ArgsTest, AcceptsZeroTemplateArg) {
|
||||
const tuple<int, bool> t(5, true);
|
||||
EXPECT_THAT(t, Args<>(Eq(tuple<>())));
|
||||
EXPECT_THAT(t, Not(Args<>(Ne(tuple<>()))));
|
||||
const std::tuple<int, bool> t(5, true);
|
||||
EXPECT_THAT(t, Args<>(Eq(std::tuple<>())));
|
||||
EXPECT_THAT(t, Not(Args<>(Ne(std::tuple<>()))));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsOneTemplateArg) {
|
||||
const tuple<int, bool> t(5, true);
|
||||
EXPECT_THAT(t, Args<0>(Eq(make_tuple(5))));
|
||||
EXPECT_THAT(t, Args<1>(Eq(make_tuple(true))));
|
||||
EXPECT_THAT(t, Not(Args<1>(Eq(make_tuple(false)))));
|
||||
const std::tuple<int, bool> t(5, true);
|
||||
EXPECT_THAT(t, Args<0>(Eq(std::make_tuple(5))));
|
||||
EXPECT_THAT(t, Args<1>(Eq(std::make_tuple(true))));
|
||||
EXPECT_THAT(t, Not(Args<1>(Eq(std::make_tuple(false)))));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsTwoTemplateArgs) {
|
||||
const tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
const std::tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
|
||||
EXPECT_THAT(t, (Args<0, 1>(Lt())));
|
||||
EXPECT_THAT(t, (Args<1, 2>(Lt())));
|
||||
@@ -139,13 +136,13 @@ TEST(ArgsTest, AcceptsTwoTemplateArgs) {
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsRepeatedTemplateArgs) {
|
||||
const tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
const std::tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
EXPECT_THAT(t, (Args<0, 0>(Eq())));
|
||||
EXPECT_THAT(t, Not(Args<1, 1>(Ne())));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsDecreasingTemplateArgs) {
|
||||
const tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
const std::tuple<short, int, long> t(4, 5, 6L); // NOLINT
|
||||
EXPECT_THAT(t, (Args<2, 0>(Gt())));
|
||||
EXPECT_THAT(t, Not(Args<2, 1>(Lt())));
|
||||
}
|
||||
@@ -161,29 +158,29 @@ TEST(ArgsTest, AcceptsDecreasingTemplateArgs) {
|
||||
#endif
|
||||
|
||||
MATCHER(SumIsZero, "") {
|
||||
return get<0>(arg) + get<1>(arg) + get<2>(arg) == 0;
|
||||
return std::get<0>(arg) + std::get<1>(arg) + std::get<2>(arg) == 0;
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsMoreTemplateArgsThanArityOfOriginalTuple) {
|
||||
EXPECT_THAT(make_tuple(-1, 2), (Args<0, 0, 1>(SumIsZero())));
|
||||
EXPECT_THAT(make_tuple(1, 2), Not(Args<0, 0, 1>(SumIsZero())));
|
||||
EXPECT_THAT(std::make_tuple(-1, 2), (Args<0, 0, 1>(SumIsZero())));
|
||||
EXPECT_THAT(std::make_tuple(1, 2), Not(Args<0, 0, 1>(SumIsZero())));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, CanBeNested) {
|
||||
const tuple<short, int, long, int> t(4, 5, 6L, 6); // NOLINT
|
||||
const std::tuple<short, int, long, int> t(4, 5, 6L, 6); // NOLINT
|
||||
EXPECT_THAT(t, (Args<1, 2, 3>(Args<1, 2>(Eq()))));
|
||||
EXPECT_THAT(t, (Args<0, 1, 3>(Args<0, 2>(Lt()))));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, CanMatchTupleByValue) {
|
||||
typedef tuple<char, int, int> Tuple3;
|
||||
typedef std::tuple<char, int, int> Tuple3;
|
||||
const Matcher<Tuple3> m = Args<1, 2>(Lt());
|
||||
EXPECT_TRUE(m.Matches(Tuple3('a', 1, 2)));
|
||||
EXPECT_FALSE(m.Matches(Tuple3('b', 2, 2)));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, CanMatchTupleByReference) {
|
||||
typedef tuple<char, char, int> Tuple3;
|
||||
typedef std::tuple<char, char, int> Tuple3;
|
||||
const Matcher<const Tuple3&> m = Args<0, 1>(Lt());
|
||||
EXPECT_TRUE(m.Matches(Tuple3('a', 'b', 2)));
|
||||
EXPECT_FALSE(m.Matches(Tuple3('b', 'b', 2)));
|
||||
@@ -195,23 +192,23 @@ MATCHER_P(PrintsAs, str, "") {
|
||||
}
|
||||
|
||||
TEST(ArgsTest, AcceptsTenTemplateArgs) {
|
||||
EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9),
|
||||
EXPECT_THAT(std::make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9),
|
||||
(Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>(
|
||||
PrintsAs("(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)"))));
|
||||
EXPECT_THAT(make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9),
|
||||
EXPECT_THAT(std::make_tuple(0, 1L, 2, 3L, 4, 5, 6, 7, 8, 9),
|
||||
Not(Args<9, 8, 7, 6, 5, 4, 3, 2, 1, 0>(
|
||||
PrintsAs("(0, 8, 7, 6, 5, 4, 3, 2, 1, 0)"))));
|
||||
PrintsAs("(0, 8, 7, 6, 5, 4, 3, 2, 1, 0)"))));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, DescirbesSelfCorrectly) {
|
||||
const Matcher<tuple<int, bool, char> > m = Args<2, 0>(Lt());
|
||||
const Matcher<std::tuple<int, bool, char> > m = Args<2, 0>(Lt());
|
||||
EXPECT_EQ("are a tuple whose fields (#2, #0) are a pair where "
|
||||
"the first < the second",
|
||||
Describe(m));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, DescirbesNestedArgsCorrectly) {
|
||||
const Matcher<const tuple<int, bool, char, int>&> m =
|
||||
const Matcher<const std::tuple<int, bool, char, int>&> m =
|
||||
Args<0, 2, 3>(Args<2, 0>(Lt()));
|
||||
EXPECT_EQ("are a tuple whose fields (#0, #2, #3) are a tuple "
|
||||
"whose fields (#2, #0) are a pair where the first < the second",
|
||||
@@ -219,28 +216,28 @@ TEST(ArgsTest, DescirbesNestedArgsCorrectly) {
|
||||
}
|
||||
|
||||
TEST(ArgsTest, DescribesNegationCorrectly) {
|
||||
const Matcher<tuple<int, char> > m = Args<1, 0>(Gt());
|
||||
const Matcher<std::tuple<int, char> > m = Args<1, 0>(Gt());
|
||||
EXPECT_EQ("are a tuple whose fields (#1, #0) aren't a pair "
|
||||
"where the first > the second",
|
||||
DescribeNegation(m));
|
||||
}
|
||||
|
||||
TEST(ArgsTest, ExplainsMatchResultWithoutInnerExplanation) {
|
||||
const Matcher<tuple<bool, int, int> > m = Args<1, 2>(Eq());
|
||||
const Matcher<std::tuple<bool, int, int> > m = Args<1, 2>(Eq());
|
||||
EXPECT_EQ("whose fields (#1, #2) are (42, 42)",
|
||||
Explain(m, make_tuple(false, 42, 42)));
|
||||
Explain(m, std::make_tuple(false, 42, 42)));
|
||||
EXPECT_EQ("whose fields (#1, #2) are (42, 43)",
|
||||
Explain(m, make_tuple(false, 42, 43)));
|
||||
Explain(m, std::make_tuple(false, 42, 43)));
|
||||
}
|
||||
|
||||
// For testing Args<>'s explanation.
|
||||
class LessThanMatcher : public MatcherInterface<tuple<char, int> > {
|
||||
class LessThanMatcher : public MatcherInterface<std::tuple<char, int> > {
|
||||
public:
|
||||
virtual void DescribeTo(::std::ostream* os) const {}
|
||||
|
||||
virtual bool MatchAndExplain(tuple<char, int> value,
|
||||
virtual bool MatchAndExplain(std::tuple<char, int> value,
|
||||
MatchResultListener* listener) const {
|
||||
const int diff = get<0>(value) - get<1>(value);
|
||||
const int diff = std::get<0>(value) - std::get<1>(value);
|
||||
if (diff > 0) {
|
||||
*listener << "where the first value is " << diff
|
||||
<< " more than the second";
|
||||
@@ -249,17 +246,18 @@ class LessThanMatcher : public MatcherInterface<tuple<char, int> > {
|
||||
}
|
||||
};
|
||||
|
||||
Matcher<tuple<char, int> > LessThan() {
|
||||
Matcher<std::tuple<char, int> > LessThan() {
|
||||
return MakeMatcher(new LessThanMatcher);
|
||||
}
|
||||
|
||||
TEST(ArgsTest, ExplainsMatchResultWithInnerExplanation) {
|
||||
const Matcher<tuple<char, int, int> > m = Args<0, 2>(LessThan());
|
||||
EXPECT_EQ("whose fields (#0, #2) are ('a' (97, 0x61), 42), "
|
||||
"where the first value is 55 more than the second",
|
||||
Explain(m, make_tuple('a', 42, 42)));
|
||||
const Matcher<std::tuple<char, int, int> > m = Args<0, 2>(LessThan());
|
||||
EXPECT_EQ(
|
||||
"whose fields (#0, #2) are ('a' (97, 0x61), 42), "
|
||||
"where the first value is 55 more than the second",
|
||||
Explain(m, std::make_tuple('a', 42, 42)));
|
||||
EXPECT_EQ("whose fields (#0, #2) are ('\\0', 43)",
|
||||
Explain(m, make_tuple('\0', 42, 43)));
|
||||
Explain(m, std::make_tuple('\0', 42, 43)));
|
||||
}
|
||||
|
||||
// For testing ExplainMatchResultTo().
|
||||
@@ -517,7 +515,7 @@ class NativeArrayPassedAsPointerAndSize {
|
||||
|
||||
TEST(ElementsAreTest, WorksWithNativeArrayPassedAsPointerAndSize) {
|
||||
int array[] = { 0, 1 };
|
||||
::testing::tuple<int*, size_t> array_as_tuple(array, 2);
|
||||
::std::tuple<int*, size_t> array_as_tuple(array, 2);
|
||||
EXPECT_THAT(array_as_tuple, ElementsAre(0, 1));
|
||||
EXPECT_THAT(array_as_tuple, Not(ElementsAre(0)));
|
||||
|
||||
@@ -571,8 +569,8 @@ TEST(ElementsAreTest, MakesCopyOfArguments) {
|
||||
int x = 1;
|
||||
int y = 2;
|
||||
// This should make a copy of x and y.
|
||||
::testing::internal::ElementsAreMatcher<testing::tuple<int, int> >
|
||||
polymorphic_matcher = ElementsAre(x, y);
|
||||
::testing::internal::ElementsAreMatcher<std::tuple<int, int> >
|
||||
polymorphic_matcher = ElementsAre(x, y);
|
||||
// Changing x and y now shouldn't affect the meaning of the above matcher.
|
||||
x = y = 0;
|
||||
const int array1[] = { 1, 2 };
|
||||
@@ -1235,8 +1233,8 @@ TEST(ContainsTest, AcceptsMatcher) {
|
||||
TEST(ContainsTest, WorksForNativeArrayAsTuple) {
|
||||
const int a[] = { 1, 2 };
|
||||
const int* const pointer = a;
|
||||
EXPECT_THAT(make_tuple(pointer, 2), Contains(1));
|
||||
EXPECT_THAT(make_tuple(pointer, 2), Not(Contains(Gt(3))));
|
||||
EXPECT_THAT(std::make_tuple(pointer, 2), Contains(1));
|
||||
EXPECT_THAT(std::make_tuple(pointer, 2), Not(Contains(Gt(3))));
|
||||
}
|
||||
|
||||
TEST(ContainsTest, WorksForTwoDimensionalNativeArray) {
|
||||
|
||||
@@ -308,26 +308,23 @@ TEST(LosslessArithmeticConvertibleTest, FloatingPointToFloatingPoint) {
|
||||
// Tests the TupleMatches() template function.
|
||||
|
||||
TEST(TupleMatchesTest, WorksForSize0) {
|
||||
tuple<> matchers;
|
||||
tuple<> values;
|
||||
std::tuple<> matchers;
|
||||
std::tuple<> values;
|
||||
|
||||
EXPECT_TRUE(TupleMatches(matchers, values));
|
||||
}
|
||||
|
||||
TEST(TupleMatchesTest, WorksForSize1) {
|
||||
tuple<Matcher<int> > matchers(Eq(1));
|
||||
tuple<int> values1(1),
|
||||
values2(2);
|
||||
std::tuple<Matcher<int> > matchers(Eq(1));
|
||||
std::tuple<int> values1(1), values2(2);
|
||||
|
||||
EXPECT_TRUE(TupleMatches(matchers, values1));
|
||||
EXPECT_FALSE(TupleMatches(matchers, values2));
|
||||
}
|
||||
|
||||
TEST(TupleMatchesTest, WorksForSize2) {
|
||||
tuple<Matcher<int>, Matcher<char> > matchers(Eq(1), Eq('a'));
|
||||
tuple<int, char> values1(1, 'a'),
|
||||
values2(1, 'b'),
|
||||
values3(2, 'a'),
|
||||
std::tuple<Matcher<int>, Matcher<char> > matchers(Eq(1), Eq('a'));
|
||||
std::tuple<int, char> values1(1, 'a'), values2(1, 'b'), values3(2, 'a'),
|
||||
values4(2, 'b');
|
||||
|
||||
EXPECT_TRUE(TupleMatches(matchers, values1));
|
||||
@@ -337,10 +334,11 @@ TEST(TupleMatchesTest, WorksForSize2) {
|
||||
}
|
||||
|
||||
TEST(TupleMatchesTest, WorksForSize5) {
|
||||
tuple<Matcher<int>, Matcher<char>, Matcher<bool>, Matcher<long>, // NOLINT
|
||||
Matcher<std::string> >
|
||||
std::tuple<Matcher<int>, Matcher<char>, Matcher<bool>,
|
||||
Matcher<long>, // NOLINT
|
||||
Matcher<std::string> >
|
||||
matchers(Eq(1), Eq('a'), Eq(true), Eq(2L), Eq("hi"));
|
||||
tuple<int, char, bool, long, std::string> // NOLINT
|
||||
std::tuple<int, char, bool, long, std::string> // NOLINT
|
||||
values1(1, 'a', true, 2L, "hi"), values2(1, 'a', true, 2L, "hello"),
|
||||
values3(2, 'a', true, 2L, "hi");
|
||||
|
||||
@@ -686,22 +684,25 @@ TEST(StlContainerViewTest, WorksForStaticNativeArray) {
|
||||
|
||||
TEST(StlContainerViewTest, WorksForDynamicNativeArray) {
|
||||
StaticAssertTypeEq<NativeArray<int>,
|
||||
StlContainerView<tuple<const int*, size_t> >::type>();
|
||||
StaticAssertTypeEq<NativeArray<double>,
|
||||
StlContainerView<tuple<linked_ptr<double>, int> >::type>();
|
||||
StlContainerView<std::tuple<const int*, size_t> >::type>();
|
||||
StaticAssertTypeEq<
|
||||
NativeArray<double>,
|
||||
StlContainerView<std::tuple<linked_ptr<double>, int> >::type>();
|
||||
|
||||
StaticAssertTypeEq<const NativeArray<int>,
|
||||
StlContainerView<tuple<const int*, int> >::const_reference>();
|
||||
StaticAssertTypeEq<
|
||||
const NativeArray<int>,
|
||||
StlContainerView<std::tuple<const int*, int> >::const_reference>();
|
||||
|
||||
int a1[3] = { 0, 1, 2 };
|
||||
const int* const p1 = a1;
|
||||
NativeArray<int> a2 = StlContainerView<tuple<const int*, int> >::
|
||||
ConstReference(make_tuple(p1, 3));
|
||||
NativeArray<int> a2 =
|
||||
StlContainerView<std::tuple<const int*, int> >::ConstReference(
|
||||
std::make_tuple(p1, 3));
|
||||
EXPECT_EQ(3U, a2.size());
|
||||
EXPECT_EQ(a1, a2.begin());
|
||||
|
||||
const NativeArray<int> a3 = StlContainerView<tuple<int*, size_t> >::
|
||||
Copy(make_tuple(static_cast<int*>(a1), 3));
|
||||
const NativeArray<int> a3 = StlContainerView<std::tuple<int*, size_t> >::Copy(
|
||||
std::make_tuple(static_cast<int*>(a1), 3));
|
||||
ASSERT_EQ(3U, a3.size());
|
||||
EXPECT_EQ(0, a3.begin()[0]);
|
||||
EXPECT_EQ(1, a3.begin()[1]);
|
||||
|
||||
@@ -136,7 +136,6 @@ using testing::Value;
|
||||
using testing::WhenSorted;
|
||||
using testing::WhenSortedBy;
|
||||
using testing::_;
|
||||
using testing::get;
|
||||
using testing::internal::DummyMatchResultListener;
|
||||
using testing::internal::ElementMatcherPair;
|
||||
using testing::internal::ElementMatcherPairs;
|
||||
@@ -153,8 +152,6 @@ using testing::internal::Strings;
|
||||
using testing::internal::linked_ptr;
|
||||
using testing::internal::scoped_ptr;
|
||||
using testing::internal::string;
|
||||
using testing::make_tuple;
|
||||
using testing::tuple;
|
||||
|
||||
// For testing ExplainMatchResultTo().
|
||||
class GreaterThanMatcher : public MatcherInterface<int> {
|
||||
@@ -2239,8 +2236,7 @@ TEST(GlobalWideEndsWithTest, CanDescribeSelf) {
|
||||
|
||||
#endif // GTEST_HAS_GLOBAL_WSTRING
|
||||
|
||||
|
||||
typedef ::testing::tuple<long, int> Tuple2; // NOLINT
|
||||
typedef ::std::tuple<long, int> Tuple2; // NOLINT
|
||||
|
||||
// Tests that Eq() matches a 2-tuple where the first field == the
|
||||
// second field.
|
||||
@@ -2334,7 +2330,7 @@ TEST(Ne2Test, CanDescribeSelf) {
|
||||
// Tests that FloatEq() matches a 2-tuple where
|
||||
// FloatEq(first field) matches the second field.
|
||||
TEST(FloatEq2Test, MatchesEqualArguments) {
|
||||
typedef ::testing::tuple<float, float> Tpl;
|
||||
typedef ::std::tuple<float, float> Tpl;
|
||||
Matcher<const Tpl&> m = FloatEq();
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(0.3f, 0.1f + 0.1f + 0.1f)));
|
||||
@@ -2343,14 +2339,14 @@ TEST(FloatEq2Test, MatchesEqualArguments) {
|
||||
|
||||
// Tests that FloatEq() describes itself properly.
|
||||
TEST(FloatEq2Test, CanDescribeSelf) {
|
||||
Matcher<const ::testing::tuple<float, float>&> m = FloatEq();
|
||||
Matcher<const ::std::tuple<float, float>&> m = FloatEq();
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that NanSensitiveFloatEq() matches a 2-tuple where
|
||||
// NanSensitiveFloatEq(first field) matches the second field.
|
||||
TEST(NanSensitiveFloatEqTest, MatchesEqualArgumentsWithNaN) {
|
||||
typedef ::testing::tuple<float, float> Tpl;
|
||||
typedef ::std::tuple<float, float> Tpl;
|
||||
Matcher<const Tpl&> m = NanSensitiveFloatEq();
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(std::numeric_limits<float>::quiet_NaN(),
|
||||
@@ -2362,14 +2358,14 @@ TEST(NanSensitiveFloatEqTest, MatchesEqualArgumentsWithNaN) {
|
||||
|
||||
// Tests that NanSensitiveFloatEq() describes itself properly.
|
||||
TEST(NanSensitiveFloatEqTest, CanDescribeSelfWithNaNs) {
|
||||
Matcher<const ::testing::tuple<float, float>&> m = NanSensitiveFloatEq();
|
||||
Matcher<const ::std::tuple<float, float>&> m = NanSensitiveFloatEq();
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that DoubleEq() matches a 2-tuple where
|
||||
// DoubleEq(first field) matches the second field.
|
||||
TEST(DoubleEq2Test, MatchesEqualArguments) {
|
||||
typedef ::testing::tuple<double, double> Tpl;
|
||||
typedef ::std::tuple<double, double> Tpl;
|
||||
Matcher<const Tpl&> m = DoubleEq();
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0, 1.0)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(0.3, 0.1 + 0.1 + 0.1)));
|
||||
@@ -2378,14 +2374,14 @@ TEST(DoubleEq2Test, MatchesEqualArguments) {
|
||||
|
||||
// Tests that DoubleEq() describes itself properly.
|
||||
TEST(DoubleEq2Test, CanDescribeSelf) {
|
||||
Matcher<const ::testing::tuple<double, double>&> m = DoubleEq();
|
||||
Matcher<const ::std::tuple<double, double>&> m = DoubleEq();
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that NanSensitiveDoubleEq() matches a 2-tuple where
|
||||
// NanSensitiveDoubleEq(first field) matches the second field.
|
||||
TEST(NanSensitiveDoubleEqTest, MatchesEqualArgumentsWithNaN) {
|
||||
typedef ::testing::tuple<double, double> Tpl;
|
||||
typedef ::std::tuple<double, double> Tpl;
|
||||
Matcher<const Tpl&> m = NanSensitiveDoubleEq();
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(std::numeric_limits<double>::quiet_NaN(),
|
||||
@@ -2397,14 +2393,14 @@ TEST(NanSensitiveDoubleEqTest, MatchesEqualArgumentsWithNaN) {
|
||||
|
||||
// Tests that DoubleEq() describes itself properly.
|
||||
TEST(NanSensitiveDoubleEqTest, CanDescribeSelfWithNaNs) {
|
||||
Matcher<const ::testing::tuple<double, double>&> m = NanSensitiveDoubleEq();
|
||||
Matcher<const ::std::tuple<double, double>&> m = NanSensitiveDoubleEq();
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that FloatEq() matches a 2-tuple where
|
||||
// FloatNear(first field, max_abs_error) matches the second field.
|
||||
TEST(FloatNear2Test, MatchesEqualArguments) {
|
||||
typedef ::testing::tuple<float, float> Tpl;
|
||||
typedef ::std::tuple<float, float> Tpl;
|
||||
Matcher<const Tpl&> m = FloatNear(0.5f);
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.3f, 1.0f)));
|
||||
@@ -2413,14 +2409,14 @@ TEST(FloatNear2Test, MatchesEqualArguments) {
|
||||
|
||||
// Tests that FloatNear() describes itself properly.
|
||||
TEST(FloatNear2Test, CanDescribeSelf) {
|
||||
Matcher<const ::testing::tuple<float, float>&> m = FloatNear(0.5f);
|
||||
Matcher<const ::std::tuple<float, float>&> m = FloatNear(0.5f);
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that NanSensitiveFloatNear() matches a 2-tuple where
|
||||
// NanSensitiveFloatNear(first field) matches the second field.
|
||||
TEST(NanSensitiveFloatNearTest, MatchesNearbyArgumentsWithNaN) {
|
||||
typedef ::testing::tuple<float, float> Tpl;
|
||||
typedef ::std::tuple<float, float> Tpl;
|
||||
Matcher<const Tpl&> m = NanSensitiveFloatNear(0.5f);
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.1f, 1.0f)));
|
||||
@@ -2433,15 +2429,14 @@ TEST(NanSensitiveFloatNearTest, MatchesNearbyArgumentsWithNaN) {
|
||||
|
||||
// Tests that NanSensitiveFloatNear() describes itself properly.
|
||||
TEST(NanSensitiveFloatNearTest, CanDescribeSelfWithNaNs) {
|
||||
Matcher<const ::testing::tuple<float, float>&> m =
|
||||
NanSensitiveFloatNear(0.5f);
|
||||
Matcher<const ::std::tuple<float, float>&> m = NanSensitiveFloatNear(0.5f);
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that FloatEq() matches a 2-tuple where
|
||||
// DoubleNear(first field, max_abs_error) matches the second field.
|
||||
TEST(DoubleNear2Test, MatchesEqualArguments) {
|
||||
typedef ::testing::tuple<double, double> Tpl;
|
||||
typedef ::std::tuple<double, double> Tpl;
|
||||
Matcher<const Tpl&> m = DoubleNear(0.5);
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0, 1.0)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.3, 1.0)));
|
||||
@@ -2450,14 +2445,14 @@ TEST(DoubleNear2Test, MatchesEqualArguments) {
|
||||
|
||||
// Tests that DoubleNear() describes itself properly.
|
||||
TEST(DoubleNear2Test, CanDescribeSelf) {
|
||||
Matcher<const ::testing::tuple<double, double>&> m = DoubleNear(0.5);
|
||||
Matcher<const ::std::tuple<double, double>&> m = DoubleNear(0.5);
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
// Tests that NanSensitiveDoubleNear() matches a 2-tuple where
|
||||
// NanSensitiveDoubleNear(first field) matches the second field.
|
||||
TEST(NanSensitiveDoubleNearTest, MatchesNearbyArgumentsWithNaN) {
|
||||
typedef ::testing::tuple<double, double> Tpl;
|
||||
typedef ::std::tuple<double, double> Tpl;
|
||||
Matcher<const Tpl&> m = NanSensitiveDoubleNear(0.5f);
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.0f, 1.0f)));
|
||||
EXPECT_TRUE(m.Matches(Tpl(1.1f, 1.0f)));
|
||||
@@ -2470,8 +2465,7 @@ TEST(NanSensitiveDoubleNearTest, MatchesNearbyArgumentsWithNaN) {
|
||||
|
||||
// Tests that NanSensitiveDoubleNear() describes itself properly.
|
||||
TEST(NanSensitiveDoubleNearTest, CanDescribeSelfWithNaNs) {
|
||||
Matcher<const ::testing::tuple<double, double>&> m =
|
||||
NanSensitiveDoubleNear(0.5f);
|
||||
Matcher<const ::std::tuple<double, double>&> m = NanSensitiveDoubleNear(0.5f);
|
||||
EXPECT_EQ("are an almost-equal pair", Describe(m));
|
||||
}
|
||||
|
||||
@@ -3081,8 +3075,8 @@ TEST(DescribeMatcherTest, WorksWithPolymorphicMatcher) {
|
||||
}
|
||||
|
||||
TEST(AllArgsTest, WorksForTuple) {
|
||||
EXPECT_THAT(make_tuple(1, 2L), AllArgs(Lt()));
|
||||
EXPECT_THAT(make_tuple(2L, 1), Not(AllArgs(Lt())));
|
||||
EXPECT_THAT(std::make_tuple(1, 2L), AllArgs(Lt()));
|
||||
EXPECT_THAT(std::make_tuple(2L, 1), Not(AllArgs(Lt())));
|
||||
}
|
||||
|
||||
TEST(AllArgsTest, WorksForNonTuple) {
|
||||
@@ -5060,11 +5054,11 @@ TEST(ContainerEqExtraTest, WorksForNativeArrayAsTuple) {
|
||||
const int b[] = {1, 2, 3, 4};
|
||||
|
||||
const int* const p1 = a1;
|
||||
EXPECT_THAT(make_tuple(p1, 3), ContainerEq(a2));
|
||||
EXPECT_THAT(make_tuple(p1, 3), Not(ContainerEq(b)));
|
||||
EXPECT_THAT(std::make_tuple(p1, 3), ContainerEq(a2));
|
||||
EXPECT_THAT(std::make_tuple(p1, 3), Not(ContainerEq(b)));
|
||||
|
||||
const int c[] = {1, 3, 2};
|
||||
EXPECT_THAT(make_tuple(p1, 3), Not(ContainerEq(c)));
|
||||
EXPECT_THAT(std::make_tuple(p1, 3), Not(ContainerEq(c)));
|
||||
}
|
||||
|
||||
TEST(ContainerEqExtraTest, CopiesNativeArrayParameter) {
|
||||
@@ -6246,13 +6240,15 @@ TEST(PolymorphicMatcherTest, CanAccessImpl) {
|
||||
|
||||
TEST(MatcherTupleTest, ExplainsMatchFailure) {
|
||||
stringstream ss1;
|
||||
ExplainMatchFailureTupleTo(make_tuple(Matcher<char>(Eq('a')), GreaterThan(5)),
|
||||
make_tuple('a', 10), &ss1);
|
||||
ExplainMatchFailureTupleTo(
|
||||
std::make_tuple(Matcher<char>(Eq('a')), GreaterThan(5)),
|
||||
std::make_tuple('a', 10), &ss1);
|
||||
EXPECT_EQ("", ss1.str()); // Successful match.
|
||||
|
||||
stringstream ss2;
|
||||
ExplainMatchFailureTupleTo(make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
|
||||
make_tuple(2, 'b'), &ss2);
|
||||
ExplainMatchFailureTupleTo(
|
||||
std::make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
|
||||
std::make_tuple(2, 'b'), &ss2);
|
||||
EXPECT_EQ(" Expected arg #0: is > 5\n"
|
||||
" Actual: 2, which is 3 less than 5\n"
|
||||
" Expected arg #1: is equal to 'a' (97, 0x61)\n"
|
||||
@@ -6260,8 +6256,9 @@ TEST(MatcherTupleTest, ExplainsMatchFailure) {
|
||||
ss2.str()); // Failed match where both arguments need explanation.
|
||||
|
||||
stringstream ss3;
|
||||
ExplainMatchFailureTupleTo(make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
|
||||
make_tuple(2, 'a'), &ss3);
|
||||
ExplainMatchFailureTupleTo(
|
||||
std::make_tuple(GreaterThan(5), Matcher<char>(Eq('a'))),
|
||||
std::make_tuple(2, 'a'), &ss3);
|
||||
EXPECT_EQ(" Expected arg #0: is > 5\n"
|
||||
" Actual: 2, which is 3 less than 5\n",
|
||||
ss3.str()); // Failed match where only one argument needs
|
||||
@@ -6350,21 +6347,21 @@ TEST(EachTest, AcceptsMatcher) {
|
||||
TEST(EachTest, WorksForNativeArrayAsTuple) {
|
||||
const int a[] = {1, 2};
|
||||
const int* const pointer = a;
|
||||
EXPECT_THAT(make_tuple(pointer, 2), Each(Gt(0)));
|
||||
EXPECT_THAT(make_tuple(pointer, 2), Not(Each(Gt(1))));
|
||||
EXPECT_THAT(std::make_tuple(pointer, 2), Each(Gt(0)));
|
||||
EXPECT_THAT(std::make_tuple(pointer, 2), Not(Each(Gt(1))));
|
||||
}
|
||||
|
||||
// For testing Pointwise().
|
||||
class IsHalfOfMatcher {
|
||||
public:
|
||||
template <typename T1, typename T2>
|
||||
bool MatchAndExplain(const tuple<T1, T2>& a_pair,
|
||||
bool MatchAndExplain(const std::tuple<T1, T2>& a_pair,
|
||||
MatchResultListener* listener) const {
|
||||
if (get<0>(a_pair) == get<1>(a_pair)/2) {
|
||||
*listener << "where the second is " << get<1>(a_pair);
|
||||
if (std::get<0>(a_pair) == std::get<1>(a_pair) / 2) {
|
||||
*listener << "where the second is " << std::get<1>(a_pair);
|
||||
return true;
|
||||
} else {
|
||||
*listener << "where the second/2 is " << get<1>(a_pair)/2;
|
||||
*listener << "where the second/2 is " << std::get<1>(a_pair) / 2;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -6481,13 +6478,13 @@ TEST(PointwiseTest, AcceptsCorrectContent) {
|
||||
TEST(PointwiseTest, AllowsMonomorphicInnerMatcher) {
|
||||
const double lhs[3] = {1, 2, 3};
|
||||
const int rhs[3] = {2, 4, 6};
|
||||
const Matcher<tuple<const double&, const int&> > m1 = IsHalfOf();
|
||||
const Matcher<std::tuple<const double&, const int&>> m1 = IsHalfOf();
|
||||
EXPECT_THAT(lhs, Pointwise(m1, rhs));
|
||||
EXPECT_EQ("", Explain(Pointwise(m1, rhs), lhs));
|
||||
|
||||
// This type works as a tuple<const double&, const int&> can be
|
||||
// implicitly cast to tuple<double, int>.
|
||||
const Matcher<tuple<double, int> > m2 = IsHalfOf();
|
||||
// This type works as a std::tuple<const double&, const int&> can be
|
||||
// implicitly cast to std::tuple<double, int>.
|
||||
const Matcher<std::tuple<double, int>> m2 = IsHalfOf();
|
||||
EXPECT_THAT(lhs, Pointwise(m2, rhs));
|
||||
EXPECT_EQ("", Explain(Pointwise(m2, rhs), lhs));
|
||||
}
|
||||
@@ -6597,12 +6594,12 @@ TEST(UnorderedPointwiseTest, AcceptsCorrectContentInDifferentOrder) {
|
||||
TEST(UnorderedPointwiseTest, AllowsMonomorphicInnerMatcher) {
|
||||
const double lhs[3] = {1, 2, 3};
|
||||
const int rhs[3] = {4, 6, 2};
|
||||
const Matcher<tuple<const double&, const int&> > m1 = IsHalfOf();
|
||||
const Matcher<std::tuple<const double&, const int&>> m1 = IsHalfOf();
|
||||
EXPECT_THAT(lhs, UnorderedPointwise(m1, rhs));
|
||||
|
||||
// This type works as a tuple<const double&, const int&> can be
|
||||
// implicitly cast to tuple<double, int>.
|
||||
const Matcher<tuple<double, int> > m2 = IsHalfOf();
|
||||
// This type works as a std::tuple<const double&, const int&> can be
|
||||
// implicitly cast to std::tuple<double, int>.
|
||||
const Matcher<std::tuple<double, int>> m2 = IsHalfOf();
|
||||
EXPECT_THAT(lhs, UnorderedPointwise(m2, rhs));
|
||||
}
|
||||
|
||||
|
||||
@@ -46,10 +46,6 @@ namespace gmock_more_actions_test {
|
||||
|
||||
using ::std::plus;
|
||||
using ::std::string;
|
||||
using testing::get;
|
||||
using testing::make_tuple;
|
||||
using testing::tuple;
|
||||
using testing::tuple_element;
|
||||
using testing::_;
|
||||
using testing::Action;
|
||||
using testing::ActionInterface;
|
||||
@@ -232,45 +228,46 @@ class Foo {
|
||||
// Tests using Invoke() with a nullary function.
|
||||
TEST(InvokeTest, Nullary) {
|
||||
Action<int()> a = Invoke(Nullary); // NOLINT
|
||||
EXPECT_EQ(1, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a unary function.
|
||||
TEST(InvokeTest, Unary) {
|
||||
Action<bool(int)> a = Invoke(Unary); // NOLINT
|
||||
EXPECT_FALSE(a.Perform(make_tuple(1)));
|
||||
EXPECT_TRUE(a.Perform(make_tuple(-1)));
|
||||
EXPECT_FALSE(a.Perform(std::make_tuple(1)));
|
||||
EXPECT_TRUE(a.Perform(std::make_tuple(-1)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a binary function.
|
||||
TEST(InvokeTest, Binary) {
|
||||
Action<const char*(const char*, short)> a = Invoke(Binary); // NOLINT
|
||||
const char* p = "Hello";
|
||||
EXPECT_EQ(p + 2, a.Perform(make_tuple(p, Short(2))));
|
||||
EXPECT_EQ(p + 2, a.Perform(std::make_tuple(p, Short(2))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a ternary function.
|
||||
TEST(InvokeTest, Ternary) {
|
||||
Action<int(int, char, short)> a = Invoke(Ternary); // NOLINT
|
||||
EXPECT_EQ(6, a.Perform(make_tuple(1, '\2', Short(3))));
|
||||
EXPECT_EQ(6, a.Perform(std::make_tuple(1, '\2', Short(3))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 4-argument function.
|
||||
TEST(InvokeTest, FunctionThatTakes4Arguments) {
|
||||
Action<int(int, int, int, int)> a = Invoke(SumOf4); // NOLINT
|
||||
EXPECT_EQ(1234, a.Perform(make_tuple(1000, 200, 30, 4)));
|
||||
EXPECT_EQ(1234, a.Perform(std::make_tuple(1000, 200, 30, 4)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 5-argument function.
|
||||
TEST(InvokeTest, FunctionThatTakes5Arguments) {
|
||||
Action<int(int, int, int, int, int)> a = Invoke(SumOf5); // NOLINT
|
||||
EXPECT_EQ(12345, a.Perform(make_tuple(10000, 2000, 300, 40, 5)));
|
||||
EXPECT_EQ(12345, a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 6-argument function.
|
||||
TEST(InvokeTest, FunctionThatTakes6Arguments) {
|
||||
Action<int(int, int, int, int, int, int)> a = Invoke(SumOf6); // NOLINT
|
||||
EXPECT_EQ(123456, a.Perform(make_tuple(100000, 20000, 3000, 400, 50, 6)));
|
||||
EXPECT_EQ(123456,
|
||||
a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
|
||||
}
|
||||
|
||||
// A helper that turns the type of a C-string literal from const
|
||||
@@ -283,9 +280,9 @@ TEST(InvokeTest, FunctionThatTakes7Arguments) {
|
||||
const char*, const char*, const char*)>
|
||||
a = Invoke(Concat7);
|
||||
EXPECT_EQ("1234567",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 8-argument function.
|
||||
@@ -294,9 +291,9 @@ TEST(InvokeTest, FunctionThatTakes8Arguments) {
|
||||
const char*, const char*, const char*, const char*)>
|
||||
a = Invoke(Concat8);
|
||||
EXPECT_EQ("12345678",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 9-argument function.
|
||||
@@ -305,10 +302,10 @@ TEST(InvokeTest, FunctionThatTakes9Arguments) {
|
||||
const char*, const char*, const char*, const char*,
|
||||
const char*)>
|
||||
a = Invoke(Concat9);
|
||||
EXPECT_EQ("123456789",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"))));
|
||||
EXPECT_EQ("123456789", a.Perform(std::make_tuple(
|
||||
CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 10-argument function.
|
||||
@@ -318,46 +315,46 @@ TEST(InvokeTest, FunctionThatTakes10Arguments) {
|
||||
const char*, const char*)>
|
||||
a = Invoke(Concat10);
|
||||
EXPECT_EQ("1234567890",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"),
|
||||
CharPtr("0"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"),
|
||||
CharPtr("0"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with functions with parameters declared as Unused.
|
||||
TEST(InvokeTest, FunctionWithUnusedParameters) {
|
||||
Action<int(int, int, double, const std::string&)> a1 = Invoke(SumOfFirst2);
|
||||
tuple<int, int, double, std::string> dummy =
|
||||
make_tuple(10, 2, 5.6, std::string("hi"));
|
||||
std::tuple<int, int, double, std::string> dummy =
|
||||
std::make_tuple(10, 2, 5.6, std::string("hi"));
|
||||
EXPECT_EQ(12, a1.Perform(dummy));
|
||||
|
||||
Action<int(int, int, bool, int*)> a2 =
|
||||
Invoke(SumOfFirst2);
|
||||
EXPECT_EQ(23,
|
||||
a2.Perform(make_tuple(20, 3, true, static_cast<int*>(nullptr))));
|
||||
EXPECT_EQ(
|
||||
23, a2.Perform(std::make_tuple(20, 3, true, static_cast<int*>(nullptr))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with methods with parameters declared as Unused.
|
||||
TEST(InvokeTest, MethodWithUnusedParameters) {
|
||||
Foo foo;
|
||||
Action<int(std::string, bool, int, int)> a1 = Invoke(&foo, &Foo::SumOfLast2);
|
||||
EXPECT_EQ(12, a1.Perform(make_tuple(CharPtr("hi"), true, 10, 2)));
|
||||
EXPECT_EQ(12, a1.Perform(std::make_tuple(CharPtr("hi"), true, 10, 2)));
|
||||
|
||||
Action<int(char, double, int, int)> a2 =
|
||||
Invoke(&foo, &Foo::SumOfLast2);
|
||||
EXPECT_EQ(23, a2.Perform(make_tuple('a', 2.5, 20, 3)));
|
||||
EXPECT_EQ(23, a2.Perform(std::make_tuple('a', 2.5, 20, 3)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a functor.
|
||||
TEST(InvokeTest, Functor) {
|
||||
Action<long(long, int)> a = Invoke(plus<long>()); // NOLINT
|
||||
EXPECT_EQ(3L, a.Perform(make_tuple(1, 2)));
|
||||
EXPECT_EQ(3L, a.Perform(std::make_tuple(1, 2)));
|
||||
}
|
||||
|
||||
// Tests using Invoke(f) as an action of a compatible type.
|
||||
TEST(InvokeTest, FunctionWithCompatibleType) {
|
||||
Action<long(int, short, char, bool)> a = Invoke(SumOf4); // NOLINT
|
||||
EXPECT_EQ(4321, a.Perform(make_tuple(4000, Short(300), Char(20), true)));
|
||||
EXPECT_EQ(4321, a.Perform(std::make_tuple(4000, Short(300), Char(20), true)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with an object pointer and a method pointer.
|
||||
@@ -366,14 +363,14 @@ TEST(InvokeTest, FunctionWithCompatibleType) {
|
||||
TEST(InvokeMethodTest, Nullary) {
|
||||
Foo foo;
|
||||
Action<int()> a = Invoke(&foo, &Foo::Nullary); // NOLINT
|
||||
EXPECT_EQ(123, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(123, a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a unary method.
|
||||
TEST(InvokeMethodTest, Unary) {
|
||||
Foo foo;
|
||||
Action<short(long)> a = Invoke(&foo, &Foo::Unary); // NOLINT
|
||||
EXPECT_EQ(4123, a.Perform(make_tuple(4000)));
|
||||
EXPECT_EQ(4123, a.Perform(std::make_tuple(4000)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a binary method.
|
||||
@@ -381,7 +378,7 @@ TEST(InvokeMethodTest, Binary) {
|
||||
Foo foo;
|
||||
Action<std::string(const std::string&, char)> a = Invoke(&foo, &Foo::Binary);
|
||||
std::string s("Hell");
|
||||
tuple<std::string, char> dummy = make_tuple(s, 'o');
|
||||
std::tuple<std::string, char> dummy = std::make_tuple(s, 'o');
|
||||
EXPECT_EQ("Hello", a.Perform(dummy));
|
||||
}
|
||||
|
||||
@@ -389,21 +386,21 @@ TEST(InvokeMethodTest, Binary) {
|
||||
TEST(InvokeMethodTest, Ternary) {
|
||||
Foo foo;
|
||||
Action<int(int, bool, char)> a = Invoke(&foo, &Foo::Ternary); // NOLINT
|
||||
EXPECT_EQ(1124, a.Perform(make_tuple(1000, true, Char(1))));
|
||||
EXPECT_EQ(1124, a.Perform(std::make_tuple(1000, true, Char(1))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 4-argument method.
|
||||
TEST(InvokeMethodTest, MethodThatTakes4Arguments) {
|
||||
Foo foo;
|
||||
Action<int(int, int, int, int)> a = Invoke(&foo, &Foo::SumOf4); // NOLINT
|
||||
EXPECT_EQ(1357, a.Perform(make_tuple(1000, 200, 30, 4)));
|
||||
EXPECT_EQ(1357, a.Perform(std::make_tuple(1000, 200, 30, 4)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 5-argument method.
|
||||
TEST(InvokeMethodTest, MethodThatTakes5Arguments) {
|
||||
Foo foo;
|
||||
Action<int(int, int, int, int, int)> a = Invoke(&foo, &Foo::SumOf5); // NOLINT
|
||||
EXPECT_EQ(12345, a.Perform(make_tuple(10000, 2000, 300, 40, 5)));
|
||||
EXPECT_EQ(12345, a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 6-argument method.
|
||||
@@ -411,7 +408,8 @@ TEST(InvokeMethodTest, MethodThatTakes6Arguments) {
|
||||
Foo foo;
|
||||
Action<int(int, int, int, int, int, int)> a = // NOLINT
|
||||
Invoke(&foo, &Foo::SumOf6);
|
||||
EXPECT_EQ(123456, a.Perform(make_tuple(100000, 20000, 3000, 400, 50, 6)));
|
||||
EXPECT_EQ(123456,
|
||||
a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 7-argument method.
|
||||
@@ -421,9 +419,9 @@ TEST(InvokeMethodTest, MethodThatTakes7Arguments) {
|
||||
const char*, const char*, const char*)>
|
||||
a = Invoke(&foo, &Foo::Concat7);
|
||||
EXPECT_EQ("1234567",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 8-argument method.
|
||||
@@ -433,9 +431,9 @@ TEST(InvokeMethodTest, MethodThatTakes8Arguments) {
|
||||
const char*, const char*, const char*, const char*)>
|
||||
a = Invoke(&foo, &Foo::Concat8);
|
||||
EXPECT_EQ("12345678",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 9-argument method.
|
||||
@@ -445,10 +443,10 @@ TEST(InvokeMethodTest, MethodThatTakes9Arguments) {
|
||||
const char*, const char*, const char*, const char*,
|
||||
const char*)>
|
||||
a = Invoke(&foo, &Foo::Concat9);
|
||||
EXPECT_EQ("123456789",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"))));
|
||||
EXPECT_EQ("123456789", a.Perform(std::make_tuple(
|
||||
CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke() with a 10-argument method.
|
||||
@@ -459,10 +457,10 @@ TEST(InvokeMethodTest, MethodThatTakes10Arguments) {
|
||||
const char*, const char*)>
|
||||
a = Invoke(&foo, &Foo::Concat10);
|
||||
EXPECT_EQ("1234567890",
|
||||
a.Perform(make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"),
|
||||
CharPtr("0"))));
|
||||
a.Perform(std::make_tuple(CharPtr("1"), CharPtr("2"), CharPtr("3"),
|
||||
CharPtr("4"), CharPtr("5"), CharPtr("6"),
|
||||
CharPtr("7"), CharPtr("8"), CharPtr("9"),
|
||||
CharPtr("0"))));
|
||||
}
|
||||
|
||||
// Tests using Invoke(f) as an action of a compatible type.
|
||||
@@ -470,48 +468,48 @@ TEST(InvokeMethodTest, MethodWithCompatibleType) {
|
||||
Foo foo;
|
||||
Action<long(int, short, char, bool)> a = // NOLINT
|
||||
Invoke(&foo, &Foo::SumOf4);
|
||||
EXPECT_EQ(4444, a.Perform(make_tuple(4000, Short(300), Char(20), true)));
|
||||
EXPECT_EQ(4444, a.Perform(std::make_tuple(4000, Short(300), Char(20), true)));
|
||||
}
|
||||
|
||||
// Tests using WithoutArgs with an action that takes no argument.
|
||||
TEST(WithoutArgsTest, NoArg) {
|
||||
Action<int(int n)> a = WithoutArgs(Invoke(Nullary)); // NOLINT
|
||||
EXPECT_EQ(1, a.Perform(make_tuple(2)));
|
||||
EXPECT_EQ(1, a.Perform(std::make_tuple(2)));
|
||||
}
|
||||
|
||||
// Tests using WithArg with an action that takes 1 argument.
|
||||
TEST(WithArgTest, OneArg) {
|
||||
Action<bool(double x, int n)> b = WithArg<1>(Invoke(Unary)); // NOLINT
|
||||
EXPECT_TRUE(b.Perform(make_tuple(1.5, -1)));
|
||||
EXPECT_FALSE(b.Perform(make_tuple(1.5, 1)));
|
||||
EXPECT_TRUE(b.Perform(std::make_tuple(1.5, -1)));
|
||||
EXPECT_FALSE(b.Perform(std::make_tuple(1.5, 1)));
|
||||
}
|
||||
|
||||
TEST(ReturnArgActionTest, WorksForOneArgIntArg0) {
|
||||
const Action<int(int)> a = ReturnArg<0>();
|
||||
EXPECT_EQ(5, a.Perform(make_tuple(5)));
|
||||
EXPECT_EQ(5, a.Perform(std::make_tuple(5)));
|
||||
}
|
||||
|
||||
TEST(ReturnArgActionTest, WorksForMultiArgBoolArg0) {
|
||||
const Action<bool(bool, bool, bool)> a = ReturnArg<0>();
|
||||
EXPECT_TRUE(a.Perform(make_tuple(true, false, false)));
|
||||
EXPECT_TRUE(a.Perform(std::make_tuple(true, false, false)));
|
||||
}
|
||||
|
||||
TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
|
||||
const Action<std::string(int, int, std::string, int)> a = ReturnArg<2>();
|
||||
EXPECT_EQ("seven", a.Perform(make_tuple(5, 6, std::string("seven"), 8)));
|
||||
EXPECT_EQ("seven", a.Perform(std::make_tuple(5, 6, std::string("seven"), 8)));
|
||||
}
|
||||
|
||||
TEST(SaveArgActionTest, WorksForSameType) {
|
||||
int result = 0;
|
||||
const Action<void(int n)> a1 = SaveArg<0>(&result);
|
||||
a1.Perform(make_tuple(5));
|
||||
a1.Perform(std::make_tuple(5));
|
||||
EXPECT_EQ(5, result);
|
||||
}
|
||||
|
||||
TEST(SaveArgActionTest, WorksForCompatibleType) {
|
||||
int result = 0;
|
||||
const Action<void(bool, char)> a1 = SaveArg<1>(&result);
|
||||
a1.Perform(make_tuple(true, 'a'));
|
||||
a1.Perform(std::make_tuple(true, 'a'));
|
||||
EXPECT_EQ('a', result);
|
||||
}
|
||||
|
||||
@@ -519,7 +517,7 @@ TEST(SaveArgPointeeActionTest, WorksForSameType) {
|
||||
int result = 0;
|
||||
const int value = 5;
|
||||
const Action<void(const int*)> a1 = SaveArgPointee<0>(&result);
|
||||
a1.Perform(make_tuple(&value));
|
||||
a1.Perform(std::make_tuple(&value));
|
||||
EXPECT_EQ(5, result);
|
||||
}
|
||||
|
||||
@@ -527,7 +525,7 @@ TEST(SaveArgPointeeActionTest, WorksForCompatibleType) {
|
||||
int result = 0;
|
||||
char value = 'a';
|
||||
const Action<void(bool, char*)> a1 = SaveArgPointee<1>(&result);
|
||||
a1.Perform(make_tuple(true, &value));
|
||||
a1.Perform(std::make_tuple(true, &value));
|
||||
EXPECT_EQ('a', result);
|
||||
}
|
||||
|
||||
@@ -535,28 +533,28 @@ TEST(SaveArgPointeeActionTest, WorksForLinkedPtr) {
|
||||
int result = 0;
|
||||
linked_ptr<int> value(new int(5));
|
||||
const Action<void(linked_ptr<int>)> a1 = SaveArgPointee<0>(&result);
|
||||
a1.Perform(make_tuple(value));
|
||||
a1.Perform(std::make_tuple(value));
|
||||
EXPECT_EQ(5, result);
|
||||
}
|
||||
|
||||
TEST(SetArgRefereeActionTest, WorksForSameType) {
|
||||
int value = 0;
|
||||
const Action<void(int&)> a1 = SetArgReferee<0>(1);
|
||||
a1.Perform(tuple<int&>(value));
|
||||
a1.Perform(std::tuple<int&>(value));
|
||||
EXPECT_EQ(1, value);
|
||||
}
|
||||
|
||||
TEST(SetArgRefereeActionTest, WorksForCompatibleType) {
|
||||
int value = 0;
|
||||
const Action<void(int, int&)> a1 = SetArgReferee<1>('a');
|
||||
a1.Perform(tuple<int, int&>(0, value));
|
||||
a1.Perform(std::tuple<int, int&>(0, value));
|
||||
EXPECT_EQ('a', value);
|
||||
}
|
||||
|
||||
TEST(SetArgRefereeActionTest, WorksWithExtraArguments) {
|
||||
int value = 0;
|
||||
const Action<void(bool, int, int&, const char*)> a1 = SetArgReferee<2>('a');
|
||||
a1.Perform(tuple<bool, int, int&, const char*>(true, 0, value, "hi"));
|
||||
a1.Perform(std::tuple<bool, int, int&, const char*>(true, 0, value, "hi"));
|
||||
EXPECT_EQ('a', value);
|
||||
}
|
||||
|
||||
@@ -583,7 +581,7 @@ TEST(DeleteArgActionTest, OneArg) {
|
||||
DeletionTester* t = new DeletionTester(&is_deleted);
|
||||
const Action<void(DeletionTester*)> a1 = DeleteArg<0>(); // NOLINT
|
||||
EXPECT_FALSE(is_deleted);
|
||||
a1.Perform(make_tuple(t));
|
||||
a1.Perform(std::make_tuple(t));
|
||||
EXPECT_TRUE(is_deleted);
|
||||
}
|
||||
|
||||
@@ -593,7 +591,7 @@ TEST(DeleteArgActionTest, TenArgs) {
|
||||
const Action<void(bool, int, int, const char*, bool,
|
||||
int, int, int, int, DeletionTester*)> a1 = DeleteArg<9>();
|
||||
EXPECT_FALSE(is_deleted);
|
||||
a1.Perform(make_tuple(true, 5, 6, CharPtr("hi"), false, 7, 8, 9, 10, t));
|
||||
a1.Perform(std::make_tuple(true, 5, 6, CharPtr("hi"), false, 7, 8, 9, 10, t));
|
||||
EXPECT_TRUE(is_deleted);
|
||||
}
|
||||
|
||||
@@ -601,19 +599,19 @@ TEST(DeleteArgActionTest, TenArgs) {
|
||||
|
||||
TEST(ThrowActionTest, ThrowsGivenExceptionInVoidFunction) {
|
||||
const Action<void(int n)> a = Throw('a');
|
||||
EXPECT_THROW(a.Perform(make_tuple(0)), char);
|
||||
EXPECT_THROW(a.Perform(std::make_tuple(0)), char);
|
||||
}
|
||||
|
||||
class MyException {};
|
||||
|
||||
TEST(ThrowActionTest, ThrowsGivenExceptionInNonVoidFunction) {
|
||||
const Action<double(char ch)> a = Throw(MyException());
|
||||
EXPECT_THROW(a.Perform(make_tuple('0')), MyException);
|
||||
EXPECT_THROW(a.Perform(std::make_tuple('0')), MyException);
|
||||
}
|
||||
|
||||
TEST(ThrowActionTest, ThrowsGivenExceptionInNullaryFunction) {
|
||||
const Action<double()> a = Throw(MyException());
|
||||
EXPECT_THROW(a.Perform(make_tuple()), MyException);
|
||||
EXPECT_THROW(a.Perform(std::make_tuple()), MyException);
|
||||
}
|
||||
|
||||
#endif // GTEST_HAS_EXCEPTIONS
|
||||
@@ -629,7 +627,7 @@ TEST(SetArrayArgumentTest, SetsTheNthArray) {
|
||||
int* pn = n;
|
||||
char ch[4] = {};
|
||||
char* pch = ch;
|
||||
a.Perform(make_tuple(true, pn, pch));
|
||||
a.Perform(std::make_tuple(true, pn, pch));
|
||||
EXPECT_EQ(1, n[0]);
|
||||
EXPECT_EQ(2, n[1]);
|
||||
EXPECT_EQ(3, n[2]);
|
||||
@@ -644,7 +642,7 @@ TEST(SetArrayArgumentTest, SetsTheNthArray) {
|
||||
a = SetArrayArgument<2>(letters.begin(), letters.end());
|
||||
std::fill_n(n, 4, 0);
|
||||
std::fill_n(ch, 4, '\0');
|
||||
a.Perform(make_tuple(true, pn, pch));
|
||||
a.Perform(std::make_tuple(true, pn, pch));
|
||||
EXPECT_EQ(0, n[0]);
|
||||
EXPECT_EQ(0, n[1]);
|
||||
EXPECT_EQ(0, n[2]);
|
||||
@@ -663,7 +661,7 @@ TEST(SetArrayArgumentTest, SetsTheNthArrayWithEmptyRange) {
|
||||
|
||||
int n[4] = {};
|
||||
int* pn = n;
|
||||
a.Perform(make_tuple(true, pn));
|
||||
a.Perform(std::make_tuple(true, pn));
|
||||
EXPECT_EQ(0, n[0]);
|
||||
EXPECT_EQ(0, n[1]);
|
||||
EXPECT_EQ(0, n[2]);
|
||||
@@ -679,7 +677,7 @@ TEST(SetArrayArgumentTest, SetsTheNthArrayWithConvertibleType) {
|
||||
|
||||
int codes[4] = { 111, 222, 333, 444 };
|
||||
int* pcodes = codes;
|
||||
a.Perform(make_tuple(true, pcodes));
|
||||
a.Perform(std::make_tuple(true, pcodes));
|
||||
EXPECT_EQ(97, codes[0]);
|
||||
EXPECT_EQ(98, codes[1]);
|
||||
EXPECT_EQ(99, codes[2]);
|
||||
@@ -693,17 +691,17 @@ TEST(SetArrayArgumentTest, SetsTheNthArrayWithIteratorArgument) {
|
||||
Action<MyFunction> a = SetArrayArgument<1>(letters.begin(), letters.end());
|
||||
|
||||
std::string s;
|
||||
a.Perform(make_tuple(true, back_inserter(s)));
|
||||
a.Perform(std::make_tuple(true, back_inserter(s)));
|
||||
EXPECT_EQ(letters, s);
|
||||
}
|
||||
|
||||
TEST(ReturnPointeeTest, Works) {
|
||||
int n = 42;
|
||||
const Action<int()> a = ReturnPointee(&n);
|
||||
EXPECT_EQ(42, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(42, a.Perform(std::make_tuple()));
|
||||
|
||||
n = 43;
|
||||
EXPECT_EQ(43, a.Perform(make_tuple()));
|
||||
EXPECT_EQ(43, a.Perform(std::make_tuple()));
|
||||
}
|
||||
|
||||
} // namespace gmock_generated_actions_test
|
||||
|
||||
Reference in New Issue
Block a user