1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright 2006, Google Inc. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// All rights reserved. 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redistribution and use in source and binary forms, with or without 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// modification, are permitted provided that the following conditions are 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// met: 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions of source code must retain the above copyright 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// notice, this list of conditions and the following disclaimer. 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Redistributions in binary form must reproduce the above 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// copyright notice, this list of conditions and the following disclaimer 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// in the documentation and/or other materials provided with the 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// distribution. 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// * Neither the name of Google Inc. nor the names of its 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// contributors may be used to endorse or promote products derived from 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// this software without specific prior written permission. 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Author: wan@google.com (Zhanyong Wan) 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Unit test for Google Test's break-on-failure mode. 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A user can ask Google Test to seg-fault when an assertion fails, using 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// either the GTEST_BREAK_ON_FAILURE environment variable or the 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// --gtest_break_on_failure flag. This file is used for testing such 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// functionality. 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This program will be invoked from a Python unit test. It is 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// expected to fail. Don't run it directly. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "gtest/gtest.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# include <windows.h> 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# include <stdlib.h> 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A test that's expected to fail. 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(Foo, Bar) { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(2, 3); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// On Windows Mobile global exception handlers are not supported. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochLONG WINAPI ExitWithExceptionCode( 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch struct _EXCEPTION_POINTERS* exception_pointers) { 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch exit(exception_pointers->ExceptionRecord->ExceptionCode); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint main(int argc, char **argv) { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if GTEST_OS_WINDOWS 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Suppresses display of the Windows error dialog upon encountering 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a general protection fault (segment violation). 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# if GTEST_HAS_SEH && !GTEST_OS_WINDOWS_MOBILE 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The default unhandled exception filter does not always exit 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // with the exception code as exit code - for example it exits with 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 0 for EXCEPTION_ACCESS_VIOLATION and 1 for EXCEPTION_BREAKPOINT 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // if the application is compiled in debug mode. Thus we use our own 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // filter which always exits with the exception code for unhandled 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // exceptions. 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetUnhandledExceptionFilter(ExitWithExceptionCode); 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen# endif 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch testing::InitGoogleTest(&argc, argv); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return RUN_ALL_TESTS(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 89