Modifies gtest-death-test_test not to use core-dumping API calls.

This commit is contained in:
vladlosev 2010-03-02 00:56:24 +00:00
parent fe78760959
commit 172b233a04

View File

@ -103,6 +103,16 @@ class ReplaceDeathTestFactory {
} // namespace internal } // namespace internal
} // namespace testing } // namespace testing
void DieInside(const char* function) {
fprintf(stderr, "death inside %s().", function);
fflush(stderr);
// We call _exit() instead of exit(), as the former is a direct
// system call and thus safer in the presence of threads. exit()
// will invoke user-defined exit-hooks, which may do dangerous
// things that conflict with death tests.
_exit(1);
}
// Tests that death tests work. // Tests that death tests work.
class TestForDeathTest : public testing::Test { class TestForDeathTest : public testing::Test {
@ -114,23 +124,12 @@ class TestForDeathTest : public testing::Test {
} }
// A static member function that's expected to die. // A static member function that's expected to die.
static void StaticMemberFunction() { static void StaticMemberFunction() { DieInside("StaticMemberFunction"); }
fprintf(stderr, "%s", "death inside StaticMemberFunction().");
fflush(stderr);
// We call _exit() instead of exit(), as the former is a direct
// system call and thus safer in the presence of threads. exit()
// will invoke user-defined exit-hooks, which may do dangerous
// things that conflict with death tests.
_exit(1);
}
// A method of the test fixture that may die. // A method of the test fixture that may die.
void MemberFunction() { void MemberFunction() {
if (should_die_) { if (should_die_)
fprintf(stderr, "%s", "death inside MemberFunction()."); DieInside("MemberFunction");
fflush(stderr);
_exit(1);
}
} }
// True iff MemberFunction() should die. // True iff MemberFunction() should die.
@ -145,9 +144,8 @@ class MayDie {
// A member function that may die. // A member function that may die.
void MemberFunction() const { void MemberFunction() const {
if (should_die_) { if (should_die_)
GTEST_LOG_(FATAL) << "death inside MayDie::MemberFunction()."; DieInside("MayDie::MemberFunction");
}
} }
private: private:
@ -156,27 +154,24 @@ class MayDie {
}; };
// A global function that's expected to die. // A global function that's expected to die.
void GlobalFunction() { void GlobalFunction() { DieInside("GlobalFunction"); }
GTEST_LOG_(FATAL) << "death inside GlobalFunction().";
}
// A non-void function that's expected to die. // A non-void function that's expected to die.
int NonVoidFunction() { int NonVoidFunction() {
GTEST_LOG_(FATAL) << "death inside NonVoidFunction()."; DieInside("NonVoidFunction");
return 1; return 1;
} }
// A unary function that may die. // A unary function that may die.
void DieIf(bool should_die) { void DieIf(bool should_die) {
if (should_die) { if (should_die)
GTEST_LOG_(FATAL) << "death inside DieIf()."; DieInside("DieIf");
}
} }
// A binary function that may die. // A binary function that may die.
bool DieIfLessThan(int x, int y) { bool DieIfLessThan(int x, int y) {
if (x < y) { if (x < y) {
GTEST_LOG_(FATAL) << "death inside DieIfLessThan()."; DieInside("DieIfLessThan");
} }
return true; return true;
} }
@ -191,7 +186,7 @@ void DeathTestSubroutine() {
int DieInDebugElse12(int* sideeffect) { int DieInDebugElse12(int* sideeffect) {
if (sideeffect) *sideeffect = 12; if (sideeffect) *sideeffect = 12;
#ifndef NDEBUG #ifndef NDEBUG
GTEST_LOG_(FATAL) << "debug death inside DieInDebugElse12()"; DieInside("DieInDebugElse12");
#endif // NDEBUG #endif // NDEBUG
return 12; return 12;
} }
@ -1111,8 +1106,10 @@ TEST(EnvironmentTest, HandleFitsIntoSizeT) {
// Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger // Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger
// failures when death tests are available on the system. // failures when death tests are available on the system.
TEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) { TEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) {
EXPECT_DEATH_IF_SUPPORTED(GTEST_CHECK_(false) << "failure", "false.*failure"); EXPECT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestExpectMacro"),
ASSERT_DEATH_IF_SUPPORTED(GTEST_CHECK_(false) << "failure", "false.*failure"); "death inside CondDeathTestExpectMacro");
ASSERT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestAssertMacro"),
"death inside CondDeathTestAssertMacro");
// Empty statement will not crash, which must trigger a failure. // Empty statement will not crash, which must trigger a failure.
EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, ""), ""); EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, ""), "");