Reduced template instantiation depth for the AllOf and AnyOf matchers. Also some formatting changes.
This commit is contained in:
@@ -518,7 +518,7 @@ TEST(ReturnTest, IsCovariant) {
|
||||
// gmock-actions.h for more information.
|
||||
class FromType {
|
||||
public:
|
||||
FromType(bool* is_converted) : converted_(is_converted) {}
|
||||
explicit FromType(bool* is_converted) : converted_(is_converted) {}
|
||||
bool* converted() const { return converted_; }
|
||||
|
||||
private:
|
||||
@@ -529,7 +529,8 @@ class FromType {
|
||||
|
||||
class ToType {
|
||||
public:
|
||||
ToType(const FromType& x) { *x.converted() = true; }
|
||||
// Must allow implicit conversion due to use in ImplicitCast_<T>.
|
||||
ToType(const FromType& x) { *x.converted() = true; } // NOLINT
|
||||
};
|
||||
|
||||
TEST(ReturnTest, ConvertsArgumentWhenConverted) {
|
||||
@@ -541,7 +542,7 @@ TEST(ReturnTest, ConvertsArgumentWhenConverted) {
|
||||
converted = false;
|
||||
action.Perform(tuple<>());
|
||||
EXPECT_FALSE(converted) << "Action must NOT convert its argument "
|
||||
<< "when performed." ;
|
||||
<< "when performed.";
|
||||
}
|
||||
|
||||
class DestinationType {};
|
||||
@@ -1226,7 +1227,8 @@ TEST(ByRefTest, IsCopyable) {
|
||||
const std::string s1 = "Hi";
|
||||
const std::string s2 = "Hello";
|
||||
|
||||
::testing::internal::ReferenceWrapper<const std::string> ref_wrapper = ByRef(s1);
|
||||
::testing::internal::ReferenceWrapper<const std::string> ref_wrapper =
|
||||
ByRef(s1);
|
||||
const std::string& r1 = ref_wrapper;
|
||||
EXPECT_EQ(&s1, &r1);
|
||||
|
||||
@@ -1235,7 +1237,8 @@ TEST(ByRefTest, IsCopyable) {
|
||||
const std::string& r2 = ref_wrapper;
|
||||
EXPECT_EQ(&s2, &r2);
|
||||
|
||||
::testing::internal::ReferenceWrapper<const std::string> ref_wrapper1 = ByRef(s1);
|
||||
::testing::internal::ReferenceWrapper<const std::string> ref_wrapper1 =
|
||||
ByRef(s1);
|
||||
// Copies ref_wrapper1 to ref_wrapper.
|
||||
ref_wrapper = ref_wrapper1;
|
||||
const std::string& r3 = ref_wrapper;
|
||||
|
||||
@@ -35,11 +35,6 @@
|
||||
|
||||
#include "gmock/gmock-generated-function-mockers.h"
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#if GTEST_OS_WINDOWS
|
||||
// MSDN says the header file to be included for STDMETHOD is BaseTyps.h but
|
||||
// we are getting compiler errors if we use basetyps.h, hence including
|
||||
@@ -47,6 +42,11 @@
|
||||
# include <objbase.h>
|
||||
#endif // GTEST_OS_WINDOWS
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// There is a bug in MSVC (fixed in VS 2008) that prevents creating a
|
||||
// mock for a function with const arguments, so we don't test such
|
||||
// cases for MSVC versions older than 2008.
|
||||
|
||||
@@ -1091,6 +1091,20 @@ TEST(ContainsTest, WorksForTwoDimensionalNativeArray) {
|
||||
EXPECT_THAT(a, Contains(Not(Contains(5))));
|
||||
}
|
||||
|
||||
TEST(AllOfTest, HugeMatcher) {
|
||||
// Verify that using AllOf with many arguments doesn't cause
|
||||
// the compiler to exceed template instantiation depth limit.
|
||||
EXPECT_THAT(0, testing::AllOf(_, _, _, _, _, _, _, _, _,
|
||||
testing::AllOf(_, _, _, _, _, _, _, _, _, _)));
|
||||
}
|
||||
|
||||
TEST(AnyOfTest, HugeMatcher) {
|
||||
// Verify that using AnyOf with many arguments doesn't cause
|
||||
// the compiler to exceed template instantiation depth limit.
|
||||
EXPECT_THAT(0, testing::AnyOf(_, _, _, _, _, _, _, _, _,
|
||||
testing::AnyOf(_, _, _, _, _, _, _, _, _, _)));
|
||||
}
|
||||
|
||||
namespace adl_test {
|
||||
|
||||
// Verifies that the implementation of ::testing::AllOf and ::testing::AnyOf
|
||||
|
||||
@@ -545,6 +545,37 @@ TEST(MatcherCastTest, FromSameType) {
|
||||
EXPECT_FALSE(m2.Matches(1));
|
||||
}
|
||||
|
||||
// Implicitly convertible form any type.
|
||||
struct ConvertibleFromAny {
|
||||
ConvertibleFromAny(int a_value) : value(a_value) {}
|
||||
template <typename T>
|
||||
ConvertibleFromAny(const T& a_value) : value(-1) {
|
||||
ADD_FAILURE() << "Conversion constructor called";
|
||||
}
|
||||
int value;
|
||||
};
|
||||
|
||||
bool operator==(const ConvertibleFromAny& a, const ConvertibleFromAny& b) {
|
||||
return a.value == b.value;
|
||||
}
|
||||
|
||||
ostream& operator<<(ostream& os, const ConvertibleFromAny& a) {
|
||||
return os << a.value;
|
||||
}
|
||||
|
||||
TEST(MatcherCastTest, ConversionConstructorIsUsed) {
|
||||
Matcher<ConvertibleFromAny> m = MatcherCast<ConvertibleFromAny>(1);
|
||||
EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
|
||||
EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
|
||||
}
|
||||
|
||||
TEST(MatcherCastTest, FromConvertibleFromAny) {
|
||||
Matcher<ConvertibleFromAny> m =
|
||||
MatcherCast<ConvertibleFromAny>(Eq(ConvertibleFromAny(1)));
|
||||
EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
|
||||
EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
|
||||
}
|
||||
|
||||
class Base {};
|
||||
class Derived : public Base {};
|
||||
|
||||
@@ -620,6 +651,19 @@ TEST(SafeMatcherCastTest, FromSameType) {
|
||||
EXPECT_FALSE(m2.Matches(1));
|
||||
}
|
||||
|
||||
TEST(SafeMatcherCastTest, ConversionConstructorIsUsed) {
|
||||
Matcher<ConvertibleFromAny> m = SafeMatcherCast<ConvertibleFromAny>(1);
|
||||
EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
|
||||
EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
|
||||
}
|
||||
|
||||
TEST(SafeMatcherCastTest, FromConvertibleFromAny) {
|
||||
Matcher<ConvertibleFromAny> m =
|
||||
SafeMatcherCast<ConvertibleFromAny>(Eq(ConvertibleFromAny(1)));
|
||||
EXPECT_TRUE(m.Matches(ConvertibleFromAny(1)));
|
||||
EXPECT_FALSE(m.Matches(ConvertibleFromAny(2)));
|
||||
}
|
||||
|
||||
// Tests that A<T>() matches any value of type T.
|
||||
TEST(ATest, MatchesAnyValue) {
|
||||
// Tests a matcher for a value type.
|
||||
@@ -1940,19 +1984,19 @@ TEST(AllOfTest, CanDescribeSelf) {
|
||||
|
||||
|
||||
m = AllOf(Gt(0), Ne(1), Ne(2), Ne(3));
|
||||
EXPECT_EQ("(is > 0) and "
|
||||
"((isn't equal to 1) and "
|
||||
EXPECT_EQ("((is > 0) and "
|
||||
"(isn't equal to 1)) and "
|
||||
"((isn't equal to 2) and "
|
||||
"(isn't equal to 3)))",
|
||||
"(isn't equal to 3))",
|
||||
Describe(m));
|
||||
|
||||
|
||||
m = AllOf(Ge(0), Lt(10), Ne(3), Ne(5), Ne(7));
|
||||
EXPECT_EQ("(is >= 0) and "
|
||||
"((is < 10) and "
|
||||
EXPECT_EQ("((is >= 0) and "
|
||||
"(is < 10)) and "
|
||||
"((isn't equal to 3) and "
|
||||
"((isn't equal to 5) and "
|
||||
"(isn't equal to 7))))",
|
||||
"(isn't equal to 7)))",
|
||||
Describe(m));
|
||||
}
|
||||
|
||||
@@ -1972,19 +2016,19 @@ TEST(AllOfTest, CanDescribeNegation) {
|
||||
|
||||
|
||||
m = AllOf(Gt(0), Ne(1), Ne(2), Ne(3));
|
||||
EXPECT_EQ("(isn't > 0) or "
|
||||
"((is equal to 1) or "
|
||||
EXPECT_EQ("((isn't > 0) or "
|
||||
"(is equal to 1)) or "
|
||||
"((is equal to 2) or "
|
||||
"(is equal to 3)))",
|
||||
"(is equal to 3))",
|
||||
DescribeNegation(m));
|
||||
|
||||
|
||||
m = AllOf(Ge(0), Lt(10), Ne(3), Ne(5), Ne(7));
|
||||
EXPECT_EQ("(isn't >= 0) or "
|
||||
"((isn't < 10) or "
|
||||
EXPECT_EQ("((isn't >= 0) or "
|
||||
"(isn't < 10)) or "
|
||||
"((is equal to 3) or "
|
||||
"((is equal to 5) or "
|
||||
"(is equal to 7))))",
|
||||
"(is equal to 7)))",
|
||||
DescribeNegation(m));
|
||||
}
|
||||
|
||||
@@ -2112,18 +2156,18 @@ TEST(AnyOfTest, CanDescribeSelf) {
|
||||
Describe(m));
|
||||
|
||||
m = AnyOf(Lt(0), Eq(1), Eq(2), Eq(3));
|
||||
EXPECT_EQ("(is < 0) or "
|
||||
"((is equal to 1) or "
|
||||
EXPECT_EQ("((is < 0) or "
|
||||
"(is equal to 1)) or "
|
||||
"((is equal to 2) or "
|
||||
"(is equal to 3)))",
|
||||
"(is equal to 3))",
|
||||
Describe(m));
|
||||
|
||||
m = AnyOf(Le(0), Gt(10), 3, 5, 7);
|
||||
EXPECT_EQ("(is <= 0) or "
|
||||
"((is > 10) or "
|
||||
EXPECT_EQ("((is <= 0) or "
|
||||
"(is > 10)) or "
|
||||
"((is equal to 3) or "
|
||||
"((is equal to 5) or "
|
||||
"(is equal to 7))))",
|
||||
"(is equal to 7)))",
|
||||
Describe(m));
|
||||
}
|
||||
|
||||
@@ -2140,18 +2184,18 @@ TEST(AnyOfTest, CanDescribeNegation) {
|
||||
DescribeNegation(m));
|
||||
|
||||
m = AnyOf(Lt(0), Eq(1), Eq(2), Eq(3));
|
||||
EXPECT_EQ("(isn't < 0) and "
|
||||
"((isn't equal to 1) and "
|
||||
EXPECT_EQ("((isn't < 0) and "
|
||||
"(isn't equal to 1)) and "
|
||||
"((isn't equal to 2) and "
|
||||
"(isn't equal to 3)))",
|
||||
"(isn't equal to 3))",
|
||||
DescribeNegation(m));
|
||||
|
||||
m = AnyOf(Le(0), Gt(10), 3, 5, 7);
|
||||
EXPECT_EQ("(isn't <= 0) and "
|
||||
"((isn't > 10) and "
|
||||
EXPECT_EQ("((isn't <= 0) and "
|
||||
"(isn't > 10)) and "
|
||||
"((isn't equal to 3) and "
|
||||
"((isn't equal to 5) and "
|
||||
"(isn't equal to 7))))",
|
||||
"(isn't equal to 7)))",
|
||||
DescribeNegation(m));
|
||||
}
|
||||
|
||||
|
||||
@@ -225,6 +225,7 @@ class Foo {
|
||||
const char* s10) {
|
||||
return string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
|
||||
}
|
||||
|
||||
private:
|
||||
int value_;
|
||||
};
|
||||
|
||||
@@ -195,8 +195,8 @@ class Interface {
|
||||
virtual char* StringFromString(char* str) = 0;
|
||||
virtual int IntFromString(char* str) = 0;
|
||||
virtual int& IntRefFromString(char* str) = 0;
|
||||
virtual void VoidFromFunc(void(*)(char*)) = 0;
|
||||
virtual void VoidFromIntRef(int& n) = 0;
|
||||
virtual void VoidFromFunc(void(*func)(char* str)) = 0;
|
||||
virtual void VoidFromIntRef(int& n) = 0; // NOLINT
|
||||
virtual void VoidFromFloat(float n) = 0;
|
||||
virtual void VoidFromDouble(double n) = 0;
|
||||
virtual void VoidFromVector(const std::vector<int>& v) = 0;
|
||||
@@ -211,7 +211,7 @@ class Mock: public Interface {
|
||||
MOCK_METHOD1(IntFromString, int(char* str));
|
||||
MOCK_METHOD1(IntRefFromString, int&(char* str));
|
||||
MOCK_METHOD1(VoidFromFunc, void(void(*func)(char* str)));
|
||||
MOCK_METHOD1(VoidFromIntRef, void(int& n));
|
||||
MOCK_METHOD1(VoidFromIntRef, void(int& n)); // NOLINT
|
||||
MOCK_METHOD1(VoidFromFloat, void(float n));
|
||||
MOCK_METHOD1(VoidFromDouble, void(double n));
|
||||
MOCK_METHOD1(VoidFromVector, void(const std::vector<int>& v));
|
||||
@@ -224,15 +224,15 @@ class InvokeHelper {
|
||||
public:
|
||||
static void StaticVoidFromVoid() {}
|
||||
void VoidFromVoid() {}
|
||||
static void StaticVoidFromString(char*) {}
|
||||
void VoidFromString(char*) {}
|
||||
static int StaticIntFromString(char*) { return 1; }
|
||||
static bool StaticBoolFromString(const char*) { return true; }
|
||||
static void StaticVoidFromString(char* /* str */) {}
|
||||
void VoidFromString(char* /* str */) {}
|
||||
static int StaticIntFromString(char* /* str */) { return 1; }
|
||||
static bool StaticBoolFromString(const char* /* str */) { return true; }
|
||||
};
|
||||
|
||||
class FieldHelper {
|
||||
public:
|
||||
FieldHelper(int a_field) : field_(a_field) {}
|
||||
explicit FieldHelper(int a_field) : field_(a_field) {}
|
||||
int field() const { return field_; }
|
||||
int field_; // NOLINT -- need external access to field_ to test
|
||||
// the Field matcher.
|
||||
|
||||
Reference in New Issue
Block a user