github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/test/gtest-death-test_test.cc (about)

     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  // Author: wan@google.com (Zhanyong Wan)
    31  //
    32  // Tests for death tests.
    33  
    34  #include "gtest/gtest-death-test.h"
    35  #include "gtest/gtest.h"
    36  #include "gtest/internal/gtest-filepath.h"
    37  
    38  using testing::internal::AlwaysFalse;
    39  using testing::internal::AlwaysTrue;
    40  
    41  #if GTEST_HAS_DEATH_TEST
    42  
    43  # if GTEST_OS_WINDOWS
    44  #  include <direct.h>          // For chdir().
    45  # else
    46  #  include <unistd.h>
    47  #  include <sys/wait.h>        // For waitpid.
    48  # endif  // GTEST_OS_WINDOWS
    49  
    50  # include <limits.h>
    51  # include <signal.h>
    52  # include <stdio.h>
    53  
    54  # if GTEST_OS_LINUX
    55  #  include <sys/time.h>
    56  # endif  // GTEST_OS_LINUX
    57  
    58  # include "gtest/gtest-spi.h"
    59  
    60  // Indicates that this translation unit is part of Google Test's
    61  // implementation.  It must come before gtest-internal-inl.h is
    62  // included, or there will be a compiler error.  This trick is to
    63  // prevent a user from accidentally including gtest-internal-inl.h in
    64  // his code.
    65  # define GTEST_IMPLEMENTATION_ 1
    66  # include "src/gtest-internal-inl.h"
    67  # undef GTEST_IMPLEMENTATION_
    68  
    69  namespace posix = ::testing::internal::posix;
    70  
    71  using testing::Message;
    72  using testing::internal::DeathTest;
    73  using testing::internal::DeathTestFactory;
    74  using testing::internal::FilePath;
    75  using testing::internal::GetLastErrnoDescription;
    76  using testing::internal::GetUnitTestImpl;
    77  using testing::internal::InDeathTestChild;
    78  using testing::internal::ParseNaturalNumber;
    79  
    80  namespace testing {
    81  namespace internal {
    82  
    83  // A helper class whose objects replace the death test factory for a
    84  // single UnitTest object during their lifetimes.
    85  class ReplaceDeathTestFactory {
    86   public:
    87    explicit ReplaceDeathTestFactory(DeathTestFactory* new_factory)
    88        : unit_test_impl_(GetUnitTestImpl()) {
    89      old_factory_ = unit_test_impl_->death_test_factory_.release();
    90      unit_test_impl_->death_test_factory_.reset(new_factory);
    91    }
    92  
    93    ~ReplaceDeathTestFactory() {
    94      unit_test_impl_->death_test_factory_.release();
    95      unit_test_impl_->death_test_factory_.reset(old_factory_);
    96    }
    97   private:
    98    // Prevents copying ReplaceDeathTestFactory objects.
    99    ReplaceDeathTestFactory(const ReplaceDeathTestFactory&);
   100    void operator=(const ReplaceDeathTestFactory&);
   101  
   102    UnitTestImpl* unit_test_impl_;
   103    DeathTestFactory* old_factory_;
   104  };
   105  
   106  }  // namespace internal
   107  }  // namespace testing
   108  
   109  void DieWithMessage(const ::std::string& message) {
   110    fprintf(stderr, "%s", message.c_str());
   111    fflush(stderr);  // Make sure the text is printed before the process exits.
   112  
   113    // We call _exit() instead of exit(), as the former is a direct
   114    // system call and thus safer in the presence of threads.  exit()
   115    // will invoke user-defined exit-hooks, which may do dangerous
   116    // things that conflict with death tests.
   117    //
   118    // Some compilers can recognize that _exit() never returns and issue the
   119    // 'unreachable code' warning for code following this function, unless
   120    // fooled by a fake condition.
   121    if (AlwaysTrue())
   122      _exit(1);
   123  }
   124  
   125  void DieInside(const ::std::string& function) {
   126    DieWithMessage("death inside " + function + "().");
   127  }
   128  
   129  // Tests that death tests work.
   130  
   131  class TestForDeathTest : public testing::Test {
   132   protected:
   133    TestForDeathTest() : original_dir_(FilePath::GetCurrentDir()) {}
   134  
   135    virtual ~TestForDeathTest() {
   136      posix::ChDir(original_dir_.c_str());
   137    }
   138  
   139    // A static member function that's expected to die.
   140    static void StaticMemberFunction() { DieInside("StaticMemberFunction"); }
   141  
   142    // A method of the test fixture that may die.
   143    void MemberFunction() {
   144      if (should_die_)
   145        DieInside("MemberFunction");
   146    }
   147  
   148    // True iff MemberFunction() should die.
   149    bool should_die_;
   150    const FilePath original_dir_;
   151  };
   152  
   153  // A class with a member function that may die.
   154  class MayDie {
   155   public:
   156    explicit MayDie(bool should_die) : should_die_(should_die) {}
   157  
   158    // A member function that may die.
   159    void MemberFunction() const {
   160      if (should_die_)
   161        DieInside("MayDie::MemberFunction");
   162    }
   163  
   164   private:
   165    // True iff MemberFunction() should die.
   166    bool should_die_;
   167  };
   168  
   169  // A global function that's expected to die.
   170  void GlobalFunction() { DieInside("GlobalFunction"); }
   171  
   172  // A non-void function that's expected to die.
   173  int NonVoidFunction() {
   174    DieInside("NonVoidFunction");
   175    return 1;
   176  }
   177  
   178  // A unary function that may die.
   179  void DieIf(bool should_die) {
   180    if (should_die)
   181      DieInside("DieIf");
   182  }
   183  
   184  // A binary function that may die.
   185  bool DieIfLessThan(int x, int y) {
   186    if (x < y) {
   187      DieInside("DieIfLessThan");
   188    }
   189    return true;
   190  }
   191  
   192  // Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture.
   193  void DeathTestSubroutine() {
   194    EXPECT_DEATH(GlobalFunction(), "death.*GlobalFunction");
   195    ASSERT_DEATH(GlobalFunction(), "death.*GlobalFunction");
   196  }
   197  
   198  // Death in dbg, not opt.
   199  int DieInDebugElse12(int* sideeffect) {
   200    if (sideeffect) *sideeffect = 12;
   201  
   202  # ifndef NDEBUG
   203  
   204    DieInside("DieInDebugElse12");
   205  
   206  # endif  // NDEBUG
   207  
   208    return 12;
   209  }
   210  
   211  # if GTEST_OS_WINDOWS
   212  
   213  // Tests the ExitedWithCode predicate.
   214  TEST(ExitStatusPredicateTest, ExitedWithCode) {
   215    // On Windows, the process's exit code is the same as its exit status,
   216    // so the predicate just compares the its input with its parameter.
   217    EXPECT_TRUE(testing::ExitedWithCode(0)(0));
   218    EXPECT_TRUE(testing::ExitedWithCode(1)(1));
   219    EXPECT_TRUE(testing::ExitedWithCode(42)(42));
   220    EXPECT_FALSE(testing::ExitedWithCode(0)(1));
   221    EXPECT_FALSE(testing::ExitedWithCode(1)(0));
   222  }
   223  
   224  # else
   225  
   226  // Returns the exit status of a process that calls _exit(2) with a
   227  // given exit code.  This is a helper function for the
   228  // ExitStatusPredicateTest test suite.
   229  static int NormalExitStatus(int exit_code) {
   230    pid_t child_pid = fork();
   231    if (child_pid == 0) {
   232      _exit(exit_code);
   233    }
   234    int status;
   235    waitpid(child_pid, &status, 0);
   236    return status;
   237  }
   238  
   239  // Returns the exit status of a process that raises a given signal.
   240  // If the signal does not cause the process to die, then it returns
   241  // instead the exit status of a process that exits normally with exit
   242  // code 1.  This is a helper function for the ExitStatusPredicateTest
   243  // test suite.
   244  static int KilledExitStatus(int signum) {
   245    pid_t child_pid = fork();
   246    if (child_pid == 0) {
   247      raise(signum);
   248      _exit(1);
   249    }
   250    int status;
   251    waitpid(child_pid, &status, 0);
   252    return status;
   253  }
   254  
   255  // Tests the ExitedWithCode predicate.
   256  TEST(ExitStatusPredicateTest, ExitedWithCode) {
   257    const int status0  = NormalExitStatus(0);
   258    const int status1  = NormalExitStatus(1);
   259    const int status42 = NormalExitStatus(42);
   260    const testing::ExitedWithCode pred0(0);
   261    const testing::ExitedWithCode pred1(1);
   262    const testing::ExitedWithCode pred42(42);
   263    EXPECT_PRED1(pred0,  status0);
   264    EXPECT_PRED1(pred1,  status1);
   265    EXPECT_PRED1(pred42, status42);
   266    EXPECT_FALSE(pred0(status1));
   267    EXPECT_FALSE(pred42(status0));
   268    EXPECT_FALSE(pred1(status42));
   269  }
   270  
   271  // Tests the KilledBySignal predicate.
   272  TEST(ExitStatusPredicateTest, KilledBySignal) {
   273    const int status_segv = KilledExitStatus(SIGSEGV);
   274    const int status_kill = KilledExitStatus(SIGKILL);
   275    const testing::KilledBySignal pred_segv(SIGSEGV);
   276    const testing::KilledBySignal pred_kill(SIGKILL);
   277    EXPECT_PRED1(pred_segv, status_segv);
   278    EXPECT_PRED1(pred_kill, status_kill);
   279    EXPECT_FALSE(pred_segv(status_kill));
   280    EXPECT_FALSE(pred_kill(status_segv));
   281  }
   282  
   283  # endif  // GTEST_OS_WINDOWS
   284  
   285  // Tests that the death test macros expand to code which may or may not
   286  // be followed by operator<<, and that in either case the complete text
   287  // comprises only a single C++ statement.
   288  TEST_F(TestForDeathTest, SingleStatement) {
   289    if (AlwaysFalse())
   290      // This would fail if executed; this is a compilation test only
   291      ASSERT_DEATH(return, "");
   292  
   293    if (AlwaysTrue())
   294      EXPECT_DEATH(_exit(1), "");
   295    else
   296      // This empty "else" branch is meant to ensure that EXPECT_DEATH
   297      // doesn't expand into an "if" statement without an "else"
   298      ;
   299  
   300    if (AlwaysFalse())
   301      ASSERT_DEATH(return, "") << "did not die";
   302  
   303    if (AlwaysFalse())
   304      ;
   305    else
   306      EXPECT_DEATH(_exit(1), "") << 1 << 2 << 3;
   307  }
   308  
   309  void DieWithEmbeddedNul() {
   310    fprintf(stderr, "Hello%cmy null world.\n", '\0');
   311    fflush(stderr);
   312    _exit(1);
   313  }
   314  
   315  # if GTEST_USES_PCRE
   316  // Tests that EXPECT_DEATH and ASSERT_DEATH work when the error
   317  // message has a NUL character in it.
   318  TEST_F(TestForDeathTest, EmbeddedNulInMessage) {
   319    // TODO(wan@google.com): <regex.h> doesn't support matching strings
   320    // with embedded NUL characters - find a way to workaround it.
   321    EXPECT_DEATH(DieWithEmbeddedNul(), "my null world");
   322    ASSERT_DEATH(DieWithEmbeddedNul(), "my null world");
   323  }
   324  # endif  // GTEST_USES_PCRE
   325  
   326  // Tests that death test macros expand to code which interacts well with switch
   327  // statements.
   328  TEST_F(TestForDeathTest, SwitchStatement) {
   329  // Microsoft compiler usually complains about switch statements without
   330  // case labels. We suppress that warning for this test.
   331  # ifdef _MSC_VER
   332  #  pragma warning(push)
   333  #  pragma warning(disable: 4065)
   334  # endif  // _MSC_VER
   335  
   336    switch (0)
   337      default:
   338        ASSERT_DEATH(_exit(1), "") << "exit in default switch handler";
   339  
   340    switch (0)
   341      case 0:
   342        EXPECT_DEATH(_exit(1), "") << "exit in switch case";
   343  
   344  # ifdef _MSC_VER
   345  #  pragma warning(pop)
   346  # endif  // _MSC_VER
   347  }
   348  
   349  // Tests that a static member function can be used in a "fast" style
   350  // death test.
   351  TEST_F(TestForDeathTest, StaticMemberFunctionFastStyle) {
   352    testing::GTEST_FLAG(death_test_style) = "fast";
   353    ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember");
   354  }
   355  
   356  // Tests that a method of the test fixture can be used in a "fast"
   357  // style death test.
   358  TEST_F(TestForDeathTest, MemberFunctionFastStyle) {
   359    testing::GTEST_FLAG(death_test_style) = "fast";
   360    should_die_ = true;
   361    EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction");
   362  }
   363  
   364  void ChangeToRootDir() { posix::ChDir(GTEST_PATH_SEP_); }
   365  
   366  // Tests that death tests work even if the current directory has been
   367  // changed.
   368  TEST_F(TestForDeathTest, FastDeathTestInChangedDir) {
   369    testing::GTEST_FLAG(death_test_style) = "fast";
   370  
   371    ChangeToRootDir();
   372    EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), "");
   373  
   374    ChangeToRootDir();
   375    ASSERT_DEATH(_exit(1), "");
   376  }
   377  
   378  # if GTEST_OS_LINUX
   379  void SigprofAction(int, siginfo_t*, void*) { /* no op */ }
   380  
   381  // Sets SIGPROF action and ITIMER_PROF timer (interval: 1ms).
   382  void SetSigprofActionAndTimer() {
   383    struct itimerval timer;
   384    timer.it_interval.tv_sec = 0;
   385    timer.it_interval.tv_usec = 1;
   386    timer.it_value = timer.it_interval;
   387    ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL));
   388    struct sigaction signal_action;
   389    memset(&signal_action, 0, sizeof(signal_action));
   390    sigemptyset(&signal_action.sa_mask);
   391    signal_action.sa_sigaction = SigprofAction;
   392    signal_action.sa_flags = SA_RESTART | SA_SIGINFO;
   393    ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, NULL));
   394  }
   395  
   396  // Disables ITIMER_PROF timer and ignores SIGPROF signal.
   397  void DisableSigprofActionAndTimer(struct sigaction* old_signal_action) {
   398    struct itimerval timer;
   399    timer.it_interval.tv_sec = 0;
   400    timer.it_interval.tv_usec = 0;
   401    timer.it_value = timer.it_interval;
   402    ASSERT_EQ(0, setitimer(ITIMER_PROF, &timer, NULL));
   403    struct sigaction signal_action;
   404    memset(&signal_action, 0, sizeof(signal_action));
   405    sigemptyset(&signal_action.sa_mask);
   406    signal_action.sa_handler = SIG_IGN;
   407    ASSERT_EQ(0, sigaction(SIGPROF, &signal_action, old_signal_action));
   408  }
   409  
   410  // Tests that death tests work when SIGPROF handler and timer are set.
   411  TEST_F(TestForDeathTest, FastSigprofActionSet) {
   412    testing::GTEST_FLAG(death_test_style) = "fast";
   413    SetSigprofActionAndTimer();
   414    EXPECT_DEATH(_exit(1), "");
   415    struct sigaction old_signal_action;
   416    DisableSigprofActionAndTimer(&old_signal_action);
   417    EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction);
   418  }
   419  
   420  TEST_F(TestForDeathTest, ThreadSafeSigprofActionSet) {
   421    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   422    SetSigprofActionAndTimer();
   423    EXPECT_DEATH(_exit(1), "");
   424    struct sigaction old_signal_action;
   425    DisableSigprofActionAndTimer(&old_signal_action);
   426    EXPECT_TRUE(old_signal_action.sa_sigaction == SigprofAction);
   427  }
   428  # endif  // GTEST_OS_LINUX
   429  
   430  // Repeats a representative sample of death tests in the "threadsafe" style:
   431  
   432  TEST_F(TestForDeathTest, StaticMemberFunctionThreadsafeStyle) {
   433    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   434    ASSERT_DEATH(StaticMemberFunction(), "death.*StaticMember");
   435  }
   436  
   437  TEST_F(TestForDeathTest, MemberFunctionThreadsafeStyle) {
   438    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   439    should_die_ = true;
   440    EXPECT_DEATH(MemberFunction(), "inside.*MemberFunction");
   441  }
   442  
   443  TEST_F(TestForDeathTest, ThreadsafeDeathTestInLoop) {
   444    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   445  
   446    for (int i = 0; i < 3; ++i)
   447      EXPECT_EXIT(_exit(i), testing::ExitedWithCode(i), "") << ": i = " << i;
   448  }
   449  
   450  TEST_F(TestForDeathTest, ThreadsafeDeathTestInChangedDir) {
   451    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   452  
   453    ChangeToRootDir();
   454    EXPECT_EXIT(_exit(1), testing::ExitedWithCode(1), "");
   455  
   456    ChangeToRootDir();
   457    ASSERT_DEATH(_exit(1), "");
   458  }
   459  
   460  TEST_F(TestForDeathTest, MixedStyles) {
   461    testing::GTEST_FLAG(death_test_style) = "threadsafe";
   462    EXPECT_DEATH(_exit(1), "");
   463    testing::GTEST_FLAG(death_test_style) = "fast";
   464    EXPECT_DEATH(_exit(1), "");
   465  }
   466  
   467  # if GTEST_HAS_CLONE && GTEST_HAS_PTHREAD
   468  
   469  namespace {
   470  
   471  bool pthread_flag;
   472  
   473  void SetPthreadFlag() {
   474    pthread_flag = true;
   475  }
   476  
   477  }  // namespace
   478  
   479  TEST_F(TestForDeathTest, DoesNotExecuteAtforkHooks) {
   480    if (!testing::GTEST_FLAG(death_test_use_fork)) {
   481      testing::GTEST_FLAG(death_test_style) = "threadsafe";
   482      pthread_flag = false;
   483      ASSERT_EQ(0, pthread_atfork(&SetPthreadFlag, NULL, NULL));
   484      ASSERT_DEATH(_exit(1), "");
   485      ASSERT_FALSE(pthread_flag);
   486    }
   487  }
   488  
   489  # endif  // GTEST_HAS_CLONE && GTEST_HAS_PTHREAD
   490  
   491  // Tests that a method of another class can be used in a death test.
   492  TEST_F(TestForDeathTest, MethodOfAnotherClass) {
   493    const MayDie x(true);
   494    ASSERT_DEATH(x.MemberFunction(), "MayDie\\:\\:MemberFunction");
   495  }
   496  
   497  // Tests that a global function can be used in a death test.
   498  TEST_F(TestForDeathTest, GlobalFunction) {
   499    EXPECT_DEATH(GlobalFunction(), "GlobalFunction");
   500  }
   501  
   502  // Tests that any value convertible to an RE works as a second
   503  // argument to EXPECT_DEATH.
   504  TEST_F(TestForDeathTest, AcceptsAnythingConvertibleToRE) {
   505    static const char regex_c_str[] = "GlobalFunction";
   506    EXPECT_DEATH(GlobalFunction(), regex_c_str);
   507  
   508    const testing::internal::RE regex(regex_c_str);
   509    EXPECT_DEATH(GlobalFunction(), regex);
   510  
   511  # if GTEST_HAS_GLOBAL_STRING
   512  
   513    const string regex_str(regex_c_str);
   514    EXPECT_DEATH(GlobalFunction(), regex_str);
   515  
   516  # endif  // GTEST_HAS_GLOBAL_STRING
   517  
   518    const ::std::string regex_std_str(regex_c_str);
   519    EXPECT_DEATH(GlobalFunction(), regex_std_str);
   520  }
   521  
   522  // Tests that a non-void function can be used in a death test.
   523  TEST_F(TestForDeathTest, NonVoidFunction) {
   524    ASSERT_DEATH(NonVoidFunction(), "NonVoidFunction");
   525  }
   526  
   527  // Tests that functions that take parameter(s) can be used in a death test.
   528  TEST_F(TestForDeathTest, FunctionWithParameter) {
   529    EXPECT_DEATH(DieIf(true), "DieIf\\(\\)");
   530    EXPECT_DEATH(DieIfLessThan(2, 3), "DieIfLessThan");
   531  }
   532  
   533  // Tests that ASSERT_DEATH can be used outside a TEST, TEST_F, or test fixture.
   534  TEST_F(TestForDeathTest, OutsideFixture) {
   535    DeathTestSubroutine();
   536  }
   537  
   538  // Tests that death tests can be done inside a loop.
   539  TEST_F(TestForDeathTest, InsideLoop) {
   540    for (int i = 0; i < 5; i++) {
   541      EXPECT_DEATH(DieIfLessThan(-1, i), "DieIfLessThan") << "where i == " << i;
   542    }
   543  }
   544  
   545  // Tests that a compound statement can be used in a death test.
   546  TEST_F(TestForDeathTest, CompoundStatement) {
   547    EXPECT_DEATH({  // NOLINT
   548      const int x = 2;
   549      const int y = x + 1;
   550      DieIfLessThan(x, y);
   551    },
   552    "DieIfLessThan");
   553  }
   554  
   555  // Tests that code that doesn't die causes a death test to fail.
   556  TEST_F(TestForDeathTest, DoesNotDie) {
   557    EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(DieIf(false), "DieIf"),
   558                            "failed to die");
   559  }
   560  
   561  // Tests that a death test fails when the error message isn't expected.
   562  TEST_F(TestForDeathTest, ErrorMessageMismatch) {
   563    EXPECT_NONFATAL_FAILURE({  // NOLINT
   564      EXPECT_DEATH(DieIf(true), "DieIfLessThan") << "End of death test message.";
   565    }, "died but not with expected error");
   566  }
   567  
   568  // On exit, *aborted will be true iff the EXPECT_DEATH() statement
   569  // aborted the function.
   570  void ExpectDeathTestHelper(bool* aborted) {
   571    *aborted = true;
   572    EXPECT_DEATH(DieIf(false), "DieIf");  // This assertion should fail.
   573    *aborted = false;
   574  }
   575  
   576  // Tests that EXPECT_DEATH doesn't abort the test on failure.
   577  TEST_F(TestForDeathTest, EXPECT_DEATH) {
   578    bool aborted = true;
   579    EXPECT_NONFATAL_FAILURE(ExpectDeathTestHelper(&aborted),
   580                            "failed to die");
   581    EXPECT_FALSE(aborted);
   582  }
   583  
   584  // Tests that ASSERT_DEATH does abort the test on failure.
   585  TEST_F(TestForDeathTest, ASSERT_DEATH) {
   586    static bool aborted;
   587    EXPECT_FATAL_FAILURE({  // NOLINT
   588      aborted = true;
   589      ASSERT_DEATH(DieIf(false), "DieIf");  // This assertion should fail.
   590      aborted = false;
   591    }, "failed to die");
   592    EXPECT_TRUE(aborted);
   593  }
   594  
   595  // Tests that EXPECT_DEATH evaluates the arguments exactly once.
   596  TEST_F(TestForDeathTest, SingleEvaluation) {
   597    int x = 3;
   598    EXPECT_DEATH(DieIf((++x) == 4), "DieIf");
   599  
   600    const char* regex = "DieIf";
   601    const char* regex_save = regex;
   602    EXPECT_DEATH(DieIfLessThan(3, 4), regex++);
   603    EXPECT_EQ(regex_save + 1, regex);
   604  }
   605  
   606  // Tests that run-away death tests are reported as failures.
   607  TEST_F(TestForDeathTest, RunawayIsFailure) {
   608    EXPECT_NONFATAL_FAILURE(EXPECT_DEATH(static_cast<void>(0), "Foo"),
   609                            "failed to die.");
   610  }
   611  
   612  // Tests that death tests report executing 'return' in the statement as
   613  // failure.
   614  TEST_F(TestForDeathTest, ReturnIsFailure) {
   615    EXPECT_FATAL_FAILURE(ASSERT_DEATH(return, "Bar"),
   616                         "illegal return in test statement.");
   617  }
   618  
   619  // Tests that EXPECT_DEBUG_DEATH works as expected, that is, you can stream a
   620  // message to it, and in debug mode it:
   621  // 1. Asserts on death.
   622  // 2. Has no side effect.
   623  //
   624  // And in opt mode, it:
   625  // 1.  Has side effects but does not assert.
   626  TEST_F(TestForDeathTest, TestExpectDebugDeath) {
   627    int sideeffect = 0;
   628  
   629    EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), "death.*DieInDebugElse12")
   630        << "Must accept a streamed message";
   631  
   632  # ifdef NDEBUG
   633  
   634    // Checks that the assignment occurs in opt mode (sideeffect).
   635    EXPECT_EQ(12, sideeffect);
   636  
   637  # else
   638  
   639    // Checks that the assignment does not occur in dbg mode (no sideeffect).
   640    EXPECT_EQ(0, sideeffect);
   641  
   642  # endif
   643  }
   644  
   645  // Tests that ASSERT_DEBUG_DEATH works as expected, that is, you can stream a
   646  // message to it, and in debug mode it:
   647  // 1. Asserts on death.
   648  // 2. Has no side effect.
   649  //
   650  // And in opt mode, it:
   651  // 1.  Has side effects but does not assert.
   652  TEST_F(TestForDeathTest, TestAssertDebugDeath) {
   653    int sideeffect = 0;
   654  
   655    ASSERT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), "death.*DieInDebugElse12")
   656        << "Must accept a streamed message";
   657  
   658  # ifdef NDEBUG
   659  
   660    // Checks that the assignment occurs in opt mode (sideeffect).
   661    EXPECT_EQ(12, sideeffect);
   662  
   663  # else
   664  
   665    // Checks that the assignment does not occur in dbg mode (no sideeffect).
   666    EXPECT_EQ(0, sideeffect);
   667  
   668  # endif
   669  }
   670  
   671  # ifndef NDEBUG
   672  
   673  void ExpectDebugDeathHelper(bool* aborted) {
   674    *aborted = true;
   675    EXPECT_DEBUG_DEATH(return, "") << "This is expected to fail.";
   676    *aborted = false;
   677  }
   678  
   679  #  if GTEST_OS_WINDOWS
   680  TEST(PopUpDeathTest, DoesNotShowPopUpOnAbort) {
   681    printf("This test should be considered failing if it shows "
   682           "any pop-up dialogs.\n");
   683    fflush(stdout);
   684  
   685    EXPECT_DEATH({
   686      testing::GTEST_FLAG(catch_exceptions) = false;
   687      abort();
   688    }, "");
   689  }
   690  #  endif  // GTEST_OS_WINDOWS
   691  
   692  // Tests that EXPECT_DEBUG_DEATH in debug mode does not abort
   693  // the function.
   694  TEST_F(TestForDeathTest, ExpectDebugDeathDoesNotAbort) {
   695    bool aborted = true;
   696    EXPECT_NONFATAL_FAILURE(ExpectDebugDeathHelper(&aborted), "");
   697    EXPECT_FALSE(aborted);
   698  }
   699  
   700  void AssertDebugDeathHelper(bool* aborted) {
   701    *aborted = true;
   702    ASSERT_DEBUG_DEATH(return, "") << "This is expected to fail.";
   703    *aborted = false;
   704  }
   705  
   706  // Tests that ASSERT_DEBUG_DEATH in debug mode aborts the function on
   707  // failure.
   708  TEST_F(TestForDeathTest, AssertDebugDeathAborts) {
   709    static bool aborted;
   710    aborted = false;
   711    EXPECT_FATAL_FAILURE(AssertDebugDeathHelper(&aborted), "");
   712    EXPECT_TRUE(aborted);
   713  }
   714  
   715  # endif  // _NDEBUG
   716  
   717  // Tests the *_EXIT family of macros, using a variety of predicates.
   718  static void TestExitMacros() {
   719    EXPECT_EXIT(_exit(1),  testing::ExitedWithCode(1),  "");
   720    ASSERT_EXIT(_exit(42), testing::ExitedWithCode(42), "");
   721  
   722  # if GTEST_OS_WINDOWS
   723  
   724    // Of all signals effects on the process exit code, only those of SIGABRT
   725    // are documented on Windows.
   726    // See http://msdn.microsoft.com/en-us/library/dwwzkt4c(VS.71).aspx.
   727    EXPECT_EXIT(raise(SIGABRT), testing::ExitedWithCode(3), "") << "b_ar";
   728  
   729  # else
   730  
   731    EXPECT_EXIT(raise(SIGKILL), testing::KilledBySignal(SIGKILL), "") << "foo";
   732    ASSERT_EXIT(raise(SIGUSR2), testing::KilledBySignal(SIGUSR2), "") << "bar";
   733  
   734    EXPECT_FATAL_FAILURE({  // NOLINT
   735      ASSERT_EXIT(_exit(0), testing::KilledBySignal(SIGSEGV), "")
   736        << "This failure is expected, too.";
   737    }, "This failure is expected, too.");
   738  
   739  # endif  // GTEST_OS_WINDOWS
   740  
   741    EXPECT_NONFATAL_FAILURE({  // NOLINT
   742      EXPECT_EXIT(raise(SIGSEGV), testing::ExitedWithCode(0), "")
   743        << "This failure is expected.";
   744    }, "This failure is expected.");
   745  }
   746  
   747  TEST_F(TestForDeathTest, ExitMacros) {
   748    TestExitMacros();
   749  }
   750  
   751  TEST_F(TestForDeathTest, ExitMacrosUsingFork) {
   752    testing::GTEST_FLAG(death_test_use_fork) = true;
   753    TestExitMacros();
   754  }
   755  
   756  TEST_F(TestForDeathTest, InvalidStyle) {
   757    testing::GTEST_FLAG(death_test_style) = "rococo";
   758    EXPECT_NONFATAL_FAILURE({  // NOLINT
   759      EXPECT_DEATH(_exit(0), "") << "This failure is expected.";
   760    }, "This failure is expected.");
   761  }
   762  
   763  TEST_F(TestForDeathTest, DeathTestFailedOutput) {
   764    testing::GTEST_FLAG(death_test_style) = "fast";
   765    EXPECT_NONFATAL_FAILURE(
   766        EXPECT_DEATH(DieWithMessage("death\n"),
   767                     "expected message"),
   768        "Actual msg:\n"
   769        "[  DEATH   ] death\n");
   770  }
   771  
   772  TEST_F(TestForDeathTest, DeathTestUnexpectedReturnOutput) {
   773    testing::GTEST_FLAG(death_test_style) = "fast";
   774    EXPECT_NONFATAL_FAILURE(
   775        EXPECT_DEATH({
   776            fprintf(stderr, "returning\n");
   777            fflush(stderr);
   778            return;
   779          }, ""),
   780        "    Result: illegal return in test statement.\n"
   781        " Error msg:\n"
   782        "[  DEATH   ] returning\n");
   783  }
   784  
   785  TEST_F(TestForDeathTest, DeathTestBadExitCodeOutput) {
   786    testing::GTEST_FLAG(death_test_style) = "fast";
   787    EXPECT_NONFATAL_FAILURE(
   788        EXPECT_EXIT(DieWithMessage("exiting with rc 1\n"),
   789                    testing::ExitedWithCode(3),
   790                    "expected message"),
   791        "    Result: died but not with expected exit code:\n"
   792        "            Exited with exit status 1\n"
   793        "Actual msg:\n"
   794        "[  DEATH   ] exiting with rc 1\n");
   795  }
   796  
   797  TEST_F(TestForDeathTest, DeathTestMultiLineMatchFail) {
   798    testing::GTEST_FLAG(death_test_style) = "fast";
   799    EXPECT_NONFATAL_FAILURE(
   800        EXPECT_DEATH(DieWithMessage("line 1\nline 2\nline 3\n"),
   801                     "line 1\nxyz\nline 3\n"),
   802        "Actual msg:\n"
   803        "[  DEATH   ] line 1\n"
   804        "[  DEATH   ] line 2\n"
   805        "[  DEATH   ] line 3\n");
   806  }
   807  
   808  TEST_F(TestForDeathTest, DeathTestMultiLineMatchPass) {
   809    testing::GTEST_FLAG(death_test_style) = "fast";
   810    EXPECT_DEATH(DieWithMessage("line 1\nline 2\nline 3\n"),
   811                 "line 1\nline 2\nline 3\n");
   812  }
   813  
   814  // A DeathTestFactory that returns MockDeathTests.
   815  class MockDeathTestFactory : public DeathTestFactory {
   816   public:
   817    MockDeathTestFactory();
   818    virtual bool Create(const char* statement,
   819                        const ::testing::internal::RE* regex,
   820                        const char* file, int line, DeathTest** test);
   821  
   822    // Sets the parameters for subsequent calls to Create.
   823    void SetParameters(bool create, DeathTest::TestRole role,
   824                       int status, bool passed);
   825  
   826    // Accessors.
   827    int AssumeRoleCalls() const { return assume_role_calls_; }
   828    int WaitCalls() const { return wait_calls_; }
   829    int PassedCalls() const { return passed_args_.size(); }
   830    bool PassedArgument(int n) const { return passed_args_[n]; }
   831    int AbortCalls() const { return abort_args_.size(); }
   832    DeathTest::AbortReason AbortArgument(int n) const {
   833      return abort_args_[n];
   834    }
   835    bool TestDeleted() const { return test_deleted_; }
   836  
   837   private:
   838    friend class MockDeathTest;
   839    // If true, Create will return a MockDeathTest; otherwise it returns
   840    // NULL.
   841    bool create_;
   842    // The value a MockDeathTest will return from its AssumeRole method.
   843    DeathTest::TestRole role_;
   844    // The value a MockDeathTest will return from its Wait method.
   845    int status_;
   846    // The value a MockDeathTest will return from its Passed method.
   847    bool passed_;
   848  
   849    // Number of times AssumeRole was called.
   850    int assume_role_calls_;
   851    // Number of times Wait was called.
   852    int wait_calls_;
   853    // The arguments to the calls to Passed since the last call to
   854    // SetParameters.
   855    std::vector<bool> passed_args_;
   856    // The arguments to the calls to Abort since the last call to
   857    // SetParameters.
   858    std::vector<DeathTest::AbortReason> abort_args_;
   859    // True if the last MockDeathTest returned by Create has been
   860    // deleted.
   861    bool test_deleted_;
   862  };
   863  
   864  
   865  // A DeathTest implementation useful in testing.  It returns values set
   866  // at its creation from its various inherited DeathTest methods, and
   867  // reports calls to those methods to its parent MockDeathTestFactory
   868  // object.
   869  class MockDeathTest : public DeathTest {
   870   public:
   871    MockDeathTest(MockDeathTestFactory *parent,
   872                  TestRole role, int status, bool passed) :
   873        parent_(parent), role_(role), status_(status), passed_(passed) {
   874    }
   875    virtual ~MockDeathTest() {
   876      parent_->test_deleted_ = true;
   877    }
   878    virtual TestRole AssumeRole() {
   879      ++parent_->assume_role_calls_;
   880      return role_;
   881    }
   882    virtual int Wait() {
   883      ++parent_->wait_calls_;
   884      return status_;
   885    }
   886    virtual bool Passed(bool exit_status_ok) {
   887      parent_->passed_args_.push_back(exit_status_ok);
   888      return passed_;
   889    }
   890    virtual void Abort(AbortReason reason) {
   891      parent_->abort_args_.push_back(reason);
   892    }
   893  
   894   private:
   895    MockDeathTestFactory* const parent_;
   896    const TestRole role_;
   897    const int status_;
   898    const bool passed_;
   899  };
   900  
   901  
   902  // MockDeathTestFactory constructor.
   903  MockDeathTestFactory::MockDeathTestFactory()
   904      : create_(true),
   905        role_(DeathTest::OVERSEE_TEST),
   906        status_(0),
   907        passed_(true),
   908        assume_role_calls_(0),
   909        wait_calls_(0),
   910        passed_args_(),
   911        abort_args_() {
   912  }
   913  
   914  
   915  // Sets the parameters for subsequent calls to Create.
   916  void MockDeathTestFactory::SetParameters(bool create,
   917                                           DeathTest::TestRole role,
   918                                           int status, bool passed) {
   919    create_ = create;
   920    role_ = role;
   921    status_ = status;
   922    passed_ = passed;
   923  
   924    assume_role_calls_ = 0;
   925    wait_calls_ = 0;
   926    passed_args_.clear();
   927    abort_args_.clear();
   928  }
   929  
   930  
   931  // Sets test to NULL (if create_ is false) or to the address of a new
   932  // MockDeathTest object with parameters taken from the last call
   933  // to SetParameters (if create_ is true).  Always returns true.
   934  bool MockDeathTestFactory::Create(const char* /*statement*/,
   935                                    const ::testing::internal::RE* /*regex*/,
   936                                    const char* /*file*/,
   937                                    int /*line*/,
   938                                    DeathTest** test) {
   939    test_deleted_ = false;
   940    if (create_) {
   941      *test = new MockDeathTest(this, role_, status_, passed_);
   942    } else {
   943      *test = NULL;
   944    }
   945    return true;
   946  }
   947  
   948  // A test fixture for testing the logic of the GTEST_DEATH_TEST_ macro.
   949  // It installs a MockDeathTestFactory that is used for the duration
   950  // of the test case.
   951  class MacroLogicDeathTest : public testing::Test {
   952   protected:
   953    static testing::internal::ReplaceDeathTestFactory* replacer_;
   954    static MockDeathTestFactory* factory_;
   955  
   956    static void SetUpTestCase() {
   957      factory_ = new MockDeathTestFactory;
   958      replacer_ = new testing::internal::ReplaceDeathTestFactory(factory_);
   959    }
   960  
   961    static void TearDownTestCase() {
   962      delete replacer_;
   963      replacer_ = NULL;
   964      delete factory_;
   965      factory_ = NULL;
   966    }
   967  
   968    // Runs a death test that breaks the rules by returning.  Such a death
   969    // test cannot be run directly from a test routine that uses a
   970    // MockDeathTest, or the remainder of the routine will not be executed.
   971    static void RunReturningDeathTest(bool* flag) {
   972      ASSERT_DEATH({  // NOLINT
   973        *flag = true;
   974        return;
   975      }, "");
   976    }
   977  };
   978  
   979  testing::internal::ReplaceDeathTestFactory* MacroLogicDeathTest::replacer_
   980      = NULL;
   981  MockDeathTestFactory* MacroLogicDeathTest::factory_ = NULL;
   982  
   983  
   984  // Test that nothing happens when the factory doesn't return a DeathTest:
   985  TEST_F(MacroLogicDeathTest, NothingHappens) {
   986    bool flag = false;
   987    factory_->SetParameters(false, DeathTest::OVERSEE_TEST, 0, true);
   988    EXPECT_DEATH(flag = true, "");
   989    EXPECT_FALSE(flag);
   990    EXPECT_EQ(0, factory_->AssumeRoleCalls());
   991    EXPECT_EQ(0, factory_->WaitCalls());
   992    EXPECT_EQ(0, factory_->PassedCalls());
   993    EXPECT_EQ(0, factory_->AbortCalls());
   994    EXPECT_FALSE(factory_->TestDeleted());
   995  }
   996  
   997  // Test that the parent process doesn't run the death test code,
   998  // and that the Passed method returns false when the (simulated)
   999  // child process exits with status 0:
  1000  TEST_F(MacroLogicDeathTest, ChildExitsSuccessfully) {
  1001    bool flag = false;
  1002    factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 0, true);
  1003    EXPECT_DEATH(flag = true, "");
  1004    EXPECT_FALSE(flag);
  1005    EXPECT_EQ(1, factory_->AssumeRoleCalls());
  1006    EXPECT_EQ(1, factory_->WaitCalls());
  1007    ASSERT_EQ(1, factory_->PassedCalls());
  1008    EXPECT_FALSE(factory_->PassedArgument(0));
  1009    EXPECT_EQ(0, factory_->AbortCalls());
  1010    EXPECT_TRUE(factory_->TestDeleted());
  1011  }
  1012  
  1013  // Tests that the Passed method was given the argument "true" when
  1014  // the (simulated) child process exits with status 1:
  1015  TEST_F(MacroLogicDeathTest, ChildExitsUnsuccessfully) {
  1016    bool flag = false;
  1017    factory_->SetParameters(true, DeathTest::OVERSEE_TEST, 1, true);
  1018    EXPECT_DEATH(flag = true, "");
  1019    EXPECT_FALSE(flag);
  1020    EXPECT_EQ(1, factory_->AssumeRoleCalls());
  1021    EXPECT_EQ(1, factory_->WaitCalls());
  1022    ASSERT_EQ(1, factory_->PassedCalls());
  1023    EXPECT_TRUE(factory_->PassedArgument(0));
  1024    EXPECT_EQ(0, factory_->AbortCalls());
  1025    EXPECT_TRUE(factory_->TestDeleted());
  1026  }
  1027  
  1028  // Tests that the (simulated) child process executes the death test
  1029  // code, and is aborted with the correct AbortReason if it
  1030  // executes a return statement.
  1031  TEST_F(MacroLogicDeathTest, ChildPerformsReturn) {
  1032    bool flag = false;
  1033    factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true);
  1034    RunReturningDeathTest(&flag);
  1035    EXPECT_TRUE(flag);
  1036    EXPECT_EQ(1, factory_->AssumeRoleCalls());
  1037    EXPECT_EQ(0, factory_->WaitCalls());
  1038    EXPECT_EQ(0, factory_->PassedCalls());
  1039    EXPECT_EQ(1, factory_->AbortCalls());
  1040    EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT,
  1041              factory_->AbortArgument(0));
  1042    EXPECT_TRUE(factory_->TestDeleted());
  1043  }
  1044  
  1045  // Tests that the (simulated) child process is aborted with the
  1046  // correct AbortReason if it does not die.
  1047  TEST_F(MacroLogicDeathTest, ChildDoesNotDie) {
  1048    bool flag = false;
  1049    factory_->SetParameters(true, DeathTest::EXECUTE_TEST, 0, true);
  1050    EXPECT_DEATH(flag = true, "");
  1051    EXPECT_TRUE(flag);
  1052    EXPECT_EQ(1, factory_->AssumeRoleCalls());
  1053    EXPECT_EQ(0, factory_->WaitCalls());
  1054    EXPECT_EQ(0, factory_->PassedCalls());
  1055    // This time there are two calls to Abort: one since the test didn't
  1056    // die, and another from the ReturnSentinel when it's destroyed.  The
  1057    // sentinel normally isn't destroyed if a test doesn't die, since
  1058    // _exit(2) is called in that case by ForkingDeathTest, but not by
  1059    // our MockDeathTest.
  1060    ASSERT_EQ(2, factory_->AbortCalls());
  1061    EXPECT_EQ(DeathTest::TEST_DID_NOT_DIE,
  1062              factory_->AbortArgument(0));
  1063    EXPECT_EQ(DeathTest::TEST_ENCOUNTERED_RETURN_STATEMENT,
  1064              factory_->AbortArgument(1));
  1065    EXPECT_TRUE(factory_->TestDeleted());
  1066  }
  1067  
  1068  // Tests that a successful death test does not register a successful
  1069  // test part.
  1070  TEST(SuccessRegistrationDeathTest, NoSuccessPart) {
  1071    EXPECT_DEATH(_exit(1), "");
  1072    EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
  1073  }
  1074  
  1075  TEST(StreamingAssertionsDeathTest, DeathTest) {
  1076    EXPECT_DEATH(_exit(1), "") << "unexpected failure";
  1077    ASSERT_DEATH(_exit(1), "") << "unexpected failure";
  1078    EXPECT_NONFATAL_FAILURE({  // NOLINT
  1079      EXPECT_DEATH(_exit(0), "") << "expected failure";
  1080    }, "expected failure");
  1081    EXPECT_FATAL_FAILURE({  // NOLINT
  1082      ASSERT_DEATH(_exit(0), "") << "expected failure";
  1083    }, "expected failure");
  1084  }
  1085  
  1086  // Tests that GetLastErrnoDescription returns an empty string when the
  1087  // last error is 0 and non-empty string when it is non-zero.
  1088  TEST(GetLastErrnoDescription, GetLastErrnoDescriptionWorks) {
  1089    errno = ENOENT;
  1090    EXPECT_STRNE("", GetLastErrnoDescription().c_str());
  1091    errno = 0;
  1092    EXPECT_STREQ("", GetLastErrnoDescription().c_str());
  1093  }
  1094  
  1095  # if GTEST_OS_WINDOWS
  1096  TEST(AutoHandleTest, AutoHandleWorks) {
  1097    HANDLE handle = ::CreateEvent(NULL, FALSE, FALSE, NULL);
  1098    ASSERT_NE(INVALID_HANDLE_VALUE, handle);
  1099  
  1100    // Tests that the AutoHandle is correctly initialized with a handle.
  1101    testing::internal::AutoHandle auto_handle(handle);
  1102    EXPECT_EQ(handle, auto_handle.Get());
  1103  
  1104    // Tests that Reset assigns INVALID_HANDLE_VALUE.
  1105    // Note that this cannot verify whether the original handle is closed.
  1106    auto_handle.Reset();
  1107    EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle.Get());
  1108  
  1109    // Tests that Reset assigns the new handle.
  1110    // Note that this cannot verify whether the original handle is closed.
  1111    handle = ::CreateEvent(NULL, FALSE, FALSE, NULL);
  1112    ASSERT_NE(INVALID_HANDLE_VALUE, handle);
  1113    auto_handle.Reset(handle);
  1114    EXPECT_EQ(handle, auto_handle.Get());
  1115  
  1116    // Tests that AutoHandle contains INVALID_HANDLE_VALUE by default.
  1117    testing::internal::AutoHandle auto_handle2;
  1118    EXPECT_EQ(INVALID_HANDLE_VALUE, auto_handle2.Get());
  1119  }
  1120  # endif  // GTEST_OS_WINDOWS
  1121  
  1122  # if GTEST_OS_WINDOWS
  1123  typedef unsigned __int64 BiggestParsable;
  1124  typedef signed __int64 BiggestSignedParsable;
  1125  # else
  1126  typedef unsigned long long BiggestParsable;
  1127  typedef signed long long BiggestSignedParsable;
  1128  # endif  // GTEST_OS_WINDOWS
  1129  
  1130  // We cannot use std::numeric_limits<T>::max() as it clashes with the
  1131  // max() macro defined by <windows.h>.
  1132  const BiggestParsable kBiggestParsableMax = ULLONG_MAX;
  1133  const BiggestSignedParsable kBiggestSignedParsableMax = LLONG_MAX;
  1134  
  1135  TEST(ParseNaturalNumberTest, RejectsInvalidFormat) {
  1136    BiggestParsable result = 0;
  1137  
  1138    // Rejects non-numbers.
  1139    EXPECT_FALSE(ParseNaturalNumber("non-number string", &result));
  1140  
  1141    // Rejects numbers with whitespace prefix.
  1142    EXPECT_FALSE(ParseNaturalNumber(" 123", &result));
  1143  
  1144    // Rejects negative numbers.
  1145    EXPECT_FALSE(ParseNaturalNumber("-123", &result));
  1146  
  1147    // Rejects numbers starting with a plus sign.
  1148    EXPECT_FALSE(ParseNaturalNumber("+123", &result));
  1149    errno = 0;
  1150  }
  1151  
  1152  TEST(ParseNaturalNumberTest, RejectsOverflownNumbers) {
  1153    BiggestParsable result = 0;
  1154  
  1155    EXPECT_FALSE(ParseNaturalNumber("99999999999999999999999", &result));
  1156  
  1157    signed char char_result = 0;
  1158    EXPECT_FALSE(ParseNaturalNumber("200", &char_result));
  1159    errno = 0;
  1160  }
  1161  
  1162  TEST(ParseNaturalNumberTest, AcceptsValidNumbers) {
  1163    BiggestParsable result = 0;
  1164  
  1165    result = 0;
  1166    ASSERT_TRUE(ParseNaturalNumber("123", &result));
  1167    EXPECT_EQ(123U, result);
  1168  
  1169    // Check 0 as an edge case.
  1170    result = 1;
  1171    ASSERT_TRUE(ParseNaturalNumber("0", &result));
  1172    EXPECT_EQ(0U, result);
  1173  
  1174    result = 1;
  1175    ASSERT_TRUE(ParseNaturalNumber("00000", &result));
  1176    EXPECT_EQ(0U, result);
  1177  }
  1178  
  1179  TEST(ParseNaturalNumberTest, AcceptsTypeLimits) {
  1180    Message msg;
  1181    msg << kBiggestParsableMax;
  1182  
  1183    BiggestParsable result = 0;
  1184    EXPECT_TRUE(ParseNaturalNumber(msg.GetString(), &result));
  1185    EXPECT_EQ(kBiggestParsableMax, result);
  1186  
  1187    Message msg2;
  1188    msg2 << kBiggestSignedParsableMax;
  1189  
  1190    BiggestSignedParsable signed_result = 0;
  1191    EXPECT_TRUE(ParseNaturalNumber(msg2.GetString(), &signed_result));
  1192    EXPECT_EQ(kBiggestSignedParsableMax, signed_result);
  1193  
  1194    Message msg3;
  1195    msg3 << INT_MAX;
  1196  
  1197    int int_result = 0;
  1198    EXPECT_TRUE(ParseNaturalNumber(msg3.GetString(), &int_result));
  1199    EXPECT_EQ(INT_MAX, int_result);
  1200  
  1201    Message msg4;
  1202    msg4 << UINT_MAX;
  1203  
  1204    unsigned int uint_result = 0;
  1205    EXPECT_TRUE(ParseNaturalNumber(msg4.GetString(), &uint_result));
  1206    EXPECT_EQ(UINT_MAX, uint_result);
  1207  }
  1208  
  1209  TEST(ParseNaturalNumberTest, WorksForShorterIntegers) {
  1210    short short_result = 0;
  1211    ASSERT_TRUE(ParseNaturalNumber("123", &short_result));
  1212    EXPECT_EQ(123, short_result);
  1213  
  1214    signed char char_result = 0;
  1215    ASSERT_TRUE(ParseNaturalNumber("123", &char_result));
  1216    EXPECT_EQ(123, char_result);
  1217  }
  1218  
  1219  # if GTEST_OS_WINDOWS
  1220  TEST(EnvironmentTest, HandleFitsIntoSizeT) {
  1221    // TODO(vladl@google.com): Remove this test after this condition is verified
  1222    // in a static assertion in gtest-death-test.cc in the function
  1223    // GetStatusFileDescriptor.
  1224    ASSERT_TRUE(sizeof(HANDLE) <= sizeof(size_t));
  1225  }
  1226  # endif  // GTEST_OS_WINDOWS
  1227  
  1228  // Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED trigger
  1229  // failures when death tests are available on the system.
  1230  TEST(ConditionalDeathMacrosDeathTest, ExpectsDeathWhenDeathTestsAvailable) {
  1231    EXPECT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestExpectMacro"),
  1232                              "death inside CondDeathTestExpectMacro");
  1233    ASSERT_DEATH_IF_SUPPORTED(DieInside("CondDeathTestAssertMacro"),
  1234                              "death inside CondDeathTestAssertMacro");
  1235  
  1236    // Empty statement will not crash, which must trigger a failure.
  1237    EXPECT_NONFATAL_FAILURE(EXPECT_DEATH_IF_SUPPORTED(;, ""), "");
  1238    EXPECT_FATAL_FAILURE(ASSERT_DEATH_IF_SUPPORTED(;, ""), "");
  1239  }
  1240  
  1241  #else
  1242  
  1243  using testing::internal::CaptureStderr;
  1244  using testing::internal::GetCapturedStderr;
  1245  
  1246  // Tests that EXPECT_DEATH_IF_SUPPORTED/ASSERT_DEATH_IF_SUPPORTED are still
  1247  // defined but do not trigger failures when death tests are not available on
  1248  // the system.
  1249  TEST(ConditionalDeathMacrosTest, WarnsWhenDeathTestsNotAvailable) {
  1250    // Empty statement will not crash, but that should not trigger a failure
  1251    // when death tests are not supported.
  1252    CaptureStderr();
  1253    EXPECT_DEATH_IF_SUPPORTED(;, "");
  1254    std::string output = GetCapturedStderr();
  1255    ASSERT_TRUE(NULL != strstr(output.c_str(),
  1256                               "Death tests are not supported on this platform"));
  1257    ASSERT_TRUE(NULL != strstr(output.c_str(), ";"));
  1258  
  1259    // The streamed message should not be printed as there is no test failure.
  1260    CaptureStderr();
  1261    EXPECT_DEATH_IF_SUPPORTED(;, "") << "streamed message";
  1262    output = GetCapturedStderr();
  1263    ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message"));
  1264  
  1265    CaptureStderr();
  1266    ASSERT_DEATH_IF_SUPPORTED(;, "");  // NOLINT
  1267    output = GetCapturedStderr();
  1268    ASSERT_TRUE(NULL != strstr(output.c_str(),
  1269                               "Death tests are not supported on this platform"));
  1270    ASSERT_TRUE(NULL != strstr(output.c_str(), ";"));
  1271  
  1272    CaptureStderr();
  1273    ASSERT_DEATH_IF_SUPPORTED(;, "") << "streamed message";  // NOLINT
  1274    output = GetCapturedStderr();
  1275    ASSERT_TRUE(NULL == strstr(output.c_str(), "streamed message"));
  1276  }
  1277  
  1278  void FuncWithAssert(int* n) {
  1279    ASSERT_DEATH_IF_SUPPORTED(return;, "");
  1280    (*n)++;
  1281  }
  1282  
  1283  // Tests that ASSERT_DEATH_IF_SUPPORTED does not return from the current
  1284  // function (as ASSERT_DEATH does) if death tests are not supported.
  1285  TEST(ConditionalDeathMacrosTest, AssertDeatDoesNotReturnhIfUnsupported) {
  1286    int n = 0;
  1287    FuncWithAssert(&n);
  1288    EXPECT_EQ(1, n);
  1289  }
  1290  
  1291  TEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInFastStyle) {
  1292    testing::GTEST_FLAG(death_test_style) = "fast";
  1293    EXPECT_FALSE(InDeathTestChild());
  1294    EXPECT_DEATH({
  1295      fprintf(stderr, InDeathTestChild() ? "Inside" : "Outside");
  1296      fflush(stderr);
  1297      _exit(1);
  1298    }, "Inside");
  1299  }
  1300  
  1301  TEST(InDeathTestChildDeathTest, ReportsDeathTestCorrectlyInThreadSafeStyle) {
  1302    testing::GTEST_FLAG(death_test_style) = "threadsafe";
  1303    EXPECT_FALSE(InDeathTestChild());
  1304    EXPECT_DEATH({
  1305      fprintf(stderr, InDeathTestChild() ? "Inside" : "Outside");
  1306      fflush(stderr);
  1307      _exit(1);
  1308    }, "Inside");
  1309  }
  1310  
  1311  #endif  // GTEST_HAS_DEATH_TEST
  1312  
  1313  // Tests that the death test macros expand to code which may or may not
  1314  // be followed by operator<<, and that in either case the complete text
  1315  // comprises only a single C++ statement.
  1316  //
  1317  // The syntax should work whether death tests are available or not.
  1318  TEST(ConditionalDeathMacrosSyntaxDeathTest, SingleStatement) {
  1319    if (AlwaysFalse())
  1320      // This would fail if executed; this is a compilation test only
  1321      ASSERT_DEATH_IF_SUPPORTED(return, "");
  1322  
  1323    if (AlwaysTrue())
  1324      EXPECT_DEATH_IF_SUPPORTED(_exit(1), "");
  1325    else
  1326      // This empty "else" branch is meant to ensure that EXPECT_DEATH
  1327      // doesn't expand into an "if" statement without an "else"
  1328      ;  // NOLINT
  1329  
  1330    if (AlwaysFalse())
  1331      ASSERT_DEATH_IF_SUPPORTED(return, "") << "did not die";
  1332  
  1333    if (AlwaysFalse())
  1334      ;  // NOLINT
  1335    else
  1336      EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << 1 << 2 << 3;
  1337  }
  1338  
  1339  // Tests that conditional death test macros expand to code which interacts
  1340  // well with switch statements.
  1341  TEST(ConditionalDeathMacrosSyntaxDeathTest, SwitchStatement) {
  1342  // Microsoft compiler usually complains about switch statements without
  1343  // case labels. We suppress that warning for this test.
  1344  #ifdef _MSC_VER
  1345  # pragma warning(push)
  1346  # pragma warning(disable: 4065)
  1347  #endif  // _MSC_VER
  1348  
  1349    switch (0)
  1350      default:
  1351        ASSERT_DEATH_IF_SUPPORTED(_exit(1), "")
  1352            << "exit in default switch handler";
  1353  
  1354    switch (0)
  1355      case 0:
  1356        EXPECT_DEATH_IF_SUPPORTED(_exit(1), "") << "exit in switch case";
  1357  
  1358  #ifdef _MSC_VER
  1359  # pragma warning(pop)
  1360  #endif  // _MSC_VER
  1361  }
  1362  
  1363  // Tests that a test case whose name ends with "DeathTest" works fine
  1364  // on Windows.
  1365  TEST(NotADeathTest, Test) {
  1366    SUCCEED();
  1367  }