1 // Copyright 2005, Google Inc. 2 // All rights reserved. 3 // 4 // Redistribution and use in source and binary forms, with or without 5 // modification, are permitted provided that the following conditions are 6 // met: 7 // 8 // * Redistributions of source code must retain the above copyright 9 // notice, this list of conditions and the following disclaimer. 10 // * Redistributions in binary form must reproduce the above 11 // copyright notice, this list of conditions and the following disclaimer 12 // in the documentation and/or other materials provided with the 13 // distribution. 14 // * Neither the name of Google Inc. nor the names of its 15 // contributors may be used to endorse or promote products derived from 16 // this software without specific prior written permission. 17 // 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // 30 // A unit test for Google Test itself. This verifies that the basic 31 // constructs of Google Test work. 32 // 33 // Author: wan (at) google.com (Zhanyong Wan) 34 35 #include "gtest/gtest-spi.h" 36 #include "gtest/gtest.h" 37 38 // Indicates that this translation unit is part of Google Test's 39 // implementation. It must come before gtest-internal-inl.h is 40 // included, or there will be a compiler error. This trick is to 41 // prevent a user from accidentally including gtest-internal-inl.h in 42 // his code. 43 #define GTEST_IMPLEMENTATION_ 1 44 #include "src/gtest-internal-inl.h" 45 #undef GTEST_IMPLEMENTATION_ 46 47 #include <stdlib.h> 48 49 #if GTEST_IS_THREADSAFE 50 using testing::ScopedFakeTestPartResultReporter; 51 using testing::TestPartResultArray; 52 53 using testing::internal::Notification; 54 using testing::internal::ThreadWithParam; 55 #endif 56 57 namespace posix = ::testing::internal::posix; 58 using testing::internal::String; 59 using testing::internal::scoped_ptr; 60 61 // Tests catching fatal failures. 62 63 // A subroutine used by the following test. 64 void TestEq1(int x) { 65 ASSERT_EQ(1, x); 66 } 67 68 // This function calls a test subroutine, catches the fatal failure it 69 // generates, and then returns early. 70 void TryTestSubroutine() { 71 // Calls a subrountine that yields a fatal failure. 72 TestEq1(2); 73 74 // Catches the fatal failure and aborts the test. 75 // 76 // The testing::Test:: prefix is necessary when calling 77 // HasFatalFailure() outside of a TEST, TEST_F, or test fixture. 78 if (testing::Test::HasFatalFailure()) return; 79 80 // If we get here, something is wrong. 81 FAIL() << "This should never be reached."; 82 } 83 84 TEST(PassingTest, PassingTest1) { 85 } 86 87 TEST(PassingTest, PassingTest2) { 88 } 89 90 // Tests that parameters of failing parameterized tests are printed in the 91 // failing test summary. 92 class FailingParamTest : public testing::TestWithParam<int> {}; 93 94 TEST_P(FailingParamTest, Fails) { 95 EXPECT_EQ(1, GetParam()); 96 } 97 98 // This generates a test which will fail. Google Test is expected to print 99 // its parameter when it outputs the list of all failed tests. 100 INSTANTIATE_TEST_CASE_P(PrintingFailingParams, 101 FailingParamTest, 102 testing::Values(2)); 103 104 // Tests catching a fatal failure in a subroutine. 105 TEST(FatalFailureTest, FatalFailureInSubroutine) { 106 printf("(expecting a failure that x should be 1)\n"); 107 108 TryTestSubroutine(); 109 } 110 111 // Tests catching a fatal failure in a nested subroutine. 112 TEST(FatalFailureTest, FatalFailureInNestedSubroutine) { 113 printf("(expecting a failure that x should be 1)\n"); 114 115 // Calls a subrountine that yields a fatal failure. 116 TryTestSubroutine(); 117 118 // Catches the fatal failure and aborts the test. 119 // 120 // When calling HasFatalFailure() inside a TEST, TEST_F, or test 121 // fixture, the testing::Test:: prefix is not needed. 122 if (HasFatalFailure()) return; 123 124 // If we get here, something is wrong. 125 FAIL() << "This should never be reached."; 126 } 127 128 // Tests HasFatalFailure() after a failed EXPECT check. 129 TEST(FatalFailureTest, NonfatalFailureInSubroutine) { 130 printf("(expecting a failure on false)\n"); 131 EXPECT_TRUE(false); // Generates a nonfatal failure 132 ASSERT_FALSE(HasFatalFailure()); // This should succeed. 133 } 134 135 // Tests interleaving user logging and Google Test assertions. 136 TEST(LoggingTest, InterleavingLoggingAndAssertions) { 137 static const int a[4] = { 138 3, 9, 2, 6 139 }; 140 141 printf("(expecting 2 failures on (3) >= (a[i]))\n"); 142 for (int i = 0; i < static_cast<int>(sizeof(a)/sizeof(*a)); i++) { 143 printf("i == %d\n", i); 144 EXPECT_GE(3, a[i]); 145 } 146 } 147 148 // Tests the SCOPED_TRACE macro. 149 150 // A helper function for testing SCOPED_TRACE. 151 void SubWithoutTrace(int n) { 152 EXPECT_EQ(1, n); 153 ASSERT_EQ(2, n); 154 } 155 156 // Another helper function for testing SCOPED_TRACE. 157 void SubWithTrace(int n) { 158 SCOPED_TRACE(testing::Message() << "n = " << n); 159 160 SubWithoutTrace(n); 161 } 162 163 // Tests that SCOPED_TRACE() obeys lexical scopes. 164 TEST(SCOPED_TRACETest, ObeysScopes) { 165 printf("(expected to fail)\n"); 166 167 // There should be no trace before SCOPED_TRACE() is invoked. 168 ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; 169 170 { 171 SCOPED_TRACE("Expected trace"); 172 // After SCOPED_TRACE(), a failure in the current scope should contain 173 // the trace. 174 ADD_FAILURE() << "This failure is expected, and should have a trace."; 175 } 176 177 // Once the control leaves the scope of the SCOPED_TRACE(), there 178 // should be no trace again. 179 ADD_FAILURE() << "This failure is expected, and shouldn't have a trace."; 180 } 181 182 // Tests that SCOPED_TRACE works inside a loop. 183 TEST(SCOPED_TRACETest, WorksInLoop) { 184 printf("(expected to fail)\n"); 185 186 for (int i = 1; i <= 2; i++) { 187 SCOPED_TRACE(testing::Message() << "i = " << i); 188 189 SubWithoutTrace(i); 190 } 191 } 192 193 // Tests that SCOPED_TRACE works in a subroutine. 194 TEST(SCOPED_TRACETest, WorksInSubroutine) { 195 printf("(expected to fail)\n"); 196 197 SubWithTrace(1); 198 SubWithTrace(2); 199 } 200 201 // Tests that SCOPED_TRACE can be nested. 202 TEST(SCOPED_TRACETest, CanBeNested) { 203 printf("(expected to fail)\n"); 204 205 SCOPED_TRACE(""); // A trace without a message. 206 207 SubWithTrace(2); 208 } 209 210 // Tests that multiple SCOPED_TRACEs can be used in the same scope. 211 TEST(SCOPED_TRACETest, CanBeRepeated) { 212 printf("(expected to fail)\n"); 213 214 SCOPED_TRACE("A"); 215 ADD_FAILURE() 216 << "This failure is expected, and should contain trace point A."; 217 218 SCOPED_TRACE("B"); 219 ADD_FAILURE() 220 << "This failure is expected, and should contain trace point A and B."; 221 222 { 223 SCOPED_TRACE("C"); 224 ADD_FAILURE() << "This failure is expected, and should contain " 225 << "trace point A, B, and C."; 226 } 227 228 SCOPED_TRACE("D"); 229 ADD_FAILURE() << "This failure is expected, and should contain " 230 << "trace point A, B, and D."; 231 } 232 233 #if GTEST_IS_THREADSAFE 234 // Tests that SCOPED_TRACE()s can be used concurrently from multiple 235 // threads. Namely, an assertion should be affected by 236 // SCOPED_TRACE()s in its own thread only. 237 238 // Here's the sequence of actions that happen in the test: 239 // 240 // Thread A (main) | Thread B (spawned) 241 // ===============================|================================ 242 // spawns thread B | 243 // -------------------------------+-------------------------------- 244 // waits for n1 | SCOPED_TRACE("Trace B"); 245 // | generates failure #1 246 // | notifies n1 247 // -------------------------------+-------------------------------- 248 // SCOPED_TRACE("Trace A"); | waits for n2 249 // generates failure #2 | 250 // notifies n2 | 251 // -------------------------------|-------------------------------- 252 // waits for n3 | generates failure #3 253 // | trace B dies 254 // | generates failure #4 255 // | notifies n3 256 // -------------------------------|-------------------------------- 257 // generates failure #5 | finishes 258 // trace A dies | 259 // generates failure #6 | 260 // -------------------------------|-------------------------------- 261 // waits for thread B to finish | 262 263 struct CheckPoints { 264 Notification n1; 265 Notification n2; 266 Notification n3; 267 }; 268 269 static void ThreadWithScopedTrace(CheckPoints* check_points) { 270 { 271 SCOPED_TRACE("Trace B"); 272 ADD_FAILURE() 273 << "Expected failure #1 (in thread B, only trace B alive)."; 274 check_points->n1.Notify(); 275 check_points->n2.WaitForNotification(); 276 277 ADD_FAILURE() 278 << "Expected failure #3 (in thread B, trace A & B both alive)."; 279 } // Trace B dies here. 280 ADD_FAILURE() 281 << "Expected failure #4 (in thread B, only trace A alive)."; 282 check_points->n3.Notify(); 283 } 284 285 TEST(SCOPED_TRACETest, WorksConcurrently) { 286 printf("(expecting 6 failures)\n"); 287 288 CheckPoints check_points; 289 ThreadWithParam<CheckPoints*> thread(&ThreadWithScopedTrace, 290 &check_points, 291 NULL); 292 check_points.n1.WaitForNotification(); 293 294 { 295 SCOPED_TRACE("Trace A"); 296 ADD_FAILURE() 297 << "Expected failure #2 (in thread A, trace A & B both alive)."; 298 check_points.n2.Notify(); 299 check_points.n3.WaitForNotification(); 300 301 ADD_FAILURE() 302 << "Expected failure #5 (in thread A, only trace A alive)."; 303 } // Trace A dies here. 304 ADD_FAILURE() 305 << "Expected failure #6 (in thread A, no trace alive)."; 306 thread.Join(); 307 } 308 #endif // GTEST_IS_THREADSAFE 309 310 TEST(DisabledTestsWarningTest, 311 DISABLED_AlsoRunDisabledTestsFlagSuppressesWarning) { 312 // This test body is intentionally empty. Its sole purpose is for 313 // verifying that the --gtest_also_run_disabled_tests flag 314 // suppresses the "YOU HAVE 12 DISABLED TESTS" warning at the end of 315 // the test output. 316 } 317 318 // Tests using assertions outside of TEST and TEST_F. 319 // 320 // This function creates two failures intentionally. 321 void AdHocTest() { 322 printf("The non-test part of the code is expected to have 2 failures.\n\n"); 323 EXPECT_TRUE(false); 324 EXPECT_EQ(2, 3); 325 } 326 327 // Runs all TESTs, all TEST_Fs, and the ad hoc test. 328 int RunAllTests() { 329 AdHocTest(); 330 return RUN_ALL_TESTS(); 331 } 332 333 // Tests non-fatal failures in the fixture constructor. 334 class NonFatalFailureInFixtureConstructorTest : public testing::Test { 335 protected: 336 NonFatalFailureInFixtureConstructorTest() { 337 printf("(expecting 5 failures)\n"); 338 ADD_FAILURE() << "Expected failure #1, in the test fixture c'tor."; 339 } 340 341 ~NonFatalFailureInFixtureConstructorTest() { 342 ADD_FAILURE() << "Expected failure #5, in the test fixture d'tor."; 343 } 344 345 virtual void SetUp() { 346 ADD_FAILURE() << "Expected failure #2, in SetUp()."; 347 } 348 349 virtual void TearDown() { 350 ADD_FAILURE() << "Expected failure #4, in TearDown."; 351 } 352 }; 353 354 TEST_F(NonFatalFailureInFixtureConstructorTest, FailureInConstructor) { 355 ADD_FAILURE() << "Expected failure #3, in the test body."; 356 } 357 358 // Tests fatal failures in the fixture constructor. 359 class FatalFailureInFixtureConstructorTest : public testing::Test { 360 protected: 361 FatalFailureInFixtureConstructorTest() { 362 printf("(expecting 2 failures)\n"); 363 Init(); 364 } 365 366 ~FatalFailureInFixtureConstructorTest() { 367 ADD_FAILURE() << "Expected failure #2, in the test fixture d'tor."; 368 } 369 370 virtual void SetUp() { 371 ADD_FAILURE() << "UNEXPECTED failure in SetUp(). " 372 << "We should never get here, as the test fixture c'tor " 373 << "had a fatal failure."; 374 } 375 376 virtual void TearDown() { 377 ADD_FAILURE() << "UNEXPECTED failure in TearDown(). " 378 << "We should never get here, as the test fixture c'tor " 379 << "had a fatal failure."; 380 } 381 private: 382 void Init() { 383 FAIL() << "Expected failure #1, in the test fixture c'tor."; 384 } 385 }; 386 387 TEST_F(FatalFailureInFixtureConstructorTest, FailureInConstructor) { 388 ADD_FAILURE() << "UNEXPECTED failure in the test body. " 389 << "We should never get here, as the test fixture c'tor " 390 << "had a fatal failure."; 391 } 392 393 // Tests non-fatal failures in SetUp(). 394 class NonFatalFailureInSetUpTest : public testing::Test { 395 protected: 396 virtual ~NonFatalFailureInSetUpTest() { 397 Deinit(); 398 } 399 400 virtual void SetUp() { 401 printf("(expecting 4 failures)\n"); 402 ADD_FAILURE() << "Expected failure #1, in SetUp()."; 403 } 404 405 virtual void TearDown() { 406 FAIL() << "Expected failure #3, in TearDown()."; 407 } 408 private: 409 void Deinit() { 410 FAIL() << "Expected failure #4, in the test fixture d'tor."; 411 } 412 }; 413 414 TEST_F(NonFatalFailureInSetUpTest, FailureInSetUp) { 415 FAIL() << "Expected failure #2, in the test function."; 416 } 417 418 // Tests fatal failures in SetUp(). 419 class FatalFailureInSetUpTest : public testing::Test { 420 protected: 421 virtual ~FatalFailureInSetUpTest() { 422 Deinit(); 423 } 424 425 virtual void SetUp() { 426 printf("(expecting 3 failures)\n"); 427 FAIL() << "Expected failure #1, in SetUp()."; 428 } 429 430 virtual void TearDown() { 431 FAIL() << "Expected failure #2, in TearDown()."; 432 } 433 private: 434 void Deinit() { 435 FAIL() << "Expected failure #3, in the test fixture d'tor."; 436 } 437 }; 438 439 TEST_F(FatalFailureInSetUpTest, FailureInSetUp) { 440 FAIL() << "UNEXPECTED failure in the test function. " 441 << "We should never get here, as SetUp() failed."; 442 } 443 444 TEST(AddFailureAtTest, MessageContainsSpecifiedFileAndLineNumber) { 445 ADD_FAILURE_AT("foo.cc", 42) << "Expected failure in foo.cc"; 446 } 447 448 #if GTEST_IS_THREADSAFE 449 450 // A unary function that may die. 451 void DieIf(bool should_die) { 452 GTEST_CHECK_(!should_die) << " - death inside DieIf()."; 453 } 454 455 // Tests running death tests in a multi-threaded context. 456 457 // Used for coordination between the main and the spawn thread. 458 struct SpawnThreadNotifications { 459 SpawnThreadNotifications() {} 460 461 Notification spawn_thread_started; 462 Notification spawn_thread_ok_to_terminate; 463 464 private: 465 GTEST_DISALLOW_COPY_AND_ASSIGN_(SpawnThreadNotifications); 466 }; 467 468 // The function to be executed in the thread spawn by the 469 // MultipleThreads test (below). 470 static void ThreadRoutine(SpawnThreadNotifications* notifications) { 471 // Signals the main thread that this thread has started. 472 notifications->spawn_thread_started.Notify(); 473 474 // Waits for permission to finish from the main thread. 475 notifications->spawn_thread_ok_to_terminate.WaitForNotification(); 476 } 477 478 // This is a death-test test, but it's not named with a DeathTest 479 // suffix. It starts threads which might interfere with later 480 // death tests, so it must run after all other death tests. 481 class DeathTestAndMultiThreadsTest : public testing::Test { 482 protected: 483 // Starts a thread and waits for it to begin. 484 virtual void SetUp() { 485 thread_.reset(new ThreadWithParam<SpawnThreadNotifications*>( 486 &ThreadRoutine, ¬ifications_, NULL)); 487 notifications_.spawn_thread_started.WaitForNotification(); 488 } 489 // Tells the thread to finish, and reaps it. 490 // Depending on the version of the thread library in use, 491 // a manager thread might still be left running that will interfere 492 // with later death tests. This is unfortunate, but this class 493 // cleans up after itself as best it can. 494 virtual void TearDown() { 495 notifications_.spawn_thread_ok_to_terminate.Notify(); 496 } 497 498 private: 499 SpawnThreadNotifications notifications_; 500 scoped_ptr<ThreadWithParam<SpawnThreadNotifications*> > thread_; 501 }; 502 503 #endif // GTEST_IS_THREADSAFE 504 505 // The MixedUpTestCaseTest test case verifies that Google Test will fail a 506 // test if it uses a different fixture class than what other tests in 507 // the same test case use. It deliberately contains two fixture 508 // classes with the same name but defined in different namespaces. 509 510 // The MixedUpTestCaseWithSameTestNameTest test case verifies that 511 // when the user defines two tests with the same test case name AND 512 // same test name (but in different namespaces), the second test will 513 // fail. 514 515 namespace foo { 516 517 class MixedUpTestCaseTest : public testing::Test { 518 }; 519 520 TEST_F(MixedUpTestCaseTest, FirstTestFromNamespaceFoo) {} 521 TEST_F(MixedUpTestCaseTest, SecondTestFromNamespaceFoo) {} 522 523 class MixedUpTestCaseWithSameTestNameTest : public testing::Test { 524 }; 525 526 TEST_F(MixedUpTestCaseWithSameTestNameTest, 527 TheSecondTestWithThisNameShouldFail) {} 528 529 } // namespace foo 530 531 namespace bar { 532 533 class MixedUpTestCaseTest : public testing::Test { 534 }; 535 536 // The following two tests are expected to fail. We rely on the 537 // golden file to check that Google Test generates the right error message. 538 TEST_F(MixedUpTestCaseTest, ThisShouldFail) {} 539 TEST_F(MixedUpTestCaseTest, ThisShouldFailToo) {} 540 541 class MixedUpTestCaseWithSameTestNameTest : public testing::Test { 542 }; 543 544 // Expected to fail. We rely on the golden file to check that Google Test 545 // generates the right error message. 546 TEST_F(MixedUpTestCaseWithSameTestNameTest, 547 TheSecondTestWithThisNameShouldFail) {} 548 549 } // namespace bar 550 551 // The following two test cases verify that Google Test catches the user 552 // error of mixing TEST and TEST_F in the same test case. The first 553 // test case checks the scenario where TEST_F appears before TEST, and 554 // the second one checks where TEST appears before TEST_F. 555 556 class TEST_F_before_TEST_in_same_test_case : public testing::Test { 557 }; 558 559 TEST_F(TEST_F_before_TEST_in_same_test_case, DefinedUsingTEST_F) {} 560 561 // Expected to fail. We rely on the golden file to check that Google Test 562 // generates the right error message. 563 TEST(TEST_F_before_TEST_in_same_test_case, DefinedUsingTESTAndShouldFail) {} 564 565 class TEST_before_TEST_F_in_same_test_case : public testing::Test { 566 }; 567 568 TEST(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST) {} 569 570 // Expected to fail. We rely on the golden file to check that Google Test 571 // generates the right error message. 572 TEST_F(TEST_before_TEST_F_in_same_test_case, DefinedUsingTEST_FAndShouldFail) { 573 } 574 575 // Used for testing EXPECT_NONFATAL_FAILURE() and EXPECT_FATAL_FAILURE(). 576 int global_integer = 0; 577 578 // Tests that EXPECT_NONFATAL_FAILURE() can reference global variables. 579 TEST(ExpectNonfatalFailureTest, CanReferenceGlobalVariables) { 580 global_integer = 0; 581 EXPECT_NONFATAL_FAILURE({ 582 EXPECT_EQ(1, global_integer) << "Expected non-fatal failure."; 583 }, "Expected non-fatal failure."); 584 } 585 586 // Tests that EXPECT_NONFATAL_FAILURE() can reference local variables 587 // (static or not). 588 TEST(ExpectNonfatalFailureTest, CanReferenceLocalVariables) { 589 int m = 0; 590 static int n; 591 n = 1; 592 EXPECT_NONFATAL_FAILURE({ 593 EXPECT_EQ(m, n) << "Expected non-fatal failure."; 594 }, "Expected non-fatal failure."); 595 } 596 597 // Tests that EXPECT_NONFATAL_FAILURE() succeeds when there is exactly 598 // one non-fatal failure and no fatal failure. 599 TEST(ExpectNonfatalFailureTest, SucceedsWhenThereIsOneNonfatalFailure) { 600 EXPECT_NONFATAL_FAILURE({ 601 ADD_FAILURE() << "Expected non-fatal failure."; 602 }, "Expected non-fatal failure."); 603 } 604 605 // Tests that EXPECT_NONFATAL_FAILURE() fails when there is no 606 // non-fatal failure. 607 TEST(ExpectNonfatalFailureTest, FailsWhenThereIsNoNonfatalFailure) { 608 printf("(expecting a failure)\n"); 609 EXPECT_NONFATAL_FAILURE({ 610 }, ""); 611 } 612 613 // Tests that EXPECT_NONFATAL_FAILURE() fails when there are two 614 // non-fatal failures. 615 TEST(ExpectNonfatalFailureTest, FailsWhenThereAreTwoNonfatalFailures) { 616 printf("(expecting a failure)\n"); 617 EXPECT_NONFATAL_FAILURE({ 618 ADD_FAILURE() << "Expected non-fatal failure 1."; 619 ADD_FAILURE() << "Expected non-fatal failure 2."; 620 }, ""); 621 } 622 623 // Tests that EXPECT_NONFATAL_FAILURE() fails when there is one fatal 624 // failure. 625 TEST(ExpectNonfatalFailureTest, FailsWhenThereIsOneFatalFailure) { 626 printf("(expecting a failure)\n"); 627 EXPECT_NONFATAL_FAILURE({ 628 FAIL() << "Expected fatal failure."; 629 }, ""); 630 } 631 632 // Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being 633 // tested returns. 634 TEST(ExpectNonfatalFailureTest, FailsWhenStatementReturns) { 635 printf("(expecting a failure)\n"); 636 EXPECT_NONFATAL_FAILURE({ 637 return; 638 }, ""); 639 } 640 641 #if GTEST_HAS_EXCEPTIONS 642 643 // Tests that EXPECT_NONFATAL_FAILURE() fails when the statement being 644 // tested throws. 645 TEST(ExpectNonfatalFailureTest, FailsWhenStatementThrows) { 646 printf("(expecting a failure)\n"); 647 try { 648 EXPECT_NONFATAL_FAILURE({ 649 throw 0; 650 }, ""); 651 } catch(int) { // NOLINT 652 } 653 } 654 655 #endif // GTEST_HAS_EXCEPTIONS 656 657 // Tests that EXPECT_FATAL_FAILURE() can reference global variables. 658 TEST(ExpectFatalFailureTest, CanReferenceGlobalVariables) { 659 global_integer = 0; 660 EXPECT_FATAL_FAILURE({ 661 ASSERT_EQ(1, global_integer) << "Expected fatal failure."; 662 }, "Expected fatal failure."); 663 } 664 665 // Tests that EXPECT_FATAL_FAILURE() can reference local static 666 // variables. 667 TEST(ExpectFatalFailureTest, CanReferenceLocalStaticVariables) { 668 static int n; 669 n = 1; 670 EXPECT_FATAL_FAILURE({ 671 ASSERT_EQ(0, n) << "Expected fatal failure."; 672 }, "Expected fatal failure."); 673 } 674 675 // Tests that EXPECT_FATAL_FAILURE() succeeds when there is exactly 676 // one fatal failure and no non-fatal failure. 677 TEST(ExpectFatalFailureTest, SucceedsWhenThereIsOneFatalFailure) { 678 EXPECT_FATAL_FAILURE({ 679 FAIL() << "Expected fatal failure."; 680 }, "Expected fatal failure."); 681 } 682 683 // Tests that EXPECT_FATAL_FAILURE() fails when there is no fatal 684 // failure. 685 TEST(ExpectFatalFailureTest, FailsWhenThereIsNoFatalFailure) { 686 printf("(expecting a failure)\n"); 687 EXPECT_FATAL_FAILURE({ 688 }, ""); 689 } 690 691 // A helper for generating a fatal failure. 692 void FatalFailure() { 693 FAIL() << "Expected fatal failure."; 694 } 695 696 // Tests that EXPECT_FATAL_FAILURE() fails when there are two 697 // fatal failures. 698 TEST(ExpectFatalFailureTest, FailsWhenThereAreTwoFatalFailures) { 699 printf("(expecting a failure)\n"); 700 EXPECT_FATAL_FAILURE({ 701 FatalFailure(); 702 FatalFailure(); 703 }, ""); 704 } 705 706 // Tests that EXPECT_FATAL_FAILURE() fails when there is one non-fatal 707 // failure. 708 TEST(ExpectFatalFailureTest, FailsWhenThereIsOneNonfatalFailure) { 709 printf("(expecting a failure)\n"); 710 EXPECT_FATAL_FAILURE({ 711 ADD_FAILURE() << "Expected non-fatal failure."; 712 }, ""); 713 } 714 715 // Tests that EXPECT_FATAL_FAILURE() fails when the statement being 716 // tested returns. 717 TEST(ExpectFatalFailureTest, FailsWhenStatementReturns) { 718 printf("(expecting a failure)\n"); 719 EXPECT_FATAL_FAILURE({ 720 return; 721 }, ""); 722 } 723 724 #if GTEST_HAS_EXCEPTIONS 725 726 // Tests that EXPECT_FATAL_FAILURE() fails when the statement being 727 // tested throws. 728 TEST(ExpectFatalFailureTest, FailsWhenStatementThrows) { 729 printf("(expecting a failure)\n"); 730 try { 731 EXPECT_FATAL_FAILURE({ 732 throw 0; 733 }, ""); 734 } catch(int) { // NOLINT 735 } 736 } 737 738 #endif // GTEST_HAS_EXCEPTIONS 739 740 // This #ifdef block tests the output of typed tests. 741 #if GTEST_HAS_TYPED_TEST 742 743 template <typename T> 744 class TypedTest : public testing::Test { 745 }; 746 747 TYPED_TEST_CASE(TypedTest, testing::Types<int>); 748 749 TYPED_TEST(TypedTest, Success) { 750 EXPECT_EQ(0, TypeParam()); 751 } 752 753 TYPED_TEST(TypedTest, Failure) { 754 EXPECT_EQ(1, TypeParam()) << "Expected failure"; 755 } 756 757 #endif // GTEST_HAS_TYPED_TEST 758 759 // This #ifdef block tests the output of type-parameterized tests. 760 #if GTEST_HAS_TYPED_TEST_P 761 762 template <typename T> 763 class TypedTestP : public testing::Test { 764 }; 765 766 TYPED_TEST_CASE_P(TypedTestP); 767 768 TYPED_TEST_P(TypedTestP, Success) { 769 EXPECT_EQ(0U, TypeParam()); 770 } 771 772 TYPED_TEST_P(TypedTestP, Failure) { 773 EXPECT_EQ(1U, TypeParam()) << "Expected failure"; 774 } 775 776 REGISTER_TYPED_TEST_CASE_P(TypedTestP, Success, Failure); 777 778 typedef testing::Types<unsigned char, unsigned int> UnsignedTypes; 779 INSTANTIATE_TYPED_TEST_CASE_P(Unsigned, TypedTestP, UnsignedTypes); 780 781 #endif // GTEST_HAS_TYPED_TEST_P 782 783 #if GTEST_HAS_DEATH_TEST 784 785 // We rely on the golden file to verify that tests whose test case 786 // name ends with DeathTest are run first. 787 788 TEST(ADeathTest, ShouldRunFirst) { 789 } 790 791 # if GTEST_HAS_TYPED_TEST 792 793 // We rely on the golden file to verify that typed tests whose test 794 // case name ends with DeathTest are run first. 795 796 template <typename T> 797 class ATypedDeathTest : public testing::Test { 798 }; 799 800 typedef testing::Types<int, double> NumericTypes; 801 TYPED_TEST_CASE(ATypedDeathTest, NumericTypes); 802 803 TYPED_TEST(ATypedDeathTest, ShouldRunFirst) { 804 } 805 806 # endif // GTEST_HAS_TYPED_TEST 807 808 # if GTEST_HAS_TYPED_TEST_P 809 810 811 // We rely on the golden file to verify that type-parameterized tests 812 // whose test case name ends with DeathTest are run first. 813 814 template <typename T> 815 class ATypeParamDeathTest : public testing::Test { 816 }; 817 818 TYPED_TEST_CASE_P(ATypeParamDeathTest); 819 820 TYPED_TEST_P(ATypeParamDeathTest, ShouldRunFirst) { 821 } 822 823 REGISTER_TYPED_TEST_CASE_P(ATypeParamDeathTest, ShouldRunFirst); 824 825 INSTANTIATE_TYPED_TEST_CASE_P(My, ATypeParamDeathTest, NumericTypes); 826 827 # endif // GTEST_HAS_TYPED_TEST_P 828 829 #endif // GTEST_HAS_DEATH_TEST 830 831 // Tests various failure conditions of 832 // EXPECT_{,NON}FATAL_FAILURE{,_ON_ALL_THREADS}. 833 class ExpectFailureTest : public testing::Test { 834 public: // Must be public and not protected due to a bug in g++ 3.4.2. 835 enum FailureMode { 836 FATAL_FAILURE, 837 NONFATAL_FAILURE 838 }; 839 static void AddFailure(FailureMode failure) { 840 if (failure == FATAL_FAILURE) { 841 FAIL() << "Expected fatal failure."; 842 } else { 843 ADD_FAILURE() << "Expected non-fatal failure."; 844 } 845 } 846 }; 847 848 TEST_F(ExpectFailureTest, ExpectFatalFailure) { 849 // Expected fatal failure, but succeeds. 850 printf("(expecting 1 failure)\n"); 851 EXPECT_FATAL_FAILURE(SUCCEED(), "Expected fatal failure."); 852 // Expected fatal failure, but got a non-fatal failure. 853 printf("(expecting 1 failure)\n"); 854 EXPECT_FATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Expected non-fatal " 855 "failure."); 856 // Wrong message. 857 printf("(expecting 1 failure)\n"); 858 EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), "Some other fatal failure " 859 "expected."); 860 } 861 862 TEST_F(ExpectFailureTest, ExpectNonFatalFailure) { 863 // Expected non-fatal failure, but succeeds. 864 printf("(expecting 1 failure)\n"); 865 EXPECT_NONFATAL_FAILURE(SUCCEED(), "Expected non-fatal failure."); 866 // Expected non-fatal failure, but got a fatal failure. 867 printf("(expecting 1 failure)\n"); 868 EXPECT_NONFATAL_FAILURE(AddFailure(FATAL_FAILURE), "Expected fatal failure."); 869 // Wrong message. 870 printf("(expecting 1 failure)\n"); 871 EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE), "Some other non-fatal " 872 "failure."); 873 } 874 875 #if GTEST_IS_THREADSAFE 876 877 class ExpectFailureWithThreadsTest : public ExpectFailureTest { 878 protected: 879 static void AddFailureInOtherThread(FailureMode failure) { 880 ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL); 881 thread.Join(); 882 } 883 }; 884 885 TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailure) { 886 // We only intercept the current thread. 887 printf("(expecting 2 failures)\n"); 888 EXPECT_FATAL_FAILURE(AddFailureInOtherThread(FATAL_FAILURE), 889 "Expected fatal failure."); 890 } 891 892 TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailure) { 893 // We only intercept the current thread. 894 printf("(expecting 2 failures)\n"); 895 EXPECT_NONFATAL_FAILURE(AddFailureInOtherThread(NONFATAL_FAILURE), 896 "Expected non-fatal failure."); 897 } 898 899 typedef ExpectFailureWithThreadsTest ScopedFakeTestPartResultReporterTest; 900 901 // Tests that the ScopedFakeTestPartResultReporter only catches failures from 902 // the current thread if it is instantiated with INTERCEPT_ONLY_CURRENT_THREAD. 903 TEST_F(ScopedFakeTestPartResultReporterTest, InterceptOnlyCurrentThread) { 904 printf("(expecting 2 failures)\n"); 905 TestPartResultArray results; 906 { 907 ScopedFakeTestPartResultReporter reporter( 908 ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD, 909 &results); 910 AddFailureInOtherThread(FATAL_FAILURE); 911 AddFailureInOtherThread(NONFATAL_FAILURE); 912 } 913 // The two failures should not have been intercepted. 914 EXPECT_EQ(0, results.size()) << "This shouldn't fail."; 915 } 916 917 #endif // GTEST_IS_THREADSAFE 918 919 TEST_F(ExpectFailureTest, ExpectFatalFailureOnAllThreads) { 920 // Expected fatal failure, but succeeds. 921 printf("(expecting 1 failure)\n"); 922 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected fatal failure."); 923 // Expected fatal failure, but got a non-fatal failure. 924 printf("(expecting 1 failure)\n"); 925 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), 926 "Expected non-fatal failure."); 927 // Wrong message. 928 printf("(expecting 1 failure)\n"); 929 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), 930 "Some other fatal failure expected."); 931 } 932 933 TEST_F(ExpectFailureTest, ExpectNonFatalFailureOnAllThreads) { 934 // Expected non-fatal failure, but succeeds. 935 printf("(expecting 1 failure)\n"); 936 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(SUCCEED(), "Expected non-fatal " 937 "failure."); 938 // Expected non-fatal failure, but got a fatal failure. 939 printf("(expecting 1 failure)\n"); 940 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE), 941 "Expected fatal failure."); 942 // Wrong message. 943 printf("(expecting 1 failure)\n"); 944 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE), 945 "Some other non-fatal failure."); 946 } 947 948 949 // Two test environments for testing testing::AddGlobalTestEnvironment(). 950 951 class FooEnvironment : public testing::Environment { 952 public: 953 virtual void SetUp() { 954 printf("%s", "FooEnvironment::SetUp() called.\n"); 955 } 956 957 virtual void TearDown() { 958 printf("%s", "FooEnvironment::TearDown() called.\n"); 959 FAIL() << "Expected fatal failure."; 960 } 961 }; 962 963 class BarEnvironment : public testing::Environment { 964 public: 965 virtual void SetUp() { 966 printf("%s", "BarEnvironment::SetUp() called.\n"); 967 } 968 969 virtual void TearDown() { 970 printf("%s", "BarEnvironment::TearDown() called.\n"); 971 ADD_FAILURE() << "Expected non-fatal failure."; 972 } 973 }; 974 975 bool GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = false; 976 977 // The main function. 978 // 979 // The idea is to use Google Test to run all the tests we have defined (some 980 // of them are intended to fail), and then compare the test results 981 // with the "golden" file. 982 int main(int argc, char **argv) { 983 testing::GTEST_FLAG(print_time) = false; 984 985 // We just run the tests, knowing some of them are intended to fail. 986 // We will use a separate Python script to compare the output of 987 // this program with the golden file. 988 989 // It's hard to test InitGoogleTest() directly, as it has many 990 // global side effects. The following line serves as a sanity test 991 // for it. 992 testing::InitGoogleTest(&argc, argv); 993 if (argc >= 2 && 994 String(argv[1]) == "--gtest_internal_skip_environment_and_ad_hoc_tests") 995 GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests) = true; 996 997 #if GTEST_HAS_DEATH_TEST 998 if (testing::internal::GTEST_FLAG(internal_run_death_test) != "") { 999 // Skip the usual output capturing if we're running as the child 1000 // process of an threadsafe-style death test. 1001 # if GTEST_OS_WINDOWS 1002 posix::FReopen("nul:", "w", stdout); 1003 # else 1004 posix::FReopen("/dev/null", "w", stdout); 1005 # endif // GTEST_OS_WINDOWS 1006 return RUN_ALL_TESTS(); 1007 } 1008 #endif // GTEST_HAS_DEATH_TEST 1009 1010 if (GTEST_FLAG(internal_skip_environment_and_ad_hoc_tests)) 1011 return RUN_ALL_TESTS(); 1012 1013 // Registers two global test environments. 1014 // The golden file verifies that they are set up in the order they 1015 // are registered, and torn down in the reverse order. 1016 testing::AddGlobalTestEnvironment(new FooEnvironment); 1017 testing::AddGlobalTestEnvironment(new BarEnvironment); 1018 1019 return RunAllTests(); 1020 } 1021