Make ReturnNull() support unique_ptr and shared_ptr.
This commit is contained in:
parent
8e838ce0fd
commit
53d49dc43e
|
@ -583,12 +583,18 @@ class ReturnAction {
|
||||||
// Implements the ReturnNull() action.
|
// Implements the ReturnNull() action.
|
||||||
class ReturnNullAction {
|
class ReturnNullAction {
|
||||||
public:
|
public:
|
||||||
// Allows ReturnNull() to be used in any pointer-returning function.
|
// Allows ReturnNull() to be used in any pointer-returning function. In C++11
|
||||||
|
// this is enforced by returning nullptr, and in non-C++11 by asserting a
|
||||||
|
// pointer type on compile time.
|
||||||
template <typename Result, typename ArgumentTuple>
|
template <typename Result, typename ArgumentTuple>
|
||||||
static Result Perform(const ArgumentTuple&) {
|
static Result Perform(const ArgumentTuple&) {
|
||||||
|
#if GTEST_LANG_CXX11
|
||||||
|
return nullptr;
|
||||||
|
#else
|
||||||
GTEST_COMPILE_ASSERT_(internal::is_pointer<Result>::value,
|
GTEST_COMPILE_ASSERT_(internal::is_pointer<Result>::value,
|
||||||
ReturnNull_can_be_used_to_return_a_pointer_only);
|
ReturnNull_can_be_used_to_return_a_pointer_only);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#endif // GTEST_LANG_CXX11
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -604,6 +604,18 @@ TEST(ReturnNullTest, WorksInPointerReturningFunction) {
|
||||||
EXPECT_TRUE(a2.Perform(make_tuple(true)) == NULL);
|
EXPECT_TRUE(a2.Perform(make_tuple(true)) == NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if GTEST_HAS_STD_UNIQUE_PTR_
|
||||||
|
// Tests that ReturnNull() returns NULL for shared_ptr and unique_ptr returning
|
||||||
|
// functions.
|
||||||
|
TEST(ReturnNullTest, WorksInSmartPointerReturningFunction) {
|
||||||
|
const Action<std::unique_ptr<const int>()> a1 = ReturnNull();
|
||||||
|
EXPECT_TRUE(a1.Perform(make_tuple()) == nullptr);
|
||||||
|
|
||||||
|
const Action<std::shared_ptr<int>(std::string)> a2 = ReturnNull();
|
||||||
|
EXPECT_TRUE(a2.Perform(make_tuple("foo")) == nullptr);
|
||||||
|
}
|
||||||
|
#endif // GTEST_HAS_STD_UNIQUE_PTR_
|
||||||
|
|
||||||
// Tests that ReturnRef(v) works for reference types.
|
// Tests that ReturnRef(v) works for reference types.
|
||||||
TEST(ReturnRefTest, WorksForReference) {
|
TEST(ReturnRefTest, WorksForReference) {
|
||||||
const int n = 0;
|
const int n = 0;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user