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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:12:01