14b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Copyright 2005, Google Inc. 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian// All rights reserved. 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Redistribution and use in source and binary forms, with or without 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian// modification, are permitted provided that the following conditions are 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian// met: 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions of source code must retain the above copyright 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian// notice, this list of conditions and the following disclaimer. 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Redistributions in binary form must reproduce the above 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// copyright notice, this list of conditions and the following disclaimer 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian// in the documentation and/or other materials provided with the 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian// distribution. 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// * Neither the name of Google Inc. nor the names of its 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// contributors may be used to endorse or promote products derived from 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// this software without specific prior written permission. 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 306b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan// The purpose of this file is to generate Google Test output under 316b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan// various conditions. The output will then be verified by 326b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan// gtest_output_test.py to ensure that Google Test generates the 336b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan// desired messages. Therefore, most tests in this file are MEANT TO 346b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan// FAIL. 354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Author: wan@google.com (Zhanyong Wan) 374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 382620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest-spi.h" 392620c79810d4741922e9fa89050c0af564994f24zhanyong.wan#include "gtest/gtest.h" 404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 414b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Indicates that this translation unit is part of Google Test's 424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// implementation. It must come before gtest-internal-inl.h is 434b6829f0d28990dd645e16386eb226d0f10c8731shiqian// included, or there will be a compiler error. This trick is to 444b6829f0d28990dd645e16386eb226d0f10c8731shiqian// prevent a user from accidentally including gtest-internal-inl.h in 454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// his code. 464cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#define GTEST_IMPLEMENTATION_ 1 474b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include "src/gtest-internal-inl.h" 484cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#undef GTEST_IMPLEMENTATION_ 494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 504b6829f0d28990dd645e16386eb226d0f10c8731shiqian#include <stdlib.h> 514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 52f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 53e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianusing testing::ScopedFakeTestPartResultReporter; 54e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianusing testing::TestPartResultArray; 55e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 56f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanusing testing::internal::Notification; 57f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanusing testing::internal::ThreadWithParam; 58f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif 59f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 60a49bf25b24dd239a9da88e783f037d817a6287b0zhanyong.wannamespace posix = ::testing::internal::posix; 61f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanusing testing::internal::scoped_ptr; 62e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests catching fatal failures. 644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A subroutine used by the following test. 664b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TestEq1(int x) { 674b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, x); 684b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 694b6829f0d28990dd645e16386eb226d0f10c8731shiqian 704b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This function calls a test subroutine, catches the fatal failure it 714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// generates, and then returns early. 724b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid TryTestSubroutine() { 734b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Calls a subrountine that yields a fatal failure. 744b6829f0d28990dd645e16386eb226d0f10c8731shiqian TestEq1(2); 754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 764b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Catches the fatal failure and aborts the test. 774b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 784b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The testing::Test:: prefix is necessary when calling 794b6829f0d28990dd645e16386eb226d0f10c8731shiqian // HasFatalFailure() outside of a TEST, TEST_F, or test fixture. 804b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (testing::Test::HasFatalFailure()) return; 814b6829f0d28990dd645e16386eb226d0f10c8731shiqian 824b6829f0d28990dd645e16386eb226d0f10c8731shiqian // If we get here, something is wrong. 834b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "This should never be reached."; 844b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 86905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(PassingTest, PassingTest1) { 87905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 88905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 89905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wanTEST(PassingTest, PassingTest2) { 90905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan} 91905074c42ba4d0c5b472730b00e43a01d6a50134zhanyong.wan 923a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev// Tests that parameters of failing parameterized tests are printed in the 933a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev// failing test summary. 943a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosevclass FailingParamTest : public testing::TestWithParam<int> {}; 953a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev 963a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosevTEST_P(FailingParamTest, Fails) { 973a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev EXPECT_EQ(1, GetParam()); 983a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev} 993a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev 1003a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev// This generates a test which will fail. Google Test is expected to print 1013a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev// its parameter when it outputs the list of all failed tests. 1023a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosevINSTANTIATE_TEST_CASE_P(PrintingFailingParams, 1033a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev FailingParamTest, 1043a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev testing::Values(2)); 1053a6fc976eaf7f79a3e8212595ccf49d72d37335bvladlosev 1066b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wanstatic const char kGoldenString[] = "\"Line\0 1\"\nLine 2"; 1076b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan 1086b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wanTEST(NonfatalFailureTest, EscapesStringOperands) { 1096b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan std::string actual = "actual \"string\""; 1106b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan EXPECT_EQ(kGoldenString, actual); 1116b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan 1126b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan const char* golden = kGoldenString; 1136b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan EXPECT_EQ(golden, actual); 1146b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan} 1156b625a794e8a0e314f3ccc2f6a892f4a40a7e788zhanyong.wan 116d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.comTEST(NonfatalFailureTest, DiffForLongStrings) { 117d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com std::string golden_str(kGoldenString, sizeof(kGoldenString) - 1); 118d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com EXPECT_EQ(golden_str, "Line 2"); 119d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com} 120d9abf3b04db54a8081365ab131aeb0943b5aab36kosak@google.com 1214b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests catching a fatal failure in a subroutine. 1224b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FatalFailureTest, FatalFailureInSubroutine) { 1234b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure that x should be 1)\n"); 1244b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1254b6829f0d28990dd645e16386eb226d0f10c8731shiqian TryTestSubroutine(); 1264b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests catching a fatal failure in a nested subroutine. 1294b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FatalFailureTest, FatalFailureInNestedSubroutine) { 1304b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure that x should be 1)\n"); 1314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1324b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Calls a subrountine that yields a fatal failure. 1334b6829f0d28990dd645e16386eb226d0f10c8731shiqian TryTestSubroutine(); 1344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1354b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Catches the fatal failure and aborts the test. 1364b6829f0d28990dd645e16386eb226d0f10c8731shiqian // 1374b6829f0d28990dd645e16386eb226d0f10c8731shiqian // When calling HasFatalFailure() inside a TEST, TEST_F, or test 1384b6829f0d28990dd645e16386eb226d0f10c8731shiqian // fixture, the testing::Test:: prefix is not needed. 1394b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (HasFatalFailure()) return; 1404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1414b6829f0d28990dd645e16386eb226d0f10c8731shiqian // If we get here, something is wrong. 1424b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "This should never be reached."; 1434b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests HasFatalFailure() after a failed EXPECT check. 1464b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(FatalFailureTest, NonfatalFailureInSubroutine) { 1474b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure on false)\n"); 1484b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(false); // Generates a nonfatal failure 1494b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_FALSE(HasFatalFailure()); // This should succeed. 1504b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1514b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests interleaving user logging and Google Test assertions. 1534b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(LoggingTest, InterleavingLoggingAndAssertions) { 1544b6829f0d28990dd645e16386eb226d0f10c8731shiqian static const int a[4] = { 1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3, 9, 2, 6 1564b6829f0d28990dd645e16386eb226d0f10c8731shiqian }; 1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1584b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 failures on (3) >= (a[i]))\n"); 1594b6829f0d28990dd645e16386eb226d0f10c8731shiqian for (int i = 0; i < static_cast<int>(sizeof(a)/sizeof(*a)); i++) { 1604b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("i == %d\n", i); 1614b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_GE(3, a[i]); 1624b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 1634b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1644b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1654b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests the SCOPED_TRACE macro. 1664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1674b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A helper function for testing SCOPED_TRACE. 1684b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid SubWithoutTrace(int n) { 1694b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, n); 1704b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(2, n); 1714b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1734b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Another helper function for testing SCOPED_TRACE. 1744b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid SubWithTrace(int n) { 1754b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE(testing::Message() << "n = " << n); 1764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1774b6829f0d28990dd645e16386eb226d0f10c8731shiqian SubWithoutTrace(n); 1784b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that SCOPED_TRACE() obeys lexical scopes. 1814b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SCOPED_TRACETest, ObeysScopes) { 1824b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expected to fail)\n"); 1834b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1844b6829f0d28990dd645e16386eb226d0f10c8731shiqian // There should be no trace before SCOPED_TRACE() is invoked. 1854b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; 1864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1874b6829f0d28990dd645e16386eb226d0f10c8731shiqian { 1884b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE("Expected trace"); 1894b6829f0d28990dd645e16386eb226d0f10c8731shiqian // After SCOPED_TRACE(), a failure in the current scope should contain 1904b6829f0d28990dd645e16386eb226d0f10c8731shiqian // the trace. 1914b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "This failure is expected, and should have a trace."; 1924b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 1934b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1944b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Once the control leaves the scope of the SCOPED_TRACE(), there 1954b6829f0d28990dd645e16386eb226d0f10c8731shiqian // should be no trace again. 1964b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; 1974b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1984b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that SCOPED_TRACE works inside a loop. 2004b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SCOPED_TRACETest, WorksInLoop) { 2014b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expected to fail)\n"); 2024b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2034b6829f0d28990dd645e16386eb226d0f10c8731shiqian for (int i = 1; i <= 2; i++) { 2044b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE(testing::Message() << "i = " << i); 2054b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2064b6829f0d28990dd645e16386eb226d0f10c8731shiqian SubWithoutTrace(i); 2074b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 2084b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 2094b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2104b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that SCOPED_TRACE works in a subroutine. 2114b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SCOPED_TRACETest, WorksInSubroutine) { 2124b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expected to fail)\n"); 2134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2144b6829f0d28990dd645e16386eb226d0f10c8731shiqian SubWithTrace(1); 2154b6829f0d28990dd645e16386eb226d0f10c8731shiqian SubWithTrace(2); 2164b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 2174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2184b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that SCOPED_TRACE can be nested. 2194b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SCOPED_TRACETest, CanBeNested) { 2204b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expected to fail)\n"); 2214b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2224b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE(""); // A trace without a message. 2234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2244b6829f0d28990dd645e16386eb226d0f10c8731shiqian SubWithTrace(2); 2254b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 2264b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2274b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that multiple SCOPED_TRACEs can be used in the same scope. 2284b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(SCOPED_TRACETest, CanBeRepeated) { 2294b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expected to fail)\n"); 2304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2314b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE("A"); 2324b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() 2334b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is expected, and should contain trace point A."; 2344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2354b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE("B"); 2364b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() 2374b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "This failure is expected, and should contain trace point A and B."; 2384b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2394b6829f0d28990dd645e16386eb226d0f10c8731shiqian { 2404b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE("C"); 2417a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ADD_FAILURE() << "This failure is expected, and should " 2427a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com << "contain trace point A, B, and C."; 2434b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 2444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 2454b6829f0d28990dd645e16386eb226d0f10c8731shiqian SCOPED_TRACE("D"); 2467a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com ADD_FAILURE() << "This failure is expected, and should " 2477a574c99ea1d474f8ec5f040deba54169120f063jgm@google.com << "contain trace point A, B, and D."; 2484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 2494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 250f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 251f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// Tests that SCOPED_TRACE()s can be used concurrently from multiple 252f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// threads. Namely, an assertion should be affected by 253f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// SCOPED_TRACE()s in its own thread only. 254f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 255f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// Here's the sequence of actions that happen in the test: 256f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// 257f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// Thread A (main) | Thread B (spawned) 258f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// ===============================|================================ 259f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// spawns thread B | 260f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// -------------------------------+-------------------------------- 261f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// waits for n1 | SCOPED_TRACE("Trace B"); 262f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// | generates failure #1 263f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// | notifies n1 264f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// -------------------------------+-------------------------------- 265f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// SCOPED_TRACE("Trace A"); | waits for n2 266f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// generates failure #2 | 267f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// notifies n2 | 268f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// -------------------------------|-------------------------------- 269f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// waits for n3 | generates failure #3 270f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// | trace B dies 271f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// | generates failure #4 272f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// | notifies n3 273f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// -------------------------------|-------------------------------- 274f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// generates failure #5 | finishes 275f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// trace A dies | 276f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// generates failure #6 | 277f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// -------------------------------|-------------------------------- 278f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// waits for thread B to finish | 279f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 280f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanstruct CheckPoints { 281f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan Notification n1; 282f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan Notification n2; 283f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan Notification n3; 284f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan}; 285f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 286f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanstatic void ThreadWithScopedTrace(CheckPoints* check_points) { 287f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan { 288f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan SCOPED_TRACE("Trace B"); 289f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 290f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #1 (in thread B, only trace B alive)."; 291f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points->n1.Notify(); 292f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points->n2.WaitForNotification(); 293f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 294f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 295f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #3 (in thread B, trace A & B both alive)."; 296f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan } // Trace B dies here. 297f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 298f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #4 (in thread B, only trace A alive)."; 299f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points->n3.Notify(); 300f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan} 301f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 302f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanTEST(SCOPED_TRACETest, WorksConcurrently) { 303f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan printf("(expecting 6 failures)\n"); 304f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 305f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan CheckPoints check_points; 306f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ThreadWithParam<CheckPoints*> thread(&ThreadWithScopedTrace, 307f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan &check_points, 308f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan NULL); 309f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points.n1.WaitForNotification(); 310f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 311f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan { 312f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan SCOPED_TRACE("Trace A"); 313f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 314f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #2 (in thread A, trace A & B both alive)."; 315f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points.n2.Notify(); 316f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan check_points.n3.WaitForNotification(); 317f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 318f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 319f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #5 (in thread A, only trace A alive)."; 320f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan } // Trace A dies here. 321f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ADD_FAILURE() 322f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan << "Expected failure #6 (in thread A, no trace alive)."; 323f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan thread.Join(); 324f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan} 325f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif // GTEST_IS_THREADSAFE 326f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 327ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqianTEST(DisabledTestsWarningTest, 328ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning) { 329ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // This test body is intentionally empty. Its sole purpose is for 330ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // verifying that the --gtest_also_run_disabled_tests flag 331ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // suppresses the "YOU HAVE 12 DISABLED TESTS" warning at the end of 332ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian // the test output. 333ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian} 334ca6949fd2a0a317fd7c7c48aa86670aac50a48c6shiqian 3354b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests using assertions outside of TEST and TEST_F. 3364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 3374b6829f0d28990dd645e16386eb226d0f10c8731shiqian// This function creates two failures intentionally. 3384b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid AdHocTest() { 3394b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("The non-test part of the code is expected to have 2 failures.\n\n"); 3404b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_TRUE(false); 3414b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(2, 3); 3424b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 3434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3444b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Runs all TESTs, all TEST_Fs, and the ad hoc test. 3454b6829f0d28990dd645e16386eb226d0f10c8731shiqianint RunAllTests() { 3464b6829f0d28990dd645e16386eb226d0f10c8731shiqian AdHocTest(); 3474b6829f0d28990dd645e16386eb226d0f10c8731shiqian return RUN_ALL_TESTS(); 3484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 3494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3504b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests non-fatal failures in the fixture constructor. 3514b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass NonFatalFailureInFixtureConstructorTest : public testing::Test { 3524b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 3534b6829f0d28990dd645e16386eb226d0f10c8731shiqian NonFatalFailureInFixtureConstructorTest() { 3544b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 5 failures)\n"); 3554b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #1, in the test fixture c'tor."; 3564b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3584b6829f0d28990dd645e16386eb226d0f10c8731shiqian ~NonFatalFailureInFixtureConstructorTest() { 3594b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #5, in the test fixture d'tor."; 3604b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3624b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 3634b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #2, in SetUp()."; 3644b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3654b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3664b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 3674b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #4, in TearDown."; 3684b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3694b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 3704b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3714b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(NonFatalFailureInFixtureConstructorTest, FailureInConstructor) { 3724b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #3, in the test body."; 3734b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 3744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests fatal failures in the fixture constructor. 3764b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass FatalFailureInFixtureConstructorTest : public testing::Test { 3774b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 3784b6829f0d28990dd645e16386eb226d0f10c8731shiqian FatalFailureInFixtureConstructorTest() { 3794b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 2 failures)\n"); 3804b6829f0d28990dd645e16386eb226d0f10c8731shiqian Init(); 3814b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3834b6829f0d28990dd645e16386eb226d0f10c8731shiqian ~FatalFailureInFixtureConstructorTest() { 3844b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #2, in the test fixture d'tor."; 3854b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3874b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 3884b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "UNEXPECTED failure in SetUp(). " 3894b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "We should never get here, as the test fixture c'tor " 3904b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "had a fatal failure."; 3914b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 3924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 3934b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 3944b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "UNEXPECTED failure in TearDown(). " 3954b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "We should never get here, as the test fixture c'tor " 3964b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "had a fatal failure."; 3974b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 39893fed47dbf8e6bc3d39d3f769cb5039551747257vladlosev 3994b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 4004b6829f0d28990dd645e16386eb226d0f10c8731shiqian void Init() { 4014b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #1, in the test fixture c'tor."; 4024b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4034b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 4044b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4054b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FatalFailureInFixtureConstructorTest, FailureInConstructor) { 4064b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "UNEXPECTED failure in the test body. " 4074b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "We should never get here, as the test fixture c'tor " 4084b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "had a fatal failure."; 4094b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 4104b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4114b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests non-fatal failures in SetUp(). 4124b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass NonFatalFailureInSetUpTest : public testing::Test { 4134b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 4144b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ~NonFatalFailureInSetUpTest() { 4154b6829f0d28990dd645e16386eb226d0f10c8731shiqian Deinit(); 4164b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4174b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4184b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 4194b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 4 failures)\n"); 4204b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected failure #1, in SetUp()."; 4214b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4234b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 4244b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #3, in TearDown()."; 4254b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4264b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 4274b6829f0d28990dd645e16386eb226d0f10c8731shiqian void Deinit() { 4284b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #4, in the test fixture d'tor."; 4294b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4304b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 4314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4324b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(NonFatalFailureInSetUpTest, FailureInSetUp) { 4334b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #2, in the test function."; 4344b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 4354b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4364b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests fatal failures in SetUp(). 4374b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass FatalFailureInSetUpTest : public testing::Test { 4384b6829f0d28990dd645e16386eb226d0f10c8731shiqian protected: 4394b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual ~FatalFailureInSetUpTest() { 4404b6829f0d28990dd645e16386eb226d0f10c8731shiqian Deinit(); 4414b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4434b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 4444b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting 3 failures)\n"); 4454b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #1, in SetUp()."; 4464b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4484b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 4494b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #2, in TearDown()."; 4504b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4514b6829f0d28990dd645e16386eb226d0f10c8731shiqian private: 4524b6829f0d28990dd645e16386eb226d0f10c8731shiqian void Deinit() { 4534b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected failure #3, in the test fixture d'tor."; 4544b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 4554b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 4564b6829f0d28990dd645e16386eb226d0f10c8731shiqian 4574b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(FatalFailureInSetUpTest, FailureInSetUp) { 4584b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "UNEXPECTED failure in the test function. " 4594b6829f0d28990dd645e16386eb226d0f10c8731shiqian << "We should never get here, as SetUp() failed."; 4604b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 4614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 462d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wanTEST(AddFailureAtTest, MessageContainsSpecifiedFileAndLineNumber) { 463d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan ADD_FAILURE_AT("foo.cc", 42) << "Expected failure in foo.cc"; 464d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan} 465d5ad2ca82051c34b19af628a3c81131ca65010c2zhanyong.wan 466f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 467f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 468f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// A unary function that may die. 469f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanvoid DieIf(bool should_die) { 470f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan GTEST_CHECK_(!should_die) << " - death inside DieIf()."; 471f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan} 472f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 473f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// Tests running death tests in a multi-threaded context. 474f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 475f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// Used for coordination between the main and the spawn thread. 476f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanstruct SpawnThreadNotifications { 477f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan SpawnThreadNotifications() {} 478f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 479f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan Notification spawn_thread_started; 480f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan Notification spawn_thread_ok_to_terminate; 481f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 482f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan private: 483f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan GTEST_DISALLOW_COPY_AND_ASSIGN_(SpawnThreadNotifications); 484f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan}; 485f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 486f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// The function to be executed in the thread spawn by the 487f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// MultipleThreads test (below). 488f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanstatic void ThreadRoutine(SpawnThreadNotifications* notifications) { 489f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // Signals the main thread that this thread has started. 490f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan notifications->spawn_thread_started.Notify(); 491f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 492f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // Waits for permission to finish from the main thread. 493f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan notifications->spawn_thread_ok_to_terminate.WaitForNotification(); 494f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan} 495f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 496f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// This is a death-test test, but it's not named with a DeathTest 497f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// suffix. It starts threads which might interfere with later 498f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan// death tests, so it must run after all other death tests. 499f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wanclass DeathTestAndMultiThreadsTest : public testing::Test { 500f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan protected: 501f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // Starts a thread and waits for it to begin. 502f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan virtual void SetUp() { 503f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan thread_.reset(new ThreadWithParam<SpawnThreadNotifications*>( 504f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan &ThreadRoutine, ¬ifications_, NULL)); 505f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan notifications_.spawn_thread_started.WaitForNotification(); 506f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan } 507f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // Tells the thread to finish, and reaps it. 508f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // Depending on the version of the thread library in use, 509f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // a manager thread might still be left running that will interfere 510f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // with later death tests. This is unfortunate, but this class 511f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan // cleans up after itself as best it can. 512f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan virtual void TearDown() { 513f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan notifications_.spawn_thread_ok_to_terminate.Notify(); 514f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan } 515f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 516f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan private: 517f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan SpawnThreadNotifications notifications_; 518f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan scoped_ptr<ThreadWithParam<SpawnThreadNotifications*> > thread_; 519f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan}; 520f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 521f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif // GTEST_IS_THREADSAFE 522f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan 5234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The MixedUpTestCaseTest test case verifies that Google Test will fail a 5244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// test if it uses a different fixture class than what other tests in 5254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// the same test case use. It deliberately contains two fixture 5264b6829f0d28990dd645e16386eb226d0f10c8731shiqian// classes with the same name but defined in different namespaces. 5274b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5284b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The MixedUpTestCaseWithSameTestNameTest test case verifies that 5294b6829f0d28990dd645e16386eb226d0f10c8731shiqian// when the user defines two tests with the same test case name AND 5304b6829f0d28990dd645e16386eb226d0f10c8731shiqian// same test name (but in different namespaces), the second test will 5314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// fail. 5324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5334b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace foo { 5344b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5354b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MixedUpTestCaseTest : public testing::Test { 5364b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5384b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseTest, FirstTestFromNamespaceFoo) {} 5394b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseTest, SecondTestFromNamespaceFoo) {} 5404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5414b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MixedUpTestCaseWithSameTestNameTest : public testing::Test { 5424b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5444b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseWithSameTestNameTest, 5454b6829f0d28990dd645e16386eb226d0f10c8731shiqian TheSecondTestWithThisNameShouldFail) {} 5464b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5474b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace foo 5484b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5494b6829f0d28990dd645e16386eb226d0f10c8731shiqiannamespace bar { 5504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5514b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MixedUpTestCaseTest : public testing::Test { 5524b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5544b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The following two tests are expected to fail. We rely on the 5554b6829f0d28990dd645e16386eb226d0f10c8731shiqian// golden file to check that Google Test generates the right error message. 5564b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseTest, ThisShouldFail) {} 5574b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseTest, ThisShouldFailToo) {} 5584b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5594b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass MixedUpTestCaseWithSameTestNameTest : public testing::Test { 5604b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5614b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Expected to fail. We rely on the golden file to check that Google Test 5634b6829f0d28990dd645e16386eb226d0f10c8731shiqian// generates the right error message. 5644b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(MixedUpTestCaseWithSameTestNameTest, 5654b6829f0d28990dd645e16386eb226d0f10c8731shiqian TheSecondTestWithThisNameShouldFail) {} 5664b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5674b6829f0d28990dd645e16386eb226d0f10c8731shiqian} // namespace bar 5684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5694b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The following two test cases verify that Google Test catches the user 5704b6829f0d28990dd645e16386eb226d0f10c8731shiqian// error of mixing TEST and TEST_F in the same test case. The first 5714b6829f0d28990dd645e16386eb226d0f10c8731shiqian// test case checks the scenario where TEST_F appears before TEST, and 5724b6829f0d28990dd645e16386eb226d0f10c8731shiqian// the second one checks where TEST appears before TEST_F. 5734b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5744b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass TEST_F_before_TEST_in_same_test_case : public testing::Test { 5754b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5764b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5774b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TEST_F_before_TEST_in_same_test_case, DefinedUsingTEST_F) {} 5784b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5794b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Expected to fail. We rely on the golden file to check that Google Test 5804b6829f0d28990dd645e16386eb226d0f10c8731shiqian// generates the right error message. 5814b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TEST_F_before_TEST_in_same_test_case, DefinedUsingTESTAndShouldFail) {} 5824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5834b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass TEST_before_TEST_F_in_same_test_case : public testing::Test { 5844b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 5854b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5864b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST) {} 5874b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5884b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Expected to fail. We rely on the golden file to check that Google Test 5894b6829f0d28990dd645e16386eb226d0f10c8731shiqian// generates the right error message. 5904b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST_F(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST_FAndShouldFail) { 5914b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 5924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Used for testing EXPECT_NONFATAL_FAILURE() and EXPECT_FATAL_FAILURE(). 5944b6829f0d28990dd645e16386eb226d0f10c8731shiqianint global_integer = 0; 5954b6829f0d28990dd645e16386eb226d0f10c8731shiqian 5964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() can reference global variables. 5974b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, CanReferenceGlobalVariables) { 5984b6829f0d28990dd645e16386eb226d0f10c8731shiqian global_integer = 0; 5994b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6004b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(1, global_integer) << "Expected non-fatal failure."; 6014b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected non-fatal failure."); 6024b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6034b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6044b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() can reference local variables 6054b6829f0d28990dd645e16386eb226d0f10c8731shiqian// (static or not). 6064b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, CanReferenceLocalVariables) { 6074b6829f0d28990dd645e16386eb226d0f10c8731shiqian int m = 0; 6084b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int n; 6094b6829f0d28990dd645e16386eb226d0f10c8731shiqian n = 1; 6104b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6114b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_EQ(m, n) << "Expected non-fatal failure."; 6124b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected non-fatal failure."); 6134b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6144b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() succeeds when there is exactly 6164b6829f0d28990dd645e16386eb226d0f10c8731shiqian// one non-fatal failure and no fatal failure. 6174b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, SucceedsWhenThereIsOneNonfatalFailure) { 6184b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6194b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected non-fatal failure."; 6204b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected non-fatal failure."); 6214b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6234b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() fails when there is no 6244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// non-fatal failure. 6254b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, FailsWhenThereIsNoNonfatalFailure) { 6264b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 6274b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6284b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 6294b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6304b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6314b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() fails when there are two 6324b6829f0d28990dd645e16386eb226d0f10c8731shiqian// non-fatal failures. 6334b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, FailsWhenThereAreTwoNonfatalFailures) { 6344b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 6354b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6364b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected non-fatal failure 1."; 6374b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected non-fatal failure 2."; 6384b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 6394b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6404b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6414b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() fails when there is one fatal 6424b6829f0d28990dd645e16386eb226d0f10c8731shiqian// failure. 6434b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, FailsWhenThereIsOneFatalFailure) { 6444b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 6454b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6464b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected fatal failure."; 6474b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 6484b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6494b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6504b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being 6514b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tested returns. 6524b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, FailsWhenStatementReturns) { 6534b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 6544b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6554b6829f0d28990dd645e16386eb226d0f10c8731shiqian return; 6564b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 6574b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6584b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6594b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_EXCEPTIONS 6604b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6614b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being 6624b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tested throws. 6634b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectNonfatalFailureTest, FailsWhenStatementThrows) { 6644b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 6654b6829f0d28990dd645e16386eb226d0f10c8731shiqian try { 6664b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_NONFATAL_FAILURE({ 6674b6829f0d28990dd645e16386eb226d0f10c8731shiqian throw 0; 6684b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 6694b6829f0d28990dd645e16386eb226d0f10c8731shiqian } catch(int) { // NOLINT 6704b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 6714b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6734b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_EXCEPTIONS 6744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6754b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() can reference global variables. 6764b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, CanReferenceGlobalVariables) { 6774b6829f0d28990dd645e16386eb226d0f10c8731shiqian global_integer = 0; 6784b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 6794b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(1, global_integer) << "Expected fatal failure."; 6804b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected fatal failure."); 6814b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6834b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() can reference local static 6844b6829f0d28990dd645e16386eb226d0f10c8731shiqian// variables. 6854b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, CanReferenceLocalStaticVariables) { 6864b6829f0d28990dd645e16386eb226d0f10c8731shiqian static int n; 6874b6829f0d28990dd645e16386eb226d0f10c8731shiqian n = 1; 6884b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 6894b6829f0d28990dd645e16386eb226d0f10c8731shiqian ASSERT_EQ(0, n) << "Expected fatal failure."; 6904b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected fatal failure."); 6914b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 6924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 6934b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() succeeds when there is exactly 6944b6829f0d28990dd645e16386eb226d0f10c8731shiqian// one fatal failure and no non-fatal failure. 6954b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, SucceedsWhenThereIsOneFatalFailure) { 6964b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 6974b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected fatal failure."; 6984b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, "Expected fatal failure."); 6994b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7004b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7014b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() fails when there is no fatal 7024b6829f0d28990dd645e16386eb226d0f10c8731shiqian// failure. 7034b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, FailsWhenThereIsNoFatalFailure) { 7044b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 7054b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 7064b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 7074b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7084b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7094b6829f0d28990dd645e16386eb226d0f10c8731shiqian// A helper for generating a fatal failure. 7104b6829f0d28990dd645e16386eb226d0f10c8731shiqianvoid FatalFailure() { 7114b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected fatal failure."; 7124b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7144b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() fails when there are two 7154b6829f0d28990dd645e16386eb226d0f10c8731shiqian// fatal failures. 7164b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, FailsWhenThereAreTwoFatalFailures) { 7174b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 7184b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 7194b6829f0d28990dd645e16386eb226d0f10c8731shiqian FatalFailure(); 7204b6829f0d28990dd645e16386eb226d0f10c8731shiqian FatalFailure(); 7214b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 7224b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7244b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() fails when there is one non-fatal 7254b6829f0d28990dd645e16386eb226d0f10c8731shiqian// failure. 7264b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, FailsWhenThereIsOneNonfatalFailure) { 7274b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 7284b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 7294b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected non-fatal failure."; 7304b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 7314b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7334b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() fails when the statement being 7344b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tested returns. 7354b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, FailsWhenStatementReturns) { 7364b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 7374b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 7384b6829f0d28990dd645e16386eb226d0f10c8731shiqian return; 7394b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 7404b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7424b6829f0d28990dd645e16386eb226d0f10c8731shiqian#if GTEST_HAS_EXCEPTIONS 7434b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7444b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Tests that EXPECT_FATAL_FAILURE() fails when the statement being 7454b6829f0d28990dd645e16386eb226d0f10c8731shiqian// tested throws. 7464b6829f0d28990dd645e16386eb226d0f10c8731shiqianTEST(ExpectFatalFailureTest, FailsWhenStatementThrows) { 7474b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("(expecting a failure)\n"); 7484b6829f0d28990dd645e16386eb226d0f10c8731shiqian try { 7494b6829f0d28990dd645e16386eb226d0f10c8731shiqian EXPECT_FATAL_FAILURE({ 7504b6829f0d28990dd645e16386eb226d0f10c8731shiqian throw 0; 7514b6829f0d28990dd645e16386eb226d0f10c8731shiqian }, ""); 7524b6829f0d28990dd645e16386eb226d0f10c8731shiqian } catch(int) { // NOLINT 7534b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 7544b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 7554b6829f0d28990dd645e16386eb226d0f10c8731shiqian 7564b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_EXCEPTIONS 7574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 758e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// This #ifdef block tests the output of typed tests. 7594cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_TYPED_TEST 760e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 761e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 762e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass TypedTest : public testing::Test { 763e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 764e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 765e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE(TypedTest, testing::Types<int>); 766e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 767e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST(TypedTest, Success) { 768e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_EQ(0, TypeParam()); 769e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 770e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 771e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST(TypedTest, Failure) { 772e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian EXPECT_EQ(1, TypeParam()) << "Expected failure"; 773e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 774e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 775e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian#endif // GTEST_HAS_TYPED_TEST 776e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 777e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// This #ifdef block tests the output of type-parameterized tests. 7784cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_TYPED_TEST_P 779e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 780e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 781e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass TypedTestP : public testing::Test { 782e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 783e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 784e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE_P(TypedTestP); 785e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 786e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_P(TypedTestP, Success) { 787a773ef8a3b70936450c94bdcba1e6345a980244ezhanyong.wan EXPECT_EQ(0U, TypeParam()); 788e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 789e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 790e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_P(TypedTestP, Failure) { 791a773ef8a3b70936450c94bdcba1e6345a980244ezhanyong.wan EXPECT_EQ(1U, TypeParam()) << "Expected failure"; 792e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 793e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 794e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianREGISTER_TYPED_TEST_CASE_P(TypedTestP, Success, Failure); 795e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 796e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantypedef testing::Types<unsigned char, unsigned int> UnsignedTypes; 797e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianINSTANTIATE_TYPED_TEST_CASE_P(Unsigned, TypedTestP, UnsignedTypes); 798e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 799e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian#endif // GTEST_HAS_TYPED_TEST_P 800e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 8014cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_DEATH_TEST 802e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 803e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// We rely on the golden file to verify that tests whose test case 804e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// name ends with DeathTest are run first. 805e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 806e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTEST(ADeathTest, ShouldRunFirst) { 807e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 808e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 809733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_HAS_TYPED_TEST 810e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 811e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// We rely on the golden file to verify that typed tests whose test 812e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// case name ends with DeathTest are run first. 813e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 814e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 815e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass ATypedDeathTest : public testing::Test { 816e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 817e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 818e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantypedef testing::Types<int, double> NumericTypes; 819e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE(ATypedDeathTest, NumericTypes); 820e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 821e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST(ATypedDeathTest, ShouldRunFirst) { 822e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 823e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 824733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_HAS_TYPED_TEST 825e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 826733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_HAS_TYPED_TEST_P 827e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 828e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 829e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// We rely on the golden file to verify that type-parameterized tests 830e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian// whose test case name ends with DeathTest are run first. 831e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 832e8ff148b4309e115da1c55089dc3b9a241a928dcshiqiantemplate <typename T> 833e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianclass ATypeParamDeathTest : public testing::Test { 834e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian}; 835e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 836e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_CASE_P(ATypeParamDeathTest); 837e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 838e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianTYPED_TEST_P(ATypeParamDeathTest, ShouldRunFirst) { 839e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian} 840e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 841e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianREGISTER_TYPED_TEST_CASE_P(ATypeParamDeathTest, ShouldRunFirst); 842e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 843e8ff148b4309e115da1c55089dc3b9a241a928dcshiqianINSTANTIATE_TYPED_TEST_CASE_P(My, ATypeParamDeathTest, NumericTypes); 844e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 845733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_HAS_TYPED_TEST_P 846e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 847e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian#endif // GTEST_HAS_DEATH_TEST 848e8ff148b4309e115da1c55089dc3b9a241a928dcshiqian 849e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests various failure conditions of 850e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// EXPECT_{,NON}FATAL_FAILURE{,_ON_ALL_THREADS}. 851e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass ExpectFailureTest : public testing::Test { 852acd0f32c50622ace5eb0c62b38820981c1ecd1e9tsunanet public: // Must be public and not protected due to a bug in g++ 3.4.2. 853e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian enum FailureMode { 854e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian FATAL_FAILURE, 855e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian NONFATAL_FAILURE 856e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian }; 857e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian static void AddFailure(FailureMode failure) { 858e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian if (failure == FATAL_FAILURE) { 859e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian FAIL() << "Expected fatal failure."; 860e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } else { 861e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ADD_FAILURE() << "Expected non-fatal failure."; 862e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 863e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 864e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 865e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 866e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureTest, ExpectFatalFailure) { 867e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected fatal failure, but succeeds. 868e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 869e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE(SUCCEED(), "Expected fatal failure."); 870e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected fatal failure, but got a non-fatal failure. 871e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 872e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Expected non-fatal " 873e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "failure."); 874e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Wrong message. 875e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 876e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), "Some other fatal failure " 877e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "expected."); 878e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 879e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 880e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureTest, ExpectNonFatalFailure) { 881e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected non-fatal failure, but succeeds. 882e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 883e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE(SUCCEED(), "Expected non-fatal failure."); 884e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected non-fatal failure, but got a fatal failure. 885e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 886e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE(AddFailure(FATAL_FAILURE), "Expected fatal failure."); 887e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Wrong message. 888e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 889e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Some other non-fatal " 890e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "failure."); 891e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 892e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 893f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#if GTEST_IS_THREADSAFE 894e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 895e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianclass ExpectFailureWithThreadsTest : public ExpectFailureTest { 896e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian protected: 897e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian static void AddFailureInOtherThread(FailureMode failure) { 898f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL); 899f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan thread.Join(); 900e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 901e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian}; 902e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 903e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailure) { 904e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // We only intercept the current thread. 905e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 2 failures)\n"); 906e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE(AddFailureInOtherThread(FATAL_FAILURE), 907e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected fatal failure."); 908e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 909e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 910e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailure) { 911e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // We only intercept the current thread. 912e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 2 failures)\n"); 913e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE(AddFailureInOtherThread(NONFATAL_FAILURE), 914e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected non-fatal failure."); 915e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 916e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 917e44602ec83c65102035ce5304ae8de0cb16e9e56shiqiantypedef ExpectFailureWithThreadsTest ScopedFakeTestPartResultReporterTest; 918e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 919e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// Tests that the ScopedFakeTestPartResultReporter only catches failures from 920e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian// the current thread if it is instantiated with INTERCEPT_ONLY_CURRENT_THREAD. 921e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ScopedFakeTestPartResultReporterTest, InterceptOnlyCurrentThread) { 922e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 2 failures)\n"); 923e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian TestPartResultArray results; 924e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian { 925e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter reporter( 926e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, 927e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian &results); 928e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailureInOtherThread(FATAL_FAILURE); 929e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian AddFailureInOtherThread(NONFATAL_FAILURE); 930e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian } 931e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // The two failures should not have been intercepted. 932e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_EQ(0, results.size()) << "This shouldn't fail."; 933e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 934e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 935f6fb532f0825024feda89c863e33a51b6ff377f5zhanyong.wan#endif // GTEST_IS_THREADSAFE 936e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 937e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureTest, ExpectFatalFailureOnAllThreads) { 938e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected fatal failure, but succeeds. 939e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 940e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected fatal failure."); 941e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected fatal failure, but got a non-fatal failure. 942e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 943e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), 944e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected non-fatal failure."); 945e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Wrong message. 946e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 947e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), 948e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Some other fatal failure expected."); 949e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 950e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 951e44602ec83c65102035ce5304ae8de0cb16e9e56shiqianTEST_F(ExpectFailureTest, ExpectNonFatalFailureOnAllThreads) { 952e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected non-fatal failure, but succeeds. 953e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 954e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected non-fatal " 955e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "failure."); 956e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Expected non-fatal failure, but got a fatal failure. 957e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 958e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), 959e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Expected fatal failure."); 960e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian // Wrong message. 961e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian printf("(expecting 1 failure)\n"); 962e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), 963e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian "Some other non-fatal failure."); 964e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian} 965e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 966e44602ec83c65102035ce5304ae8de0cb16e9e56shiqian 9674b6829f0d28990dd645e16386eb226d0f10c8731shiqian// Two test environments for testing testing::AddGlobalTestEnvironment(). 9684b6829f0d28990dd645e16386eb226d0f10c8731shiqian 9694b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass FooEnvironment : public testing::Environment { 9704b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 9714b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 9724b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("%s", "FooEnvironment::SetUp() called.\n"); 9734b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 9744b6829f0d28990dd645e16386eb226d0f10c8731shiqian 9754b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 9764b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("%s", "FooEnvironment::TearDown() called.\n"); 9774b6829f0d28990dd645e16386eb226d0f10c8731shiqian FAIL() << "Expected fatal failure."; 9784b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 9794b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 9804b6829f0d28990dd645e16386eb226d0f10c8731shiqian 9814b6829f0d28990dd645e16386eb226d0f10c8731shiqianclass BarEnvironment : public testing::Environment { 9824b6829f0d28990dd645e16386eb226d0f10c8731shiqian public: 9834b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void SetUp() { 9844b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("%s", "BarEnvironment::SetUp() called.\n"); 9854b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 9864b6829f0d28990dd645e16386eb226d0f10c8731shiqian 9874b6829f0d28990dd645e16386eb226d0f10c8731shiqian virtual void TearDown() { 9884b6829f0d28990dd645e16386eb226d0f10c8731shiqian printf("%s", "BarEnvironment::TearDown() called.\n"); 9894b6829f0d28990dd645e16386eb226d0f10c8731shiqian ADD_FAILURE() << "Expected non-fatal failure."; 9904b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 9914b6829f0d28990dd645e16386eb226d0f10c8731shiqian}; 9924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 9932c2e3bb07ff5bfef9b90617c9eaa6003fb482e6fvladlosevbool GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = false; 994e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 9954b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The main function. 9964b6829f0d28990dd645e16386eb226d0f10c8731shiqian// 9974b6829f0d28990dd645e16386eb226d0f10c8731shiqian// The idea is to use Google Test to run all the tests we have defined (some 9984b6829f0d28990dd645e16386eb226d0f10c8731shiqian// of them are intended to fail), and then compare the test results 9994b6829f0d28990dd645e16386eb226d0f10c8731shiqian// with the "golden" file. 10004b6829f0d28990dd645e16386eb226d0f10c8731shiqianint main(int argc, char **argv) { 100173ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan testing::GTEST_FLAG(print_time) = false; 100273ad5a3327d38504954d33b58f27e29a7089bd96zhanyong.wan 10034b6829f0d28990dd645e16386eb226d0f10c8731shiqian // We just run the tests, knowing some of them are intended to fail. 10044b6829f0d28990dd645e16386eb226d0f10c8731shiqian // We will use a separate Python script to compare the output of 10054b6829f0d28990dd645e16386eb226d0f10c8731shiqian // this program with the golden file. 1006cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan 1007cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan // It's hard to test InitGoogleTest() directly, as it has many 1008cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan // global side effects. The following line serves as a sanity test 1009cfdfeeb3964b84f6e248b84a259aaee54cde14f3zhanyong.wan // for it. 10104b6829f0d28990dd645e16386eb226d0f10c8731shiqian testing::InitGoogleTest(&argc, argv); 1011e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan if (argc >= 2 && 101203c314931649a999b0cf5deb0a434a1009157416jgm@google.com (std::string(argv[1]) == 101303c314931649a999b0cf5deb0a434a1009157416jgm@google.com "--gtest_internal_skip_environment_and_ad_hoc_tests")) 1014e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = true; 10154b6829f0d28990dd645e16386eb226d0f10c8731shiqian 10164cd62602913a032a7aec091d4c8055ff9af95e37zhanyong.wan#if GTEST_HAS_DEATH_TEST 10174b6829f0d28990dd645e16386eb226d0f10c8731shiqian if (testing::internal::GTEST_FLAG(internal_run_death_test) != "") { 10184b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Skip the usual output capturing if we're running as the child 10194b6829f0d28990dd645e16386eb226d0f10c8731shiqian // process of an threadsafe-style death test. 1020733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# if GTEST_OS_WINDOWS 1021c7f60f1514013d57a624c3a2966709998678f24bzhanyong.wan posix::FReopen("nul:", "w", stdout); 1022733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# else 1023c7f60f1514013d57a624c3a2966709998678f24bzhanyong.wan posix::FReopen("/dev/null", "w", stdout); 1024733a54a398766289b74cf3daebe083d7115cf388zhanyong.wan# endif // GTEST_OS_WINDOWS 10254b6829f0d28990dd645e16386eb226d0f10c8731shiqian return RUN_ALL_TESTS(); 10264b6829f0d28990dd645e16386eb226d0f10c8731shiqian } 10274b6829f0d28990dd645e16386eb226d0f10c8731shiqian#endif // GTEST_HAS_DEATH_TEST 10284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1029e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan if (GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests)) 1030e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan return RUN_ALL_TESTS(); 1031e0ca02f7b4175a1c21f7416039f9f06c028b544azhanyong.wan 10324b6829f0d28990dd645e16386eb226d0f10c8731shiqian // Registers two global test environments. 10334b6829f0d28990dd645e16386eb226d0f10c8731shiqian // The golden file verifies that they are set up in the order they 10344b6829f0d28990dd645e16386eb226d0f10c8731shiqian // are registered, and torn down in the reverse order. 10354b6829f0d28990dd645e16386eb226d0f10c8731shiqian testing::AddGlobalTestEnvironment(new FooEnvironment); 10364b6829f0d28990dd645e16386eb226d0f10c8731shiqian testing::AddGlobalTestEnvironment(new BarEnvironment); 10374b6829f0d28990dd645e16386eb226d0f10c8731shiqian 10384b6829f0d28990dd645e16386eb226d0f10c8731shiqian return RunAllTests(); 10394b6829f0d28990dd645e16386eb226d0f10c8731shiqian} 1040