Googletest export

Fix GTEST_IS_NULL_LITERAL_ for types that have magic implicit conversions.

PiperOrigin-RevId: 227879345
This commit is contained in:
Abseil Team
2019-01-04 13:48:01 -05:00
committed by gennadiycivil
parent 3880b13e4c
commit b6cd405286
2 changed files with 45 additions and 8 deletions

View File

@@ -519,9 +519,9 @@ TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) {
// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null
// pointer literal.
TEST(NullLiteralTest, IsTrueForNullLiterals) {
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(nullptr));
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(nullptr));
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(nullptr));
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL)); // NOLINT
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0)); // NOLINT
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0u)); // NOLINT
EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(nullptr));
}
@@ -534,6 +534,26 @@ TEST(NullLiteralTest, IsFalseForNonNullLiterals) {
EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(nullptr)));
}
struct ConvertToAll {
template <typename T>
operator T() const { // NOLINT
return T();
}
};
struct ConvertToAllButNoPointers {
template <typename T,
typename std::enable_if<!std::is_pointer<T>::value, int>::type = 0>
operator T() const { // NOLINT
return T();
}
};
TEST(NullLiteralTest, ImplicitConversion) {
EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(ConvertToAll{}));
EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(ConvertToAllButNoPointers{}));
}
# ifdef __BORLANDC__
// Restores warnings after previous "#pragma option push" suppressed them.
# pragma option pop