141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Copyright 2010, Google Inc. 241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// All rights reserved. 341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Redistribution and use in source and binary forms, with or without 541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// modification, are permitted provided that the following conditions are 641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// met: 741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Redistributions of source code must retain the above copyright 941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// notice, this list of conditions and the following disclaimer. 1041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Redistributions in binary form must reproduce the above 1141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// copyright notice, this list of conditions and the following disclaimer 1241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// in the documentation and/or other materials provided with the 1341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// distribution. 1441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// * Neither the name of Google Inc. nor the names of its 1541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// contributors may be used to endorse or promote products derived from 1641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// this software without specific prior written permission. 1741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 1841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 3041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Author: vladl@google.com (Vlad Losev) 3141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// 3241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// Tests for Google Test itself. Tests in this file throw C++ or SEH 3341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// exceptions, and the output is verified by gtest_catch_exceptions_test.py. 3441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 3541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include "gtest/gtest.h" 3641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 3741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include <stdio.h> // NOLINT 3841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#include <stdlib.h> // For exit(). 3941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 4041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_SEH 4141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# include <windows.h> 4241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 4341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 4441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_EXCEPTIONS 4541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# include <exception> // For set_terminate(). 4641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot# include <stdexcept> 4741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 4841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 4941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotusing testing::Test; 5041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_SEH 5241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInConstructorTest : public Test { 5441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 5541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot SehExceptionInConstructorTest() { RaiseException(42, 0, 0, NULL); } 5641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 5741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 5841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInConstructorTest, ThrowsExceptionInConstructor) {} 5941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInDestructorTest : public Test { 6141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 6241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~SehExceptionInDestructorTest() { RaiseException(42, 0, 0, NULL); } 6341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 6441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInDestructorTest, ThrowsExceptionInDestructor) {} 6641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 6741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInSetUpTestCaseTest : public Test { 6841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 6941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SetUpTestCase() { RaiseException(42, 0, 0, NULL); } 7041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 7141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 7241d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) {} 7341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 7441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInTearDownTestCaseTest : public Test { 7541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 7641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { RaiseException(42, 0, 0, NULL); } 7741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 7841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 7941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {} 8041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInSetUpTest : public Test { 8241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 8341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { RaiseException(42, 0, 0, NULL); } 8441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 8541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8641d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInSetUpTest, ThrowsExceptionInSetUp) {} 8741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 8841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass SehExceptionInTearDownTest : public Test { 8941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 9041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { RaiseException(42, 0, 0, NULL); } 9141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 9241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(SehExceptionInTearDownTest, ThrowsExceptionInTearDown) {} 9441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(SehExceptionTest, ThrowsSehException) { 9641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot RaiseException(42, 0, 0, NULL); 9741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 9841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 9941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_HAS_SEH 10041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_EXCEPTIONS 10241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 10341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInConstructorTest : public Test { 10441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 10541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CxxExceptionInConstructorTest() { 10641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // Without this macro VC++ complains about unreachable code at the end of 10741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot // the constructor. 10841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_( 10941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception")); 11041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 11141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 11241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 11341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 11441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInConstructorTest::TearDownTestCase() " 11541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 11641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 11741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 11841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 11941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInConstructorTest() { 12041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "CxxExceptionInConstructorTest destructor " 12141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "called unexpectedly."; 12241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 12341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { 12541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "CxxExceptionInConstructorTest::SetUp() " 12641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "called unexpectedly."; 12741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 12841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 12941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 13041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "CxxExceptionInConstructorTest::TearDown() " 13141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "called unexpectedly."; 13241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 13341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 13441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 13541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInConstructorTest, ThrowsExceptionInConstructor) { 13641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "CxxExceptionInConstructorTest test body " 13741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "called unexpectedly."; 13841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 13941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInDestructorTest : public Test { 14141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 14241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 14341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 14441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInDestructorTest::TearDownTestCase() " 14541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 14641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 14741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 14841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 14941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInDestructorTest() { 15041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_( 15141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception")); 15241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 15341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 15441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInDestructorTest, ThrowsExceptionInDestructor) {} 15641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 15741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInSetUpTestCaseTest : public Test { 15841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 15941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot CxxExceptionInSetUpTestCaseTest() { 16041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 16141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest constructor " 16241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 16341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 16441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 16541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void SetUpTestCase() { 16641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception"); 16741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 16841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 16941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 17041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 17141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest::TearDownTestCase() " 17241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 17341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 17441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 17541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 17641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInSetUpTestCaseTest() { 17741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 17841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest destructor " 17941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 18041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 18141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 18241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { 18341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 18441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest::SetUp() " 18541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 18641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 18741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 18841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 18941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 19041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest::TearDown() " 19141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 19241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 19341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 19441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 19541d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInSetUpTestCaseTest, ThrowsExceptionInSetUpTestCase) { 19641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 19741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTestCaseTest test body " 19841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 19941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 20041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 20141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInTearDownTestCaseTest : public Test { 20241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 20341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 20441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception"); 20541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 20641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 20741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 20841d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInTearDownTestCaseTest, ThrowsExceptionInTearDownTestCase) {} 20941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInSetUpTest : public Test { 21141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 21241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 21341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 21441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTest::TearDownTestCase() " 21541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 21641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 21741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 21841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 21941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInSetUpTest() { 22041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 22141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTest destructor " 22241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 22341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 22441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 22541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void SetUp() { throw std::runtime_error("Standard C++ exception"); } 22641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 22741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 22841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 22941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInSetUpTest::TearDown() " 23041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 23141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 23241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 23341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 23441d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInSetUpTest, ThrowsExceptionInSetUp) { 23541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ADD_FAILURE() << "CxxExceptionInSetUpTest test body " 23641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot << "called unexpectedly."; 23741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 23841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 23941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInTearDownTest : public Test { 24041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 24141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 24241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 24341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInTearDownTest::TearDownTestCase() " 24441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 24541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 24641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 24741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 24841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInTearDownTest() { 24941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 25041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInTearDownTest destructor " 25141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 25241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 25341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 25441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 25541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception"); 25641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 25741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 25841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 25941d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInTearDownTest, ThrowsExceptionInTearDown) {} 26041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 26141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotclass CxxExceptionInTestBodyTest : public Test { 26241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot public: 26341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot static void TearDownTestCase() { 26441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 26541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInTestBodyTest::TearDownTestCase() " 26641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 26741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 26841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 26941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot protected: 27041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot ~CxxExceptionInTestBodyTest() { 27141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 27241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInTestBodyTest destructor " 27341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 27441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 27541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 27641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot virtual void TearDown() { 27741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot printf("%s", 27841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "CxxExceptionInTestBodyTest::TearDown() " 27941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot "called as expected.\n"); 28041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot } 28141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot}; 28241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 28341d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST_F(CxxExceptionInTestBodyTest, ThrowsStdCxxException) { 28441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw std::runtime_error("Standard C++ exception"); 28541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 28641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 28741d0579e8de9ef4ff178fc4991043c61a19943f7Brett ChabotTEST(CxxExceptionTest, ThrowsNonStdCxxException) { 28841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot throw "C-string"; 28941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 29041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 29141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// This terminate handler aborts the program using exit() rather than abort(). 29241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// This avoids showing pop-ups on Windows systems and core dumps on Unix-like 29341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot// ones. 29441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotvoid TerminateHandler() { 29541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot fprintf(stderr, "%s\n", "Unhandled C++ exception terminating the program."); 29641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot fflush(NULL); 29741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot exit(3); 29841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 29941d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 30041d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif // GTEST_HAS_EXCEPTIONS 30141d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot 30241d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabotint main(int argc, char** argv) { 30341d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#if GTEST_HAS_EXCEPTIONS 30441d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot std::set_terminate(&TerminateHandler); 30541d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot#endif 30641d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot testing::InitGoogleTest(&argc, argv); 30741d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot return RUN_ALL_TESTS(); 30841d0579e8de9ef4ff178fc4991043c61a19943f7Brett Chabot} 309