1735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner#!/usr/bin/env python 2735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# 3735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# Copyright 2010 Google Inc. All Rights Reserved. 4735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# 5735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# Redistribution and use in source and binary forms, with or without 6735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# modification, are permitted provided that the following conditions are 7735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# met: 8735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# 9735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# * Redistributions of source code must retain the above copyright 10735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# notice, this list of conditions and the following disclaimer. 11735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# * Redistributions in binary form must reproduce the above 12735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# copyright notice, this list of conditions and the following disclaimer 13735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# in the documentation and/or other materials provided with the 14735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# distribution. 15735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# * Neither the name of Google Inc. nor the names of its 16735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# contributors may be used to endorse or promote products derived from 17735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# this software without specific prior written permission. 18735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# 19735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 31735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner"""Tests Google Test's exception catching behavior. 32735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 33735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerThis script invokes gtest_catch_exceptions_test_ and 34735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnergtest_catch_exceptions_ex_test_ (programs written with 35735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerGoogle Test) and verifies their output. 36735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner""" 37735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 38735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner__author__ = 'vladl@google.com (Vlad Losev)' 39735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 40735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerimport os 41735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 42735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerimport gtest_test_utils 43735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 44735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# Constants. 45735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerFLAG_PREFIX = '--gtest_' 46735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerLIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests' 47735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerNO_CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions=0' 48735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerFILTER_FLAG = FLAG_PREFIX + 'filter' 49735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 50735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# Path to the gtest_catch_exceptions_ex_test_ binary, compiled with 51735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# exceptions enabled. 52735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerEX_EXE_PATH = gtest_test_utils.GetTestExecutablePath( 53735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'gtest_catch_exceptions_ex_test_') 54735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 55735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# Path to the gtest_catch_exceptions_test_ binary, compiled with 56735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# exceptions disabled. 57735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerEXE_PATH = gtest_test_utils.GetTestExecutablePath( 58735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'gtest_catch_exceptions_no_ex_test_') 59735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 60735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerTEST_LIST = gtest_test_utils.Subprocess([EXE_PATH, LIST_TESTS_FLAG]).output 61735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 62735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerSUPPORTS_SEH_EXCEPTIONS = 'ThrowsSehException' in TEST_LIST 63735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 64735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerif SUPPORTS_SEH_EXCEPTIONS: 65735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner BINARY_OUTPUT = gtest_test_utils.Subprocess([EXE_PATH]).output 66735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 67735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' TurnerEX_BINARY_OUTPUT = gtest_test_utils.Subprocess([EX_EXE_PATH]).output 68735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 69735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner# The tests. 70735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerif SUPPORTS_SEH_EXCEPTIONS: 71735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner # pylint:disable-msg=C6302 72735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner class CatchSehExceptionsTest(gtest_test_utils.TestCase): 73735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner """Tests exception-catching behavior.""" 74735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 75735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 76735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def TestSehExceptions(self, test_output): 77735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown ' 78735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'in the test fixture\'s constructor' 79735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 80735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown ' 81735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'in the test fixture\'s destructor' 82735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 83735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown in SetUpTestCase()' 84735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 85735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown in TearDownTestCase()' 86735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 87735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown in SetUp()' 88735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 89735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown in TearDown()' 90735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 91735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('SEH exception with code 0x2a thrown in the test body' 92735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in test_output) 93735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 94735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesSehExceptionsWithCxxExceptionsEnabled(self): 95735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.TestSehExceptions(EX_BINARY_OUTPUT) 96735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 97735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesSehExceptionsWithCxxExceptionsDisabled(self): 98735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.TestSehExceptions(BINARY_OUTPUT) 99735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 100735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 101735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerclass CatchCxxExceptionsTest(gtest_test_utils.TestCase): 102735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner """Tests C++ exception-catching behavior. 103735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 104735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner Tests in this test case verify that: 105735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner * C++ exceptions are caught and logged as C++ (not SEH) exceptions 106735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner * Exception thrown affect the remainder of the test work flow in the 107735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner expected manner. 108735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner """ 109735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 110735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInFixtureConstructor(self): 111735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description ' 112735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner '"Standard C++ exception" thrown ' 113735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'in the test fixture\'s constructor' 114735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 115735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('unexpected' not in EX_BINARY_OUTPUT, 116735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'This failure belongs in this test only if ' 117735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner '"CxxExceptionInConstructorTest" (no quotes) ' 118735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'appears on the same line as words "called unexpectedly"') 119735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 120735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner if ('CxxExceptionInDestructorTest.ThrowsExceptionInDestructor' in 121735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner EX_BINARY_OUTPUT): 122735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 123735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInFixtureDestructor(self): 124735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description ' 125735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner '"Standard C++ exception" thrown ' 126735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'in the test fixture\'s destructor' 127735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 128735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInDestructorTest::TearDownTestCase() ' 129735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 130735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 131735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 132735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInSetUpTestCase(self): 133735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description "Standard C++ exception"' 134735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner ' thrown in SetUpTestCase()' 135735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 136735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInConstructorTest::TearDownTestCase() ' 137735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 138735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 139735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTestCaseTest constructor ' 140735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 141735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 142735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTestCaseTest destructor ' 143735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 144735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 145735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTestCaseTest::SetUp() ' 146735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 147735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 148735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTestCaseTest::TearDown() ' 149735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 150735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 151735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTestCaseTest test body ' 152735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 153735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 154735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 155735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInTearDownTestCase(self): 156735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description "Standard C++ exception"' 157735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner ' thrown in TearDownTestCase()' 158735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 159735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 160735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInSetUp(self): 161735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description "Standard C++ exception"' 162735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner ' thrown in SetUp()' 163735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 164735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTest::TearDownTestCase() ' 165735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 166735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 167735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTest destructor ' 168735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 169735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 170735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInSetUpTest::TearDown() ' 171735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 172735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 173735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('unexpected' not in EX_BINARY_OUTPUT, 174735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'This failure belongs in this test only if ' 175735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner '"CxxExceptionInSetUpTest" (no quotes) ' 176735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'appears on the same line as words "called unexpectedly"') 177735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 178735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInTearDown(self): 179735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description "Standard C++ exception"' 180735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner ' thrown in TearDown()' 181735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 182735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInTearDownTest::TearDownTestCase() ' 183735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 184735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 185735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInTearDownTest destructor ' 186735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 187735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 188735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 189735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesCxxExceptionsInTestBody(self): 190735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('C++ exception with description "Standard C++ exception"' 191735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner ' thrown in the test body' 192735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 193735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInTestBodyTest::TearDownTestCase() ' 194735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 195735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 196735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInTestBodyTest destructor ' 197735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 198735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 199735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('CxxExceptionInTestBodyTest::TearDown() ' 200735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 'called as expected.' 201735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 202735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 203735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testCatchesNonStdCxxExceptions(self): 204735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('Unknown C++ exception thrown in the test body' 205735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in EX_BINARY_OUTPUT) 206735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 207735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner def testUnhandledCxxExceptionsAbortTheProgram(self): 208735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner # Filters out SEH exception tests on Windows. Unhandled SEH exceptions 209735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner # cause tests to show pop-up windows there. 210735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner FITLER_OUT_SEH_TESTS_FLAG = FILTER_FLAG + '=-*Seh*' 211735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner # By default, Google Test doesn't catch the exceptions. 212735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner uncaught_exceptions_ex_binary_output = gtest_test_utils.Subprocess( 213735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner [EX_EXE_PATH, 214735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner NO_CATCH_EXCEPTIONS_FLAG, 215735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner FITLER_OUT_SEH_TESTS_FLAG]).output 216735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 217735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('Unhandled C++ exception terminating the program' 218735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner in uncaught_exceptions_ex_binary_output) 219735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner self.assert_('unexpected' not in uncaught_exceptions_ex_binary_output) 220735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 221735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner 222735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turnerif __name__ == '__main__': 223735d57d5d1c055db9e0ef28857e8dc7b3d7d6b9bDavid 'Digit' Turner gtest_test_utils.Main() 224