Index: src/client/windows/unittests/exception_handler_death_test.cc |
=================================================================== |
--- src/client/windows/unittests/exception_handler_death_test.cc (revision 596) |
+++ src/client/windows/unittests/exception_handler_death_test.cc (working copy) |
@@ -53,7 +53,8 @@ |
// Actually constructs a temp path name. |
virtual void SetUp(); |
// A helper method that tests can use to crash. |
- void DoCrash(); |
+ void DoCrashAccessViolation(); |
+ void DoCrashPureVirtualCall(); |
}; |
void ExceptionHandlerDeathTest::SetUp() { |
@@ -126,7 +127,7 @@ |
gDumpCallbackCalled = true; |
} |
-void ExceptionHandlerDeathTest::DoCrash() { |
+void ExceptionHandlerDeathTest::DoCrashAccessViolation() { |
google_breakpad::ExceptionHandler *exc = |
new google_breakpad::ExceptionHandler( |
temp_path_, NULL, NULL, NULL, |
@@ -160,7 +161,7 @@ |
// being the same. |
EXPECT_TRUE(server.Start()); |
EXPECT_FALSE(gDumpCallbackCalled); |
- ASSERT_DEATH(this->DoCrash(), ""); |
+ ASSERT_DEATH(this->DoCrashAccessViolation(), ""); |
EXPECT_TRUE(gDumpCallbackCalled); |
} |
@@ -178,4 +179,37 @@ |
// and a dump will be generated, the process will exit(0). |
ASSERT_EXIT(printf(NULL), ::testing::ExitedWithCode(0), ""); |
} |
+ |
+ |
+struct PureVirtualCallBase { |
+ PureVirtualCallBase() { |
+ // We have to reinterpret so the linker doesn't get confused because the |
+ // method isn't defined. |
+ reinterpret_cast<PureVirtualCallBase*>(this)->PureFunction(); |
Sigurður Ásgeirsson
2010/05/13 20:57:10
Really? How weird.
|
+ } |
+ virtual ~PureVirtualCallBase() {} |
+ virtual void PureFunction() const = 0; |
+}; |
+struct PureVirtualCall : public PureVirtualCallBase { |
+ PureVirtualCall() { PureFunction(); } |
+ virtual void PureFunction() const {} |
+}; |
+ |
+void ExceptionHandlerDeathTest::DoCrashPureVirtualCall() { |
+ PureVirtualCall instance; |
} |
+ |
+TEST_F(ExceptionHandlerDeathTest, PureVirtualCallTest) { |
+ using google_breakpad::ExceptionHandler; |
+ |
+ ASSERT_TRUE(DoesPathExist(temp_path_)); |
+ ExceptionHandler handler(temp_path_, NULL, NULL, NULL, |
+ ExceptionHandler::HANDLER_PURECALL); |
+ |
+ // Disable the message box for assertions |
+ _CrtSetReportMode(_CRT_ASSERT, 0); |
+ |
+ // Calls a pure virtual function. |
+ EXPECT_EXIT(DoCrashPureVirtualCall(), ::testing::ExitedWithCode(0), ""); |
+} |
+} |