OpenCores
URL https://opencores.org/ocsvn/s80186/s80186/trunk

Subversion Repositories s80186

[/] [s80186/] [trunk/] [vendor/] [googletest/] [googletest/] [test/] [gtest_output_test_.cc] - Blame information for rev 2

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.