github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/test/gtest_unittest.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 Google Test itself.  This verifies that the basic constructs of
    33  // Google Test work.
    34  
    35  #include "gtest/gtest.h"
    36  
    37  // Verifies that the command line flag variables can be accessed
    38  // in code once <gtest/gtest.h> has been #included.
    39  // Do not move it after other #includes.
    40  TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
    41    bool dummy = testing::GTEST_FLAG(also_run_disabled_tests)
    42        || testing::GTEST_FLAG(break_on_failure)
    43        || testing::GTEST_FLAG(catch_exceptions)
    44        || testing::GTEST_FLAG(color) != "unknown"
    45        || testing::GTEST_FLAG(filter) != "unknown"
    46        || testing::GTEST_FLAG(list_tests)
    47        || testing::GTEST_FLAG(output) != "unknown"
    48        || testing::GTEST_FLAG(print_time)
    49        || testing::GTEST_FLAG(random_seed)
    50        || testing::GTEST_FLAG(repeat) > 0
    51        || testing::GTEST_FLAG(show_internal_stack_frames)
    52        || testing::GTEST_FLAG(shuffle)
    53        || testing::GTEST_FLAG(stack_trace_depth) > 0
    54        || testing::GTEST_FLAG(stream_result_to) != "unknown"
    55        || testing::GTEST_FLAG(throw_on_failure);
    56    EXPECT_TRUE(dummy || !dummy);  // Suppresses warning that dummy is unused.
    57  }
    58  
    59  #include <limits.h>  // For INT_MAX.
    60  #include <stdlib.h>
    61  #include <string.h>
    62  #include <time.h>
    63  
    64  #include <map>
    65  #include <vector>
    66  #include <ostream>
    67  
    68  #include "gtest/gtest-spi.h"
    69  
    70  // Indicates that this translation unit is part of Google Test's
    71  // implementation.  It must come before gtest-internal-inl.h is
    72  // included, or there will be a compiler error.  This trick is to
    73  // prevent a user from accidentally including gtest-internal-inl.h in
    74  // his code.
    75  #define GTEST_IMPLEMENTATION_ 1
    76  #include "src/gtest-internal-inl.h"
    77  #undef GTEST_IMPLEMENTATION_
    78  
    79  namespace testing {
    80  namespace internal {
    81  
    82  #if GTEST_CAN_STREAM_RESULTS_
    83  
    84  class StreamingListenerTest : public Test {
    85   public:
    86    class FakeSocketWriter : public StreamingListener::AbstractSocketWriter {
    87     public:
    88      // Sends a string to the socket.
    89      virtual void Send(const string& message) { output_ += message; }
    90  
    91      string output_;
    92    };
    93  
    94    StreamingListenerTest()
    95        : fake_sock_writer_(new FakeSocketWriter),
    96          streamer_(fake_sock_writer_),
    97          test_info_obj_("FooTest", "Bar", NULL, NULL, 0, NULL) {}
    98  
    99   protected:
   100    string* output() { return &(fake_sock_writer_->output_); }
   101  
   102    FakeSocketWriter* const fake_sock_writer_;
   103    StreamingListener streamer_;
   104    UnitTest unit_test_;
   105    TestInfo test_info_obj_;  // The name test_info_ was taken by testing::Test.
   106  };
   107  
   108  TEST_F(StreamingListenerTest, OnTestProgramEnd) {
   109    *output() = "";
   110    streamer_.OnTestProgramEnd(unit_test_);
   111    EXPECT_EQ("event=TestProgramEnd&passed=1\n", *output());
   112  }
   113  
   114  TEST_F(StreamingListenerTest, OnTestIterationEnd) {
   115    *output() = "";
   116    streamer_.OnTestIterationEnd(unit_test_, 42);
   117    EXPECT_EQ("event=TestIterationEnd&passed=1&elapsed_time=0ms\n", *output());
   118  }
   119  
   120  TEST_F(StreamingListenerTest, OnTestCaseStart) {
   121    *output() = "";
   122    streamer_.OnTestCaseStart(TestCase("FooTest", "Bar", NULL, NULL));
   123    EXPECT_EQ("event=TestCaseStart&name=FooTest\n", *output());
   124  }
   125  
   126  TEST_F(StreamingListenerTest, OnTestCaseEnd) {
   127    *output() = "";
   128    streamer_.OnTestCaseEnd(TestCase("FooTest", "Bar", NULL, NULL));
   129    EXPECT_EQ("event=TestCaseEnd&passed=1&elapsed_time=0ms\n", *output());
   130  }
   131  
   132  TEST_F(StreamingListenerTest, OnTestStart) {
   133    *output() = "";
   134    streamer_.OnTestStart(test_info_obj_);
   135    EXPECT_EQ("event=TestStart&name=Bar\n", *output());
   136  }
   137  
   138  TEST_F(StreamingListenerTest, OnTestEnd) {
   139    *output() = "";
   140    streamer_.OnTestEnd(test_info_obj_);
   141    EXPECT_EQ("event=TestEnd&passed=1&elapsed_time=0ms\n", *output());
   142  }
   143  
   144  TEST_F(StreamingListenerTest, OnTestPartResult) {
   145    *output() = "";
   146    streamer_.OnTestPartResult(TestPartResult(
   147        TestPartResult::kFatalFailure, "foo.cc", 42, "failed=\n&%"));
   148  
   149    // Meta characters in the failure message should be properly escaped.
   150    EXPECT_EQ(
   151        "event=TestPartResult&file=foo.cc&line=42&message=failed%3D%0A%26%25\n",
   152        *output());
   153  }
   154  
   155  #endif  // GTEST_CAN_STREAM_RESULTS_
   156  
   157  // Provides access to otherwise private parts of the TestEventListeners class
   158  // that are needed to test it.
   159  class TestEventListenersAccessor {
   160   public:
   161    static TestEventListener* GetRepeater(TestEventListeners* listeners) {
   162      return listeners->repeater();
   163    }
   164  
   165    static void SetDefaultResultPrinter(TestEventListeners* listeners,
   166                                        TestEventListener* listener) {
   167      listeners->SetDefaultResultPrinter(listener);
   168    }
   169    static void SetDefaultXmlGenerator(TestEventListeners* listeners,
   170                                       TestEventListener* listener) {
   171      listeners->SetDefaultXmlGenerator(listener);
   172    }
   173  
   174    static bool EventForwardingEnabled(const TestEventListeners& listeners) {
   175      return listeners.EventForwardingEnabled();
   176    }
   177  
   178    static void SuppressEventForwarding(TestEventListeners* listeners) {
   179      listeners->SuppressEventForwarding();
   180    }
   181  };
   182  
   183  class UnitTestRecordPropertyTestHelper : public Test {
   184   protected:
   185    UnitTestRecordPropertyTestHelper() {}
   186  
   187    // Forwards to UnitTest::RecordProperty() to bypass access controls.
   188    void UnitTestRecordProperty(const char* key, const std::string& value) {
   189      unit_test_.RecordProperty(key, value);
   190    }
   191  
   192    UnitTest unit_test_;
   193  };
   194  
   195  }  // namespace internal
   196  }  // namespace testing
   197  
   198  using testing::AssertionFailure;
   199  using testing::AssertionResult;
   200  using testing::AssertionSuccess;
   201  using testing::DoubleLE;
   202  using testing::EmptyTestEventListener;
   203  using testing::Environment;
   204  using testing::FloatLE;
   205  using testing::GTEST_FLAG(also_run_disabled_tests);
   206  using testing::GTEST_FLAG(break_on_failure);
   207  using testing::GTEST_FLAG(catch_exceptions);
   208  using testing::GTEST_FLAG(color);
   209  using testing::GTEST_FLAG(death_test_use_fork);
   210  using testing::GTEST_FLAG(filter);
   211  using testing::GTEST_FLAG(list_tests);
   212  using testing::GTEST_FLAG(output);
   213  using testing::GTEST_FLAG(print_time);
   214  using testing::GTEST_FLAG(random_seed);
   215  using testing::GTEST_FLAG(repeat);
   216  using testing::GTEST_FLAG(show_internal_stack_frames);
   217  using testing::GTEST_FLAG(shuffle);
   218  using testing::GTEST_FLAG(stack_trace_depth);
   219  using testing::GTEST_FLAG(stream_result_to);
   220  using testing::GTEST_FLAG(throw_on_failure);
   221  using testing::IsNotSubstring;
   222  using testing::IsSubstring;
   223  using testing::Message;
   224  using testing::ScopedFakeTestPartResultReporter;
   225  using testing::StaticAssertTypeEq;
   226  using testing::Test;
   227  using testing::TestCase;
   228  using testing::TestEventListeners;
   229  using testing::TestInfo;
   230  using testing::TestPartResult;
   231  using testing::TestPartResultArray;
   232  using testing::TestProperty;
   233  using testing::TestResult;
   234  using testing::TimeInMillis;
   235  using testing::UnitTest;
   236  using testing::kMaxStackTraceDepth;
   237  using testing::internal::AddReference;
   238  using testing::internal::AlwaysFalse;
   239  using testing::internal::AlwaysTrue;
   240  using testing::internal::AppendUserMessage;
   241  using testing::internal::ArrayAwareFind;
   242  using testing::internal::ArrayEq;
   243  using testing::internal::CodePointToUtf8;
   244  using testing::internal::CompileAssertTypesEqual;
   245  using testing::internal::CopyArray;
   246  using testing::internal::CountIf;
   247  using testing::internal::EqFailure;
   248  using testing::internal::FloatingPoint;
   249  using testing::internal::ForEach;
   250  using testing::internal::FormatEpochTimeInMillisAsIso8601;
   251  using testing::internal::FormatTimeInMillisAsSeconds;
   252  using testing::internal::GTestFlagSaver;
   253  using testing::internal::GetCurrentOsStackTraceExceptTop;
   254  using testing::internal::GetElementOr;
   255  using testing::internal::GetNextRandomSeed;
   256  using testing::internal::GetRandomSeedFromFlag;
   257  using testing::internal::GetTestTypeId;
   258  using testing::internal::GetTimeInMillis;
   259  using testing::internal::GetTypeId;
   260  using testing::internal::GetUnitTestImpl;
   261  using testing::internal::ImplicitlyConvertible;
   262  using testing::internal::Int32;
   263  using testing::internal::Int32FromEnvOrDie;
   264  using testing::internal::IsAProtocolMessage;
   265  using testing::internal::IsContainer;
   266  using testing::internal::IsContainerTest;
   267  using testing::internal::IsNotContainer;
   268  using testing::internal::NativeArray;
   269  using testing::internal::ParseInt32Flag;
   270  using testing::internal::RemoveConst;
   271  using testing::internal::RemoveReference;
   272  using testing::internal::ShouldRunTestOnShard;
   273  using testing::internal::ShouldShard;
   274  using testing::internal::ShouldUseColor;
   275  using testing::internal::Shuffle;
   276  using testing::internal::ShuffleRange;
   277  using testing::internal::SkipPrefix;
   278  using testing::internal::StreamableToString;
   279  using testing::internal::String;
   280  using testing::internal::TestEventListenersAccessor;
   281  using testing::internal::TestResultAccessor;
   282  using testing::internal::UInt32;
   283  using testing::internal::WideStringToUtf8;
   284  using testing::internal::kCopy;
   285  using testing::internal::kMaxRandomSeed;
   286  using testing::internal::kReference;
   287  using testing::internal::kTestTypeIdInGoogleTest;
   288  using testing::internal::scoped_ptr;
   289  
   290  #if GTEST_HAS_STREAM_REDIRECTION
   291  using testing::internal::CaptureStdout;
   292  using testing::internal::GetCapturedStdout;
   293  #endif
   294  
   295  #if GTEST_IS_THREADSAFE
   296  using testing::internal::ThreadWithParam;
   297  #endif
   298  
   299  class TestingVector : public std::vector<int> {
   300  };
   301  
   302  ::std::ostream& operator<<(::std::ostream& os,
   303                             const TestingVector& vector) {
   304    os << "{ ";
   305    for (size_t i = 0; i < vector.size(); i++) {
   306      os << vector[i] << " ";
   307    }
   308    os << "}";
   309    return os;
   310  }
   311  
   312  // This line tests that we can define tests in an unnamed namespace.
   313  namespace {
   314  
   315  TEST(GetRandomSeedFromFlagTest, HandlesZero) {
   316    const int seed = GetRandomSeedFromFlag(0);
   317    EXPECT_LE(1, seed);
   318    EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed));
   319  }
   320  
   321  TEST(GetRandomSeedFromFlagTest, PreservesValidSeed) {
   322    EXPECT_EQ(1, GetRandomSeedFromFlag(1));
   323    EXPECT_EQ(2, GetRandomSeedFromFlag(2));
   324    EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1));
   325    EXPECT_EQ(static_cast<int>(kMaxRandomSeed),
   326              GetRandomSeedFromFlag(kMaxRandomSeed));
   327  }
   328  
   329  TEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) {
   330    const int seed1 = GetRandomSeedFromFlag(-1);
   331    EXPECT_LE(1, seed1);
   332    EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed));
   333  
   334    const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1);
   335    EXPECT_LE(1, seed2);
   336    EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed));
   337  }
   338  
   339  TEST(GetNextRandomSeedTest, WorksForValidInput) {
   340    EXPECT_EQ(2, GetNextRandomSeed(1));
   341    EXPECT_EQ(3, GetNextRandomSeed(2));
   342    EXPECT_EQ(static_cast<int>(kMaxRandomSeed),
   343              GetNextRandomSeed(kMaxRandomSeed - 1));
   344    EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed));
   345  
   346    // We deliberately don't test GetNextRandomSeed() with invalid
   347    // inputs, as that requires death tests, which are expensive.  This
   348    // is fine as GetNextRandomSeed() is internal and has a
   349    // straightforward definition.
   350  }
   351  
   352  static void ClearCurrentTestPartResults() {
   353    TestResultAccessor::ClearTestPartResults(
   354        GetUnitTestImpl()->current_test_result());
   355  }
   356  
   357  // Tests GetTypeId.
   358  
   359  TEST(GetTypeIdTest, ReturnsSameValueForSameType) {
   360    EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>());
   361    EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>());
   362  }
   363  
   364  class SubClassOfTest : public Test {};
   365  class AnotherSubClassOfTest : public Test {};
   366  
   367  TEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) {
   368    EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>());
   369    EXPECT_NE(GetTypeId<int>(), GetTypeId<char>());
   370    EXPECT_NE(GetTypeId<int>(), GetTestTypeId());
   371    EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId());
   372    EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId());
   373    EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>());
   374  }
   375  
   376  // Verifies that GetTestTypeId() returns the same value, no matter it
   377  // is called from inside Google Test or outside of it.
   378  TEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) {
   379    EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId());
   380  }
   381  
   382  // Tests FormatTimeInMillisAsSeconds().
   383  
   384  TEST(FormatTimeInMillisAsSecondsTest, FormatsZero) {
   385    EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0));
   386  }
   387  
   388  TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) {
   389    EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3));
   390    EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10));
   391    EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200));
   392    EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200));
   393    EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000));
   394  }
   395  
   396  TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) {
   397    EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3));
   398    EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10));
   399    EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200));
   400    EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200));
   401    EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000));
   402  }
   403  
   404  // Tests FormatEpochTimeInMillisAsIso8601().  The correctness of conversion
   405  // for particular dates below was verified in Python using
   406  // datetime.datetime.fromutctimestamp(<timetamp>/1000).
   407  
   408  // FormatEpochTimeInMillisAsIso8601 depends on the current timezone, so we
   409  // have to set up a particular timezone to obtain predictable results.
   410  class FormatEpochTimeInMillisAsIso8601Test : public Test {
   411   public:
   412    // On Cygwin, GCC doesn't allow unqualified integer literals to exceed
   413    // 32 bits, even when 64-bit integer types are available.  We have to
   414    // force the constants to have a 64-bit type here.
   415    static const TimeInMillis kMillisPerSec = 1000;
   416  
   417   private:
   418    virtual void SetUp() {
   419      saved_tz_ = NULL;
   420  #if _MSC_VER
   421  # pragma warning(push)          // Saves the current warning state.
   422  # pragma warning(disable:4996)  // Temporarily disables warning 4996
   423                                  // (function or variable may be unsafe
   424                                  // for getenv, function is deprecated for
   425                                  // strdup).
   426      if (getenv("TZ"))
   427        saved_tz_ = strdup(getenv("TZ"));
   428  # pragma warning(pop)           // Restores the warning state again.
   429  #else
   430      if (getenv("TZ"))
   431        saved_tz_ = strdup(getenv("TZ"));
   432  #endif
   433  
   434      // Set up the time zone for FormatEpochTimeInMillisAsIso8601 to use.  We
   435      // cannot use the local time zone because the function's output depends
   436      // on the time zone.
   437      SetTimeZone("UTC+00");
   438    }
   439  
   440    virtual void TearDown() {
   441      SetTimeZone(saved_tz_);
   442      free(const_cast<char*>(saved_tz_));
   443      saved_tz_ = NULL;
   444    }
   445  
   446    static void SetTimeZone(const char* time_zone) {
   447      // tzset() distinguishes between the TZ variable being present and empty
   448      // and not being present, so we have to consider the case of time_zone
   449      // being NULL.
   450  #if _MSC_VER
   451      // ...Unless it's MSVC, whose standard library's _putenv doesn't
   452      // distinguish between an empty and a missing variable.
   453      const std::string env_var =
   454          std::string("TZ=") + (time_zone ? time_zone : "");
   455      _putenv(env_var.c_str());
   456  # pragma warning(push)          // Saves the current warning state.
   457  # pragma warning(disable:4996)  // Temporarily disables warning 4996
   458                                  // (function is deprecated).
   459      tzset();
   460  # pragma warning(pop)           // Restores the warning state again.
   461  #else
   462      if (time_zone) {
   463        setenv(("TZ"), time_zone, 1);
   464      } else {
   465        unsetenv("TZ");
   466      }
   467      tzset();
   468  #endif
   469    }
   470  
   471    const char* saved_tz_;
   472  };
   473  
   474  const TimeInMillis FormatEpochTimeInMillisAsIso8601Test::kMillisPerSec;
   475  
   476  TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsTwoDigitSegments) {
   477    EXPECT_EQ("2011-10-31T18:52:42",
   478              FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec));
   479  }
   480  
   481  TEST_F(FormatEpochTimeInMillisAsIso8601Test, MillisecondsDoNotAffectResult) {
   482    EXPECT_EQ(
   483        "2011-10-31T18:52:42",
   484        FormatEpochTimeInMillisAsIso8601(1320087162 * kMillisPerSec + 234));
   485  }
   486  
   487  TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsLeadingZeroes) {
   488    EXPECT_EQ("2011-09-03T05:07:02",
   489              FormatEpochTimeInMillisAsIso8601(1315026422 * kMillisPerSec));
   490  }
   491  
   492  TEST_F(FormatEpochTimeInMillisAsIso8601Test, Prints24HourTime) {
   493    EXPECT_EQ("2011-09-28T17:08:22",
   494              FormatEpochTimeInMillisAsIso8601(1317229702 * kMillisPerSec));
   495  }
   496  
   497  TEST_F(FormatEpochTimeInMillisAsIso8601Test, PrintsEpochStart) {
   498    EXPECT_EQ("1970-01-01T00:00:00", FormatEpochTimeInMillisAsIso8601(0));
   499  }
   500  
   501  #if GTEST_CAN_COMPARE_NULL
   502  
   503  # ifdef __BORLANDC__
   504  // Silences warnings: "Condition is always true", "Unreachable code"
   505  #  pragma option push -w-ccc -w-rch
   506  # endif
   507  
   508  // Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null
   509  // pointer literal.
   510  TEST(NullLiteralTest, IsTrueForNullLiterals) {
   511    EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL));
   512    EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0));
   513    EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U));
   514    EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L));
   515  }
   516  
   517  // Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null
   518  // pointer literal.
   519  TEST(NullLiteralTest, IsFalseForNonNullLiterals) {
   520    EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1));
   521    EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0));
   522    EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a'));
   523    EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL)));
   524  }
   525  
   526  # ifdef __BORLANDC__
   527  // Restores warnings after previous "#pragma option push" suppressed them.
   528  #  pragma option pop
   529  # endif
   530  
   531  #endif  // GTEST_CAN_COMPARE_NULL
   532  //
   533  // Tests CodePointToUtf8().
   534  
   535  // Tests that the NUL character L'\0' is encoded correctly.
   536  TEST(CodePointToUtf8Test, CanEncodeNul) {
   537    EXPECT_EQ("", CodePointToUtf8(L'\0'));
   538  }
   539  
   540  // Tests that ASCII characters are encoded correctly.
   541  TEST(CodePointToUtf8Test, CanEncodeAscii) {
   542    EXPECT_EQ("a", CodePointToUtf8(L'a'));
   543    EXPECT_EQ("Z", CodePointToUtf8(L'Z'));
   544    EXPECT_EQ("&", CodePointToUtf8(L'&'));
   545    EXPECT_EQ("\x7F", CodePointToUtf8(L'\x7F'));
   546  }
   547  
   548  // Tests that Unicode code-points that have 8 to 11 bits are encoded
   549  // as 110xxxxx 10xxxxxx.
   550  TEST(CodePointToUtf8Test, CanEncode8To11Bits) {
   551    // 000 1101 0011 => 110-00011 10-010011
   552    EXPECT_EQ("\xC3\x93", CodePointToUtf8(L'\xD3'));
   553  
   554    // 101 0111 0110 => 110-10101 10-110110
   555    // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints
   556    // in wide strings and wide chars. In order to accomodate them, we have to
   557    // introduce such character constants as integers.
   558    EXPECT_EQ("\xD5\xB6",
   559              CodePointToUtf8(static_cast<wchar_t>(0x576)));
   560  }
   561  
   562  // Tests that Unicode code-points that have 12 to 16 bits are encoded
   563  // as 1110xxxx 10xxxxxx 10xxxxxx.
   564  TEST(CodePointToUtf8Test, CanEncode12To16Bits) {
   565    // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
   566    EXPECT_EQ("\xE0\xA3\x93",
   567              CodePointToUtf8(static_cast<wchar_t>(0x8D3)));
   568  
   569    // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
   570    EXPECT_EQ("\xEC\x9D\x8D",
   571              CodePointToUtf8(static_cast<wchar_t>(0xC74D)));
   572  }
   573  
   574  #if !GTEST_WIDE_STRING_USES_UTF16_
   575  // Tests in this group require a wchar_t to hold > 16 bits, and thus
   576  // are skipped on Windows, Cygwin, and Symbian, where a wchar_t is
   577  // 16-bit wide. This code may not compile on those systems.
   578  
   579  // Tests that Unicode code-points that have 17 to 21 bits are encoded
   580  // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.
   581  TEST(CodePointToUtf8Test, CanEncode17To21Bits) {
   582    // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
   583    EXPECT_EQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3'));
   584  
   585    // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000
   586    EXPECT_EQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400'));
   587  
   588    // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
   589    EXPECT_EQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634'));
   590  }
   591  
   592  // Tests that encoding an invalid code-point generates the expected result.
   593  TEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) {
   594    EXPECT_EQ("(Invalid Unicode 0x1234ABCD)", CodePointToUtf8(L'\x1234ABCD'));
   595  }
   596  
   597  #endif  // !GTEST_WIDE_STRING_USES_UTF16_
   598  
   599  // Tests WideStringToUtf8().
   600  
   601  // Tests that the NUL character L'\0' is encoded correctly.
   602  TEST(WideStringToUtf8Test, CanEncodeNul) {
   603    EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str());
   604    EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str());
   605  }
   606  
   607  // Tests that ASCII strings are encoded correctly.
   608  TEST(WideStringToUtf8Test, CanEncodeAscii) {
   609    EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str());
   610    EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str());
   611    EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str());
   612    EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str());
   613  }
   614  
   615  // Tests that Unicode code-points that have 8 to 11 bits are encoded
   616  // as 110xxxxx 10xxxxxx.
   617  TEST(WideStringToUtf8Test, CanEncode8To11Bits) {
   618    // 000 1101 0011 => 110-00011 10-010011
   619    EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str());
   620    EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str());
   621  
   622    // 101 0111 0110 => 110-10101 10-110110
   623    const wchar_t s[] = { 0x576, '\0' };
   624    EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str());
   625    EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str());
   626  }
   627  
   628  // Tests that Unicode code-points that have 12 to 16 bits are encoded
   629  // as 1110xxxx 10xxxxxx 10xxxxxx.
   630  TEST(WideStringToUtf8Test, CanEncode12To16Bits) {
   631    // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
   632    const wchar_t s1[] = { 0x8D3, '\0' };
   633    EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str());
   634    EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str());
   635  
   636    // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
   637    const wchar_t s2[] = { 0xC74D, '\0' };
   638    EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str());
   639    EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str());
   640  }
   641  
   642  // Tests that the conversion stops when the function encounters \0 character.
   643  TEST(WideStringToUtf8Test, StopsOnNulCharacter) {
   644    EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str());
   645  }
   646  
   647  // Tests that the conversion stops when the function reaches the limit
   648  // specified by the 'length' parameter.
   649  TEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) {
   650    EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str());
   651  }
   652  
   653  #if !GTEST_WIDE_STRING_USES_UTF16_
   654  // Tests that Unicode code-points that have 17 to 21 bits are encoded
   655  // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile
   656  // on the systems using UTF-16 encoding.
   657  TEST(WideStringToUtf8Test, CanEncode17To21Bits) {
   658    // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
   659    EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str());
   660    EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str());
   661  
   662    // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
   663    EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str());
   664    EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str());
   665  }
   666  
   667  // Tests that encoding an invalid code-point generates the expected result.
   668  TEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) {
   669    EXPECT_STREQ("(Invalid Unicode 0xABCDFF)",
   670                 WideStringToUtf8(L"\xABCDFF", -1).c_str());
   671  }
   672  #else  // !GTEST_WIDE_STRING_USES_UTF16_
   673  // Tests that surrogate pairs are encoded correctly on the systems using
   674  // UTF-16 encoding in the wide strings.
   675  TEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) {
   676    const wchar_t s[] = { 0xD801, 0xDC00, '\0' };
   677    EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str());
   678  }
   679  
   680  // Tests that encoding an invalid UTF-16 surrogate pair
   681  // generates the expected result.
   682  TEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) {
   683    // Leading surrogate is at the end of the string.
   684    const wchar_t s1[] = { 0xD800, '\0' };
   685    EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str());
   686    // Leading surrogate is not followed by the trailing surrogate.
   687    const wchar_t s2[] = { 0xD800, 'M', '\0' };
   688    EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str());
   689    // Trailing surrogate appearas without a leading surrogate.
   690    const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' };
   691    EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str());
   692  }
   693  #endif  // !GTEST_WIDE_STRING_USES_UTF16_
   694  
   695  // Tests that codepoint concatenation works correctly.
   696  #if !GTEST_WIDE_STRING_USES_UTF16_
   697  TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
   698    const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'};
   699    EXPECT_STREQ(
   700        "\xF4\x88\x98\xB4"
   701            "\xEC\x9D\x8D"
   702            "\n"
   703            "\xD5\xB6"
   704            "\xE0\xA3\x93"
   705            "\xF4\x88\x98\xB4",
   706        WideStringToUtf8(s, -1).c_str());
   707  }
   708  #else
   709  TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
   710    const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'};
   711    EXPECT_STREQ(
   712        "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93",
   713        WideStringToUtf8(s, -1).c_str());
   714  }
   715  #endif  // !GTEST_WIDE_STRING_USES_UTF16_
   716  
   717  // Tests the Random class.
   718  
   719  TEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) {
   720    testing::internal::Random random(42);
   721    EXPECT_DEATH_IF_SUPPORTED(
   722        random.Generate(0),
   723        "Cannot generate a number in the range \\[0, 0\\)");
   724    EXPECT_DEATH_IF_SUPPORTED(
   725        random.Generate(testing::internal::Random::kMaxRange + 1),
   726        "Generation of a number in \\[0, 2147483649\\) was requested, "
   727        "but this can only generate numbers in \\[0, 2147483648\\)");
   728  }
   729  
   730  TEST(RandomTest, GeneratesNumbersWithinRange) {
   731    const UInt32 kRange = 10000;
   732    testing::internal::Random random(12345);
   733    for (int i = 0; i < 10; i++) {
   734      EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i;
   735    }
   736  
   737    testing::internal::Random random2(testing::internal::Random::kMaxRange);
   738    for (int i = 0; i < 10; i++) {
   739      EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i;
   740    }
   741  }
   742  
   743  TEST(RandomTest, RepeatsWhenReseeded) {
   744    const int kSeed = 123;
   745    const int kArraySize = 10;
   746    const UInt32 kRange = 10000;
   747    UInt32 values[kArraySize];
   748  
   749    testing::internal::Random random(kSeed);
   750    for (int i = 0; i < kArraySize; i++) {
   751      values[i] = random.Generate(kRange);
   752    }
   753  
   754    random.Reseed(kSeed);
   755    for (int i = 0; i < kArraySize; i++) {
   756      EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i;
   757    }
   758  }
   759  
   760  // Tests STL container utilities.
   761  
   762  // Tests CountIf().
   763  
   764  static bool IsPositive(int n) { return n > 0; }
   765  
   766  TEST(ContainerUtilityTest, CountIf) {
   767    std::vector<int> v;
   768    EXPECT_EQ(0, CountIf(v, IsPositive));  // Works for an empty container.
   769  
   770    v.push_back(-1);
   771    v.push_back(0);
   772    EXPECT_EQ(0, CountIf(v, IsPositive));  // Works when no value satisfies.
   773  
   774    v.push_back(2);
   775    v.push_back(-10);
   776    v.push_back(10);
   777    EXPECT_EQ(2, CountIf(v, IsPositive));
   778  }
   779  
   780  // Tests ForEach().
   781  
   782  static int g_sum = 0;
   783  static void Accumulate(int n) { g_sum += n; }
   784  
   785  TEST(ContainerUtilityTest, ForEach) {
   786    std::vector<int> v;
   787    g_sum = 0;
   788    ForEach(v, Accumulate);
   789    EXPECT_EQ(0, g_sum);  // Works for an empty container;
   790  
   791    g_sum = 0;
   792    v.push_back(1);
   793    ForEach(v, Accumulate);
   794    EXPECT_EQ(1, g_sum);  // Works for a container with one element.
   795  
   796    g_sum = 0;
   797    v.push_back(20);
   798    v.push_back(300);
   799    ForEach(v, Accumulate);
   800    EXPECT_EQ(321, g_sum);
   801  }
   802  
   803  // Tests GetElementOr().
   804  TEST(ContainerUtilityTest, GetElementOr) {
   805    std::vector<char> a;
   806    EXPECT_EQ('x', GetElementOr(a, 0, 'x'));
   807  
   808    a.push_back('a');
   809    a.push_back('b');
   810    EXPECT_EQ('a', GetElementOr(a, 0, 'x'));
   811    EXPECT_EQ('b', GetElementOr(a, 1, 'x'));
   812    EXPECT_EQ('x', GetElementOr(a, -2, 'x'));
   813    EXPECT_EQ('x', GetElementOr(a, 2, 'x'));
   814  }
   815  
   816  TEST(ContainerUtilityDeathTest, ShuffleRange) {
   817    std::vector<int> a;
   818    a.push_back(0);
   819    a.push_back(1);
   820    a.push_back(2);
   821    testing::internal::Random random(1);
   822  
   823    EXPECT_DEATH_IF_SUPPORTED(
   824        ShuffleRange(&random, -1, 1, &a),
   825        "Invalid shuffle range start -1: must be in range \\[0, 3\\]");
   826    EXPECT_DEATH_IF_SUPPORTED(
   827        ShuffleRange(&random, 4, 4, &a),
   828        "Invalid shuffle range start 4: must be in range \\[0, 3\\]");
   829    EXPECT_DEATH_IF_SUPPORTED(
   830        ShuffleRange(&random, 3, 2, &a),
   831        "Invalid shuffle range finish 2: must be in range \\[3, 3\\]");
   832    EXPECT_DEATH_IF_SUPPORTED(
   833        ShuffleRange(&random, 3, 4, &a),
   834        "Invalid shuffle range finish 4: must be in range \\[3, 3\\]");
   835  }
   836  
   837  class VectorShuffleTest : public Test {
   838   protected:
   839    static const int kVectorSize = 20;
   840  
   841    VectorShuffleTest() : random_(1) {
   842      for (int i = 0; i < kVectorSize; i++) {
   843        vector_.push_back(i);
   844      }
   845    }
   846  
   847    static bool VectorIsCorrupt(const TestingVector& vector) {
   848      if (kVectorSize != static_cast<int>(vector.size())) {
   849        return true;
   850      }
   851  
   852      bool found_in_vector[kVectorSize] = { false };
   853      for (size_t i = 0; i < vector.size(); i++) {
   854        const int e = vector[i];
   855        if (e < 0 || e >= kVectorSize || found_in_vector[e]) {
   856          return true;
   857        }
   858        found_in_vector[e] = true;
   859      }
   860  
   861      // Vector size is correct, elements' range is correct, no
   862      // duplicate elements.  Therefore no corruption has occurred.
   863      return false;
   864    }
   865  
   866    static bool VectorIsNotCorrupt(const TestingVector& vector) {
   867      return !VectorIsCorrupt(vector);
   868    }
   869  
   870    static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) {
   871      for (int i = begin; i < end; i++) {
   872        if (i != vector[i]) {
   873          return true;
   874        }
   875      }
   876      return false;
   877    }
   878  
   879    static bool RangeIsUnshuffled(
   880        const TestingVector& vector, int begin, int end) {
   881      return !RangeIsShuffled(vector, begin, end);
   882    }
   883  
   884    static bool VectorIsShuffled(const TestingVector& vector) {
   885      return RangeIsShuffled(vector, 0, static_cast<int>(vector.size()));
   886    }
   887  
   888    static bool VectorIsUnshuffled(const TestingVector& vector) {
   889      return !VectorIsShuffled(vector);
   890    }
   891  
   892    testing::internal::Random random_;
   893    TestingVector vector_;
   894  };  // class VectorShuffleTest
   895  
   896  const int VectorShuffleTest::kVectorSize;
   897  
   898  TEST_F(VectorShuffleTest, HandlesEmptyRange) {
   899    // Tests an empty range at the beginning...
   900    ShuffleRange(&random_, 0, 0, &vector_);
   901    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   902    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   903  
   904    // ...in the middle...
   905    ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_);
   906    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   907    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   908  
   909    // ...at the end...
   910    ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_);
   911    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   912    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   913  
   914    // ...and past the end.
   915    ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_);
   916    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   917    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   918  }
   919  
   920  TEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) {
   921    // Tests a size one range at the beginning...
   922    ShuffleRange(&random_, 0, 1, &vector_);
   923    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   924    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   925  
   926    // ...in the middle...
   927    ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_);
   928    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   929    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   930  
   931    // ...and at the end.
   932    ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_);
   933    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   934    ASSERT_PRED1(VectorIsUnshuffled, vector_);
   935  }
   936  
   937  // Because we use our own random number generator and a fixed seed,
   938  // we can guarantee that the following "random" tests will succeed.
   939  
   940  TEST_F(VectorShuffleTest, ShufflesEntireVector) {
   941    Shuffle(&random_, &vector_);
   942    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   943    EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_;
   944  
   945    // Tests the first and last elements in particular to ensure that
   946    // there are no off-by-one problems in our shuffle algorithm.
   947    EXPECT_NE(0, vector_[0]);
   948    EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]);
   949  }
   950  
   951  TEST_F(VectorShuffleTest, ShufflesStartOfVector) {
   952    const int kRangeSize = kVectorSize/2;
   953  
   954    ShuffleRange(&random_, 0, kRangeSize, &vector_);
   955  
   956    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   957    EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize);
   958    EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize);
   959  }
   960  
   961  TEST_F(VectorShuffleTest, ShufflesEndOfVector) {
   962    const int kRangeSize = kVectorSize / 2;
   963    ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_);
   964  
   965    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   966    EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
   967    EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize);
   968  }
   969  
   970  TEST_F(VectorShuffleTest, ShufflesMiddleOfVector) {
   971    int kRangeSize = kVectorSize/3;
   972    ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_);
   973  
   974    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   975    EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
   976    EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize);
   977    EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize);
   978  }
   979  
   980  TEST_F(VectorShuffleTest, ShufflesRepeatably) {
   981    TestingVector vector2;
   982    for (int i = 0; i < kVectorSize; i++) {
   983      vector2.push_back(i);
   984    }
   985  
   986    random_.Reseed(1234);
   987    Shuffle(&random_, &vector_);
   988    random_.Reseed(1234);
   989    Shuffle(&random_, &vector2);
   990  
   991    ASSERT_PRED1(VectorIsNotCorrupt, vector_);
   992    ASSERT_PRED1(VectorIsNotCorrupt, vector2);
   993  
   994    for (int i = 0; i < kVectorSize; i++) {
   995      EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i;
   996    }
   997  }
   998  
   999  // Tests the size of the AssertHelper class.
  1000  
  1001  TEST(AssertHelperTest, AssertHelperIsSmall) {
  1002    // To avoid breaking clients that use lots of assertions in one
  1003    // function, we cannot grow the size of AssertHelper.
  1004    EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*));
  1005  }
  1006  
  1007  // Tests String::EndsWithCaseInsensitive().
  1008  TEST(StringTest, EndsWithCaseInsensitive) {
  1009    EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", "BAR"));
  1010    EXPECT_TRUE(String::EndsWithCaseInsensitive("foobaR", "bar"));
  1011    EXPECT_TRUE(String::EndsWithCaseInsensitive("foobar", ""));
  1012    EXPECT_TRUE(String::EndsWithCaseInsensitive("", ""));
  1013  
  1014    EXPECT_FALSE(String::EndsWithCaseInsensitive("Foobar", "foo"));
  1015    EXPECT_FALSE(String::EndsWithCaseInsensitive("foobar", "Foo"));
  1016    EXPECT_FALSE(String::EndsWithCaseInsensitive("", "foo"));
  1017  }
  1018  
  1019  // C++Builder's preprocessor is buggy; it fails to expand macros that
  1020  // appear in macro parameters after wide char literals.  Provide an alias
  1021  // for NULL as a workaround.
  1022  static const wchar_t* const kNull = NULL;
  1023  
  1024  // Tests String::CaseInsensitiveWideCStringEquals
  1025  TEST(StringTest, CaseInsensitiveWideCStringEquals) {
  1026    EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL));
  1027    EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L""));
  1028    EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull));
  1029    EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar"));
  1030    EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull));
  1031    EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar"));
  1032    EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR"));
  1033    EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar"));
  1034  }
  1035  
  1036  #if GTEST_OS_WINDOWS
  1037  
  1038  // Tests String::ShowWideCString().
  1039  TEST(StringTest, ShowWideCString) {
  1040    EXPECT_STREQ("(null)",
  1041                 String::ShowWideCString(NULL).c_str());
  1042    EXPECT_STREQ("", String::ShowWideCString(L"").c_str());
  1043    EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str());
  1044  }
  1045  
  1046  # if GTEST_OS_WINDOWS_MOBILE
  1047  TEST(StringTest, AnsiAndUtf16Null) {
  1048    EXPECT_EQ(NULL, String::AnsiToUtf16(NULL));
  1049    EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL));
  1050  }
  1051  
  1052  TEST(StringTest, AnsiAndUtf16ConvertBasic) {
  1053    const char* ansi = String::Utf16ToAnsi(L"str");
  1054    EXPECT_STREQ("str", ansi);
  1055    delete [] ansi;
  1056    const WCHAR* utf16 = String::AnsiToUtf16("str");
  1057    EXPECT_EQ(0, wcsncmp(L"str", utf16, 3));
  1058    delete [] utf16;
  1059  }
  1060  
  1061  TEST(StringTest, AnsiAndUtf16ConvertPathChars) {
  1062    const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?");
  1063    EXPECT_STREQ(".:\\ \"*?", ansi);
  1064    delete [] ansi;
  1065    const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?");
  1066    EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3));
  1067    delete [] utf16;
  1068  }
  1069  # endif  // GTEST_OS_WINDOWS_MOBILE
  1070  
  1071  #endif  // GTEST_OS_WINDOWS
  1072  
  1073  // Tests TestProperty construction.
  1074  TEST(TestPropertyTest, StringValue) {
  1075    TestProperty property("key", "1");
  1076    EXPECT_STREQ("key", property.key());
  1077    EXPECT_STREQ("1", property.value());
  1078  }
  1079  
  1080  // Tests TestProperty replacing a value.
  1081  TEST(TestPropertyTest, ReplaceStringValue) {
  1082    TestProperty property("key", "1");
  1083    EXPECT_STREQ("1", property.value());
  1084    property.SetValue("2");
  1085    EXPECT_STREQ("2", property.value());
  1086  }
  1087  
  1088  // AddFatalFailure() and AddNonfatalFailure() must be stand-alone
  1089  // functions (i.e. their definitions cannot be inlined at the call
  1090  // sites), or C++Builder won't compile the code.
  1091  static void AddFatalFailure() {
  1092    FAIL() << "Expected fatal failure.";
  1093  }
  1094  
  1095  static void AddNonfatalFailure() {
  1096    ADD_FAILURE() << "Expected non-fatal failure.";
  1097  }
  1098  
  1099  class ScopedFakeTestPartResultReporterTest : public Test {
  1100   public:  // Must be public and not protected due to a bug in g++ 3.4.2.
  1101    enum FailureMode {
  1102      FATAL_FAILURE,
  1103      NONFATAL_FAILURE
  1104    };
  1105    static void AddFailure(FailureMode failure) {
  1106      if (failure == FATAL_FAILURE) {
  1107        AddFatalFailure();
  1108      } else {
  1109        AddNonfatalFailure();
  1110      }
  1111    }
  1112  };
  1113  
  1114  // Tests that ScopedFakeTestPartResultReporter intercepts test
  1115  // failures.
  1116  TEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) {
  1117    TestPartResultArray results;
  1118    {
  1119      ScopedFakeTestPartResultReporter reporter(
  1120          ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD,
  1121          &results);
  1122      AddFailure(NONFATAL_FAILURE);
  1123      AddFailure(FATAL_FAILURE);
  1124    }
  1125  
  1126    EXPECT_EQ(2, results.size());
  1127    EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
  1128    EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
  1129  }
  1130  
  1131  TEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) {
  1132    TestPartResultArray results;
  1133    {
  1134      // Tests, that the deprecated constructor still works.
  1135      ScopedFakeTestPartResultReporter reporter(&results);
  1136      AddFailure(NONFATAL_FAILURE);
  1137    }
  1138    EXPECT_EQ(1, results.size());
  1139  }
  1140  
  1141  #if GTEST_IS_THREADSAFE
  1142  
  1143  class ScopedFakeTestPartResultReporterWithThreadsTest
  1144    : public ScopedFakeTestPartResultReporterTest {
  1145   protected:
  1146    static void AddFailureInOtherThread(FailureMode failure) {
  1147      ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL);
  1148      thread.Join();
  1149    }
  1150  };
  1151  
  1152  TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest,
  1153         InterceptsTestFailuresInAllThreads) {
  1154    TestPartResultArray results;
  1155    {
  1156      ScopedFakeTestPartResultReporter reporter(
  1157          ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results);
  1158      AddFailure(NONFATAL_FAILURE);
  1159      AddFailure(FATAL_FAILURE);
  1160      AddFailureInOtherThread(NONFATAL_FAILURE);
  1161      AddFailureInOtherThread(FATAL_FAILURE);
  1162    }
  1163  
  1164    EXPECT_EQ(4, results.size());
  1165    EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
  1166    EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
  1167    EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed());
  1168    EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed());
  1169  }
  1170  
  1171  #endif  // GTEST_IS_THREADSAFE
  1172  
  1173  // Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}.  Makes sure that they
  1174  // work even if the failure is generated in a called function rather than
  1175  // the current context.
  1176  
  1177  typedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest;
  1178  
  1179  TEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) {
  1180    EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure.");
  1181  }
  1182  
  1183  #if GTEST_HAS_GLOBAL_STRING
  1184  TEST_F(ExpectFatalFailureTest, AcceptsStringObject) {
  1185    EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure."));
  1186  }
  1187  #endif
  1188  
  1189  TEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) {
  1190    EXPECT_FATAL_FAILURE(AddFatalFailure(),
  1191                         ::std::string("Expected fatal failure."));
  1192  }
  1193  
  1194  TEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) {
  1195    // We have another test below to verify that the macro catches fatal
  1196    // failures generated on another thread.
  1197    EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(),
  1198                                        "Expected fatal failure.");
  1199  }
  1200  
  1201  #ifdef __BORLANDC__
  1202  // Silences warnings: "Condition is always true"
  1203  # pragma option push -w-ccc
  1204  #endif
  1205  
  1206  // Tests that EXPECT_FATAL_FAILURE() can be used in a non-void
  1207  // function even when the statement in it contains ASSERT_*.
  1208  
  1209  int NonVoidFunction() {
  1210    EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
  1211    EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
  1212    return 0;
  1213  }
  1214  
  1215  TEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) {
  1216    NonVoidFunction();
  1217  }
  1218  
  1219  // Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the
  1220  // current function even though 'statement' generates a fatal failure.
  1221  
  1222  void DoesNotAbortHelper(bool* aborted) {
  1223    EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
  1224    EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
  1225  
  1226    *aborted = false;
  1227  }
  1228  
  1229  #ifdef __BORLANDC__
  1230  // Restores warnings after previous "#pragma option push" suppressed them.
  1231  # pragma option pop
  1232  #endif
  1233  
  1234  TEST_F(ExpectFatalFailureTest, DoesNotAbort) {
  1235    bool aborted = true;
  1236    DoesNotAbortHelper(&aborted);
  1237    EXPECT_FALSE(aborted);
  1238  }
  1239  
  1240  // Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a
  1241  // statement that contains a macro which expands to code containing an
  1242  // unprotected comma.
  1243  
  1244  static int global_var = 0;
  1245  #define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++
  1246  
  1247  TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
  1248  #ifndef __BORLANDC__
  1249    // ICE's in C++Builder.
  1250    EXPECT_FATAL_FAILURE({
  1251      GTEST_USE_UNPROTECTED_COMMA_;
  1252      AddFatalFailure();
  1253    }, "");
  1254  #endif
  1255  
  1256    EXPECT_FATAL_FAILURE_ON_ALL_THREADS({
  1257      GTEST_USE_UNPROTECTED_COMMA_;
  1258      AddFatalFailure();
  1259    }, "");
  1260  }
  1261  
  1262  // Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}.
  1263  
  1264  typedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest;
  1265  
  1266  TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) {
  1267    EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
  1268                            "Expected non-fatal failure.");
  1269  }
  1270  
  1271  #if GTEST_HAS_GLOBAL_STRING
  1272  TEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) {
  1273    EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
  1274                            ::string("Expected non-fatal failure."));
  1275  }
  1276  #endif
  1277  
  1278  TEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) {
  1279    EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
  1280                            ::std::string("Expected non-fatal failure."));
  1281  }
  1282  
  1283  TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) {
  1284    // We have another test below to verify that the macro catches
  1285    // non-fatal failures generated on another thread.
  1286    EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(),
  1287                                           "Expected non-fatal failure.");
  1288  }
  1289  
  1290  // Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a
  1291  // statement that contains a macro which expands to code containing an
  1292  // unprotected comma.
  1293  TEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
  1294    EXPECT_NONFATAL_FAILURE({
  1295      GTEST_USE_UNPROTECTED_COMMA_;
  1296      AddNonfatalFailure();
  1297    }, "");
  1298  
  1299    EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({
  1300      GTEST_USE_UNPROTECTED_COMMA_;
  1301      AddNonfatalFailure();
  1302    }, "");
  1303  }
  1304  
  1305  #if GTEST_IS_THREADSAFE
  1306  
  1307  typedef ScopedFakeTestPartResultReporterWithThreadsTest
  1308      ExpectFailureWithThreadsTest;
  1309  
  1310  TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) {
  1311    EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE),
  1312                                        "Expected fatal failure.");
  1313  }
  1314  
  1315  TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) {
  1316    EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(
  1317        AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure.");
  1318  }
  1319  
  1320  #endif  // GTEST_IS_THREADSAFE
  1321  
  1322  // Tests the TestProperty class.
  1323  
  1324  TEST(TestPropertyTest, ConstructorWorks) {
  1325    const TestProperty property("key", "value");
  1326    EXPECT_STREQ("key", property.key());
  1327    EXPECT_STREQ("value", property.value());
  1328  }
  1329  
  1330  TEST(TestPropertyTest, SetValue) {
  1331    TestProperty property("key", "value_1");
  1332    EXPECT_STREQ("key", property.key());
  1333    property.SetValue("value_2");
  1334    EXPECT_STREQ("key", property.key());
  1335    EXPECT_STREQ("value_2", property.value());
  1336  }
  1337  
  1338  // Tests the TestResult class
  1339  
  1340  // The test fixture for testing TestResult.
  1341  class TestResultTest : public Test {
  1342   protected:
  1343    typedef std::vector<TestPartResult> TPRVector;
  1344  
  1345    // We make use of 2 TestPartResult objects,
  1346    TestPartResult * pr1, * pr2;
  1347  
  1348    // ... and 3 TestResult objects.
  1349    TestResult * r0, * r1, * r2;
  1350  
  1351    virtual void SetUp() {
  1352      // pr1 is for success.
  1353      pr1 = new TestPartResult(TestPartResult::kSuccess,
  1354                               "foo/bar.cc",
  1355                               10,
  1356                               "Success!");
  1357  
  1358      // pr2 is for fatal failure.
  1359      pr2 = new TestPartResult(TestPartResult::kFatalFailure,
  1360                               "foo/bar.cc",
  1361                               -1,  // This line number means "unknown"
  1362                               "Failure!");
  1363  
  1364      // Creates the TestResult objects.
  1365      r0 = new TestResult();
  1366      r1 = new TestResult();
  1367      r2 = new TestResult();
  1368  
  1369      // In order to test TestResult, we need to modify its internal
  1370      // state, in particular the TestPartResult vector it holds.
  1371      // test_part_results() returns a const reference to this vector.
  1372      // We cast it to a non-const object s.t. it can be modified (yes,
  1373      // this is a hack).
  1374      TPRVector* results1 = const_cast<TPRVector*>(
  1375          &TestResultAccessor::test_part_results(*r1));
  1376      TPRVector* results2 = const_cast<TPRVector*>(
  1377          &TestResultAccessor::test_part_results(*r2));
  1378  
  1379      // r0 is an empty TestResult.
  1380  
  1381      // r1 contains a single SUCCESS TestPartResult.
  1382      results1->push_back(*pr1);
  1383  
  1384      // r2 contains a SUCCESS, and a FAILURE.
  1385      results2->push_back(*pr1);
  1386      results2->push_back(*pr2);
  1387    }
  1388  
  1389    virtual void TearDown() {
  1390      delete pr1;
  1391      delete pr2;
  1392  
  1393      delete r0;
  1394      delete r1;
  1395      delete r2;
  1396    }
  1397  
  1398    // Helper that compares two two TestPartResults.
  1399    static void CompareTestPartResult(const TestPartResult& expected,
  1400                                      const TestPartResult& actual) {
  1401      EXPECT_EQ(expected.type(), actual.type());
  1402      EXPECT_STREQ(expected.file_name(), actual.file_name());
  1403      EXPECT_EQ(expected.line_number(), actual.line_number());
  1404      EXPECT_STREQ(expected.summary(), actual.summary());
  1405      EXPECT_STREQ(expected.message(), actual.message());
  1406      EXPECT_EQ(expected.passed(), actual.passed());
  1407      EXPECT_EQ(expected.failed(), actual.failed());
  1408      EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed());
  1409      EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed());
  1410    }
  1411  };
  1412  
  1413  // Tests TestResult::total_part_count().
  1414  TEST_F(TestResultTest, total_part_count) {
  1415    ASSERT_EQ(0, r0->total_part_count());
  1416    ASSERT_EQ(1, r1->total_part_count());
  1417    ASSERT_EQ(2, r2->total_part_count());
  1418  }
  1419  
  1420  // Tests TestResult::Passed().
  1421  TEST_F(TestResultTest, Passed) {
  1422    ASSERT_TRUE(r0->Passed());
  1423    ASSERT_TRUE(r1->Passed());
  1424    ASSERT_FALSE(r2->Passed());
  1425  }
  1426  
  1427  // Tests TestResult::Failed().
  1428  TEST_F(TestResultTest, Failed) {
  1429    ASSERT_FALSE(r0->Failed());
  1430    ASSERT_FALSE(r1->Failed());
  1431    ASSERT_TRUE(r2->Failed());
  1432  }
  1433  
  1434  // Tests TestResult::GetTestPartResult().
  1435  
  1436  typedef TestResultTest TestResultDeathTest;
  1437  
  1438  TEST_F(TestResultDeathTest, GetTestPartResult) {
  1439    CompareTestPartResult(*pr1, r2->GetTestPartResult(0));
  1440    CompareTestPartResult(*pr2, r2->GetTestPartResult(1));
  1441    EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), "");
  1442    EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), "");
  1443  }
  1444  
  1445  // Tests TestResult has no properties when none are added.
  1446  TEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) {
  1447    TestResult test_result;
  1448    ASSERT_EQ(0, test_result.test_property_count());
  1449  }
  1450  
  1451  // Tests TestResult has the expected property when added.
  1452  TEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) {
  1453    TestResult test_result;
  1454    TestProperty property("key_1", "1");
  1455    TestResultAccessor::RecordProperty(&test_result, "testcase", property);
  1456    ASSERT_EQ(1, test_result.test_property_count());
  1457    const TestProperty& actual_property = test_result.GetTestProperty(0);
  1458    EXPECT_STREQ("key_1", actual_property.key());
  1459    EXPECT_STREQ("1", actual_property.value());
  1460  }
  1461  
  1462  // Tests TestResult has multiple properties when added.
  1463  TEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) {
  1464    TestResult test_result;
  1465    TestProperty property_1("key_1", "1");
  1466    TestProperty property_2("key_2", "2");
  1467    TestResultAccessor::RecordProperty(&test_result, "testcase", property_1);
  1468    TestResultAccessor::RecordProperty(&test_result, "testcase", property_2);
  1469    ASSERT_EQ(2, test_result.test_property_count());
  1470    const TestProperty& actual_property_1 = test_result.GetTestProperty(0);
  1471    EXPECT_STREQ("key_1", actual_property_1.key());
  1472    EXPECT_STREQ("1", actual_property_1.value());
  1473  
  1474    const TestProperty& actual_property_2 = test_result.GetTestProperty(1);
  1475    EXPECT_STREQ("key_2", actual_property_2.key());
  1476    EXPECT_STREQ("2", actual_property_2.value());
  1477  }
  1478  
  1479  // Tests TestResult::RecordProperty() overrides values for duplicate keys.
  1480  TEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) {
  1481    TestResult test_result;
  1482    TestProperty property_1_1("key_1", "1");
  1483    TestProperty property_2_1("key_2", "2");
  1484    TestProperty property_1_2("key_1", "12");
  1485    TestProperty property_2_2("key_2", "22");
  1486    TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_1);
  1487    TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_1);
  1488    TestResultAccessor::RecordProperty(&test_result, "testcase", property_1_2);
  1489    TestResultAccessor::RecordProperty(&test_result, "testcase", property_2_2);
  1490  
  1491    ASSERT_EQ(2, test_result.test_property_count());
  1492    const TestProperty& actual_property_1 = test_result.GetTestProperty(0);
  1493    EXPECT_STREQ("key_1", actual_property_1.key());
  1494    EXPECT_STREQ("12", actual_property_1.value());
  1495  
  1496    const TestProperty& actual_property_2 = test_result.GetTestProperty(1);
  1497    EXPECT_STREQ("key_2", actual_property_2.key());
  1498    EXPECT_STREQ("22", actual_property_2.value());
  1499  }
  1500  
  1501  // Tests TestResult::GetTestProperty().
  1502  TEST(TestResultPropertyTest, GetTestProperty) {
  1503    TestResult test_result;
  1504    TestProperty property_1("key_1", "1");
  1505    TestProperty property_2("key_2", "2");
  1506    TestProperty property_3("key_3", "3");
  1507    TestResultAccessor::RecordProperty(&test_result, "testcase", property_1);
  1508    TestResultAccessor::RecordProperty(&test_result, "testcase", property_2);
  1509    TestResultAccessor::RecordProperty(&test_result, "testcase", property_3);
  1510  
  1511    const TestProperty& fetched_property_1 = test_result.GetTestProperty(0);
  1512    const TestProperty& fetched_property_2 = test_result.GetTestProperty(1);
  1513    const TestProperty& fetched_property_3 = test_result.GetTestProperty(2);
  1514  
  1515    EXPECT_STREQ("key_1", fetched_property_1.key());
  1516    EXPECT_STREQ("1", fetched_property_1.value());
  1517  
  1518    EXPECT_STREQ("key_2", fetched_property_2.key());
  1519    EXPECT_STREQ("2", fetched_property_2.value());
  1520  
  1521    EXPECT_STREQ("key_3", fetched_property_3.key());
  1522    EXPECT_STREQ("3", fetched_property_3.value());
  1523  
  1524    EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), "");
  1525    EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), "");
  1526  }
  1527  
  1528  // Tests that GTestFlagSaver works on Windows and Mac.
  1529  
  1530  class GTestFlagSaverTest : public Test {
  1531   protected:
  1532    // Saves the Google Test flags such that we can restore them later, and
  1533    // then sets them to their default values.  This will be called
  1534    // before the first test in this test case is run.
  1535    static void SetUpTestCase() {
  1536      saver_ = new GTestFlagSaver;
  1537  
  1538      GTEST_FLAG(also_run_disabled_tests) = false;
  1539      GTEST_FLAG(break_on_failure) = false;
  1540      GTEST_FLAG(catch_exceptions) = false;
  1541      GTEST_FLAG(death_test_use_fork) = false;
  1542      GTEST_FLAG(color) = "auto";
  1543      GTEST_FLAG(filter) = "";
  1544      GTEST_FLAG(list_tests) = false;
  1545      GTEST_FLAG(output) = "";
  1546      GTEST_FLAG(print_time) = true;
  1547      GTEST_FLAG(random_seed) = 0;
  1548      GTEST_FLAG(repeat) = 1;
  1549      GTEST_FLAG(shuffle) = false;
  1550      GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;
  1551      GTEST_FLAG(stream_result_to) = "";
  1552      GTEST_FLAG(throw_on_failure) = false;
  1553    }
  1554  
  1555    // Restores the Google Test flags that the tests have modified.  This will
  1556    // be called after the last test in this test case is run.
  1557    static void TearDownTestCase() {
  1558      delete saver_;
  1559      saver_ = NULL;
  1560    }
  1561  
  1562    // Verifies that the Google Test flags have their default values, and then
  1563    // modifies each of them.
  1564    void VerifyAndModifyFlags() {
  1565      EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests));
  1566      EXPECT_FALSE(GTEST_FLAG(break_on_failure));
  1567      EXPECT_FALSE(GTEST_FLAG(catch_exceptions));
  1568      EXPECT_STREQ("auto", GTEST_FLAG(color).c_str());
  1569      EXPECT_FALSE(GTEST_FLAG(death_test_use_fork));
  1570      EXPECT_STREQ("", GTEST_FLAG(filter).c_str());
  1571      EXPECT_FALSE(GTEST_FLAG(list_tests));
  1572      EXPECT_STREQ("", GTEST_FLAG(output).c_str());
  1573      EXPECT_TRUE(GTEST_FLAG(print_time));
  1574      EXPECT_EQ(0, GTEST_FLAG(random_seed));
  1575      EXPECT_EQ(1, GTEST_FLAG(repeat));
  1576      EXPECT_FALSE(GTEST_FLAG(shuffle));
  1577      EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth));
  1578      EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str());
  1579      EXPECT_FALSE(GTEST_FLAG(throw_on_failure));
  1580  
  1581      GTEST_FLAG(also_run_disabled_tests) = true;
  1582      GTEST_FLAG(break_on_failure) = true;
  1583      GTEST_FLAG(catch_exceptions) = true;
  1584      GTEST_FLAG(color) = "no";
  1585      GTEST_FLAG(death_test_use_fork) = true;
  1586      GTEST_FLAG(filter) = "abc";
  1587      GTEST_FLAG(list_tests) = true;
  1588      GTEST_FLAG(output) = "xml:foo.xml";
  1589      GTEST_FLAG(print_time) = false;
  1590      GTEST_FLAG(random_seed) = 1;
  1591      GTEST_FLAG(repeat) = 100;
  1592      GTEST_FLAG(shuffle) = true;
  1593      GTEST_FLAG(stack_trace_depth) = 1;
  1594      GTEST_FLAG(stream_result_to) = "localhost:1234";
  1595      GTEST_FLAG(throw_on_failure) = true;
  1596    }
  1597  
  1598   private:
  1599    // For saving Google Test flags during this test case.
  1600    static GTestFlagSaver* saver_;
  1601  };
  1602  
  1603  GTestFlagSaver* GTestFlagSaverTest::saver_ = NULL;
  1604  
  1605  // Google Test doesn't guarantee the order of tests.  The following two
  1606  // tests are designed to work regardless of their order.
  1607  
  1608  // Modifies the Google Test flags in the test body.
  1609  TEST_F(GTestFlagSaverTest, ModifyGTestFlags) {
  1610    VerifyAndModifyFlags();
  1611  }
  1612  
  1613  // Verifies that the Google Test flags in the body of the previous test were
  1614  // restored to their original values.
  1615  TEST_F(GTestFlagSaverTest, VerifyGTestFlags) {
  1616    VerifyAndModifyFlags();
  1617  }
  1618  
  1619  // Sets an environment variable with the given name to the given
  1620  // value.  If the value argument is "", unsets the environment
  1621  // variable.  The caller must ensure that both arguments are not NULL.
  1622  static void SetEnv(const char* name, const char* value) {
  1623  #if GTEST_OS_WINDOWS_MOBILE
  1624    // Environment variables are not supported on Windows CE.
  1625    return;
  1626  #elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
  1627    // C++Builder's putenv only stores a pointer to its parameter; we have to
  1628    // ensure that the string remains valid as long as it might be needed.
  1629    // We use an std::map to do so.
  1630    static std::map<std::string, std::string*> added_env;
  1631  
  1632    // Because putenv stores a pointer to the string buffer, we can't delete the
  1633    // previous string (if present) until after it's replaced.
  1634    std::string *prev_env = NULL;
  1635    if (added_env.find(name) != added_env.end()) {
  1636      prev_env = added_env[name];
  1637    }
  1638    added_env[name] = new std::string(
  1639        (Message() << name << "=" << value).GetString());
  1640  
  1641    // The standard signature of putenv accepts a 'char*' argument. Other
  1642    // implementations, like C++Builder's, accept a 'const char*'.
  1643    // We cast away the 'const' since that would work for both variants.
  1644    putenv(const_cast<char*>(added_env[name]->c_str()));
  1645    delete prev_env;
  1646  #elif GTEST_OS_WINDOWS  // If we are on Windows proper.
  1647    _putenv((Message() << name << "=" << value).GetString().c_str());
  1648  #else
  1649    if (*value == '\0') {
  1650      unsetenv(name);
  1651    } else {
  1652      setenv(name, value, 1);
  1653    }
  1654  #endif  // GTEST_OS_WINDOWS_MOBILE
  1655  }
  1656  
  1657  #if !GTEST_OS_WINDOWS_MOBILE
  1658  // Environment variables are not supported on Windows CE.
  1659  
  1660  using testing::internal::Int32FromGTestEnv;
  1661  
  1662  // Tests Int32FromGTestEnv().
  1663  
  1664  // Tests that Int32FromGTestEnv() returns the default value when the
  1665  // environment variable is not set.
  1666  TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) {
  1667    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "");
  1668    EXPECT_EQ(10, Int32FromGTestEnv("temp", 10));
  1669  }
  1670  
  1671  // Tests that Int32FromGTestEnv() returns the default value when the
  1672  // environment variable overflows as an Int32.
  1673  TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) {
  1674    printf("(expecting 2 warnings)\n");
  1675  
  1676    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321");
  1677    EXPECT_EQ(20, Int32FromGTestEnv("temp", 20));
  1678  
  1679    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321");
  1680    EXPECT_EQ(30, Int32FromGTestEnv("temp", 30));
  1681  }
  1682  
  1683  // Tests that Int32FromGTestEnv() returns the default value when the
  1684  // environment variable does not represent a valid decimal integer.
  1685  TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) {
  1686    printf("(expecting 2 warnings)\n");
  1687  
  1688    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1");
  1689    EXPECT_EQ(40, Int32FromGTestEnv("temp", 40));
  1690  
  1691    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X");
  1692    EXPECT_EQ(50, Int32FromGTestEnv("temp", 50));
  1693  }
  1694  
  1695  // Tests that Int32FromGTestEnv() parses and returns the value of the
  1696  // environment variable when it represents a valid decimal integer in
  1697  // the range of an Int32.
  1698  TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) {
  1699    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123");
  1700    EXPECT_EQ(123, Int32FromGTestEnv("temp", 0));
  1701  
  1702    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321");
  1703    EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0));
  1704  }
  1705  #endif  // !GTEST_OS_WINDOWS_MOBILE
  1706  
  1707  // Tests ParseInt32Flag().
  1708  
  1709  // Tests that ParseInt32Flag() returns false and doesn't change the
  1710  // output value when the flag has wrong format
  1711  TEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) {
  1712    Int32 value = 123;
  1713    EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value));
  1714    EXPECT_EQ(123, value);
  1715  
  1716    EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value));
  1717    EXPECT_EQ(123, value);
  1718  }
  1719  
  1720  // Tests that ParseInt32Flag() returns false and doesn't change the
  1721  // output value when the flag overflows as an Int32.
  1722  TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) {
  1723    printf("(expecting 2 warnings)\n");
  1724  
  1725    Int32 value = 123;
  1726    EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value));
  1727    EXPECT_EQ(123, value);
  1728  
  1729    EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value));
  1730    EXPECT_EQ(123, value);
  1731  }
  1732  
  1733  // Tests that ParseInt32Flag() returns false and doesn't change the
  1734  // output value when the flag does not represent a valid decimal
  1735  // integer.
  1736  TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) {
  1737    printf("(expecting 2 warnings)\n");
  1738  
  1739    Int32 value = 123;
  1740    EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value));
  1741    EXPECT_EQ(123, value);
  1742  
  1743    EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value));
  1744    EXPECT_EQ(123, value);
  1745  }
  1746  
  1747  // Tests that ParseInt32Flag() parses the value of the flag and
  1748  // returns true when the flag represents a valid decimal integer in
  1749  // the range of an Int32.
  1750  TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) {
  1751    Int32 value = 123;
  1752    EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value));
  1753    EXPECT_EQ(456, value);
  1754  
  1755    EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789",
  1756                               "abc", &value));
  1757    EXPECT_EQ(-789, value);
  1758  }
  1759  
  1760  // Tests that Int32FromEnvOrDie() parses the value of the var or
  1761  // returns the correct default.
  1762  // Environment variables are not supported on Windows CE.
  1763  #if !GTEST_OS_WINDOWS_MOBILE
  1764  TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {
  1765    EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
  1766    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123");
  1767    EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
  1768    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123");
  1769    EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
  1770  }
  1771  #endif  // !GTEST_OS_WINDOWS_MOBILE
  1772  
  1773  // Tests that Int32FromEnvOrDie() aborts with an error message
  1774  // if the variable is not an Int32.
  1775  TEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) {
  1776    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx");
  1777    EXPECT_DEATH_IF_SUPPORTED(
  1778        Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123),
  1779        ".*");
  1780  }
  1781  
  1782  // Tests that Int32FromEnvOrDie() aborts with an error message
  1783  // if the variable cannot be represnted by an Int32.
  1784  TEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) {
  1785    SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234");
  1786    EXPECT_DEATH_IF_SUPPORTED(
  1787        Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123),
  1788        ".*");
  1789  }
  1790  
  1791  // Tests that ShouldRunTestOnShard() selects all tests
  1792  // where there is 1 shard.
  1793  TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) {
  1794    EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0));
  1795    EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1));
  1796    EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2));
  1797    EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3));
  1798    EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4));
  1799  }
  1800  
  1801  class ShouldShardTest : public testing::Test {
  1802   protected:
  1803    virtual void SetUp() {
  1804      index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX";
  1805      total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL";
  1806    }
  1807  
  1808    virtual void TearDown() {
  1809      SetEnv(index_var_, "");
  1810      SetEnv(total_var_, "");
  1811    }
  1812  
  1813    const char* index_var_;
  1814    const char* total_var_;
  1815  };
  1816  
  1817  // Tests that sharding is disabled if neither of the environment variables
  1818  // are set.
  1819  TEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) {
  1820    SetEnv(index_var_, "");
  1821    SetEnv(total_var_, "");
  1822  
  1823    EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
  1824    EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
  1825  }
  1826  
  1827  // Tests that sharding is not enabled if total_shards  == 1.
  1828  TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) {
  1829    SetEnv(index_var_, "0");
  1830    SetEnv(total_var_, "1");
  1831    EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
  1832    EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
  1833  }
  1834  
  1835  // Tests that sharding is enabled if total_shards > 1 and
  1836  // we are not in a death test subprocess.
  1837  // Environment variables are not supported on Windows CE.
  1838  #if !GTEST_OS_WINDOWS_MOBILE
  1839  TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {
  1840    SetEnv(index_var_, "4");
  1841    SetEnv(total_var_, "22");
  1842    EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
  1843    EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
  1844  
  1845    SetEnv(index_var_, "8");
  1846    SetEnv(total_var_, "9");
  1847    EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
  1848    EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
  1849  
  1850    SetEnv(index_var_, "0");
  1851    SetEnv(total_var_, "9");
  1852    EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
  1853    EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
  1854  }
  1855  #endif  // !GTEST_OS_WINDOWS_MOBILE
  1856  
  1857  // Tests that we exit in error if the sharding values are not valid.
  1858  
  1859  typedef ShouldShardTest ShouldShardDeathTest;
  1860  
  1861  TEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) {
  1862    SetEnv(index_var_, "4");
  1863    SetEnv(total_var_, "4");
  1864    EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
  1865  
  1866    SetEnv(index_var_, "4");
  1867    SetEnv(total_var_, "-2");
  1868    EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
  1869  
  1870    SetEnv(index_var_, "5");
  1871    SetEnv(total_var_, "");
  1872    EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
  1873  
  1874    SetEnv(index_var_, "");
  1875    SetEnv(total_var_, "5");
  1876    EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
  1877  }
  1878  
  1879  // Tests that ShouldRunTestOnShard is a partition when 5
  1880  // shards are used.
  1881  TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) {
  1882    // Choose an arbitrary number of tests and shards.
  1883    const int num_tests = 17;
  1884    const int num_shards = 5;
  1885  
  1886    // Check partitioning: each test should be on exactly 1 shard.
  1887    for (int test_id = 0; test_id < num_tests; test_id++) {
  1888      int prev_selected_shard_index = -1;
  1889      for (int shard_index = 0; shard_index < num_shards; shard_index++) {
  1890        if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) {
  1891          if (prev_selected_shard_index < 0) {
  1892            prev_selected_shard_index = shard_index;
  1893          } else {
  1894            ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and "
  1895              << shard_index << " are both selected to run test " << test_id;
  1896          }
  1897        }
  1898      }
  1899    }
  1900  
  1901    // Check balance: This is not required by the sharding protocol, but is a
  1902    // desirable property for performance.
  1903    for (int shard_index = 0; shard_index < num_shards; shard_index++) {
  1904      int num_tests_on_shard = 0;
  1905      for (int test_id = 0; test_id < num_tests; test_id++) {
  1906        num_tests_on_shard +=
  1907          ShouldRunTestOnShard(num_shards, shard_index, test_id);
  1908      }
  1909      EXPECT_GE(num_tests_on_shard, num_tests / num_shards);
  1910    }
  1911  }
  1912  
  1913  // For the same reason we are not explicitly testing everything in the
  1914  // Test class, there are no separate tests for the following classes
  1915  // (except for some trivial cases):
  1916  //
  1917  //   TestCase, UnitTest, UnitTestResultPrinter.
  1918  //
  1919  // Similarly, there are no separate tests for the following macros:
  1920  //
  1921  //   TEST, TEST_F, RUN_ALL_TESTS
  1922  
  1923  TEST(UnitTestTest, CanGetOriginalWorkingDir) {
  1924    ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL);
  1925    EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), "");
  1926  }
  1927  
  1928  TEST(UnitTestTest, ReturnsPlausibleTimestamp) {
  1929    EXPECT_LT(0, UnitTest::GetInstance()->start_timestamp());
  1930    EXPECT_LE(UnitTest::GetInstance()->start_timestamp(), GetTimeInMillis());
  1931  }
  1932  
  1933  // When a property using a reserved key is supplied to this function, it
  1934  // tests that a non-fatal failure is added, a fatal failure is not added,
  1935  // and that the property is not recorded.
  1936  void ExpectNonFatalFailureRecordingPropertyWithReservedKey(
  1937      const TestResult& test_result, const char* key) {
  1938    EXPECT_NONFATAL_FAILURE(Test::RecordProperty(key, "1"), "Reserved key");
  1939    ASSERT_EQ(0, test_result.test_property_count()) << "Property for key '" << key
  1940                                                    << "' recorded unexpectedly.";
  1941  }
  1942  
  1943  void ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  1944      const char* key) {
  1945    const TestInfo* test_info = UnitTest::GetInstance()->current_test_info();
  1946    ASSERT_TRUE(test_info != NULL);
  1947    ExpectNonFatalFailureRecordingPropertyWithReservedKey(*test_info->result(),
  1948                                                          key);
  1949  }
  1950  
  1951  void ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1952      const char* key) {
  1953    const TestCase* test_case = UnitTest::GetInstance()->current_test_case();
  1954    ASSERT_TRUE(test_case != NULL);
  1955    ExpectNonFatalFailureRecordingPropertyWithReservedKey(
  1956        test_case->ad_hoc_test_result(), key);
  1957  }
  1958  
  1959  void ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  1960      const char* key) {
  1961    ExpectNonFatalFailureRecordingPropertyWithReservedKey(
  1962        UnitTest::GetInstance()->ad_hoc_test_result(), key);
  1963  }
  1964  
  1965  // Tests that property recording functions in UnitTest outside of tests
  1966  // functions correcly.  Creating a separate instance of UnitTest ensures it
  1967  // is in a state similar to the UnitTest's singleton's between tests.
  1968  class UnitTestRecordPropertyTest :
  1969      public testing::internal::UnitTestRecordPropertyTestHelper {
  1970   public:
  1971    static void SetUpTestCase() {
  1972      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1973          "disabled");
  1974      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1975          "errors");
  1976      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1977          "failures");
  1978      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1979          "name");
  1980      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1981          "tests");
  1982      ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTestCase(
  1983          "time");
  1984  
  1985      Test::RecordProperty("test_case_key_1", "1");
  1986      const TestCase* test_case = UnitTest::GetInstance()->current_test_case();
  1987      ASSERT_TRUE(test_case != NULL);
  1988  
  1989      ASSERT_EQ(1, test_case->ad_hoc_test_result().test_property_count());
  1990      EXPECT_STREQ("test_case_key_1",
  1991                   test_case->ad_hoc_test_result().GetTestProperty(0).key());
  1992      EXPECT_STREQ("1",
  1993                   test_case->ad_hoc_test_result().GetTestProperty(0).value());
  1994    }
  1995  };
  1996  
  1997  // Tests TestResult has the expected property when added.
  1998  TEST_F(UnitTestRecordPropertyTest, OnePropertyFoundWhenAdded) {
  1999    UnitTestRecordProperty("key_1", "1");
  2000  
  2001    ASSERT_EQ(1, unit_test_.ad_hoc_test_result().test_property_count());
  2002  
  2003    EXPECT_STREQ("key_1",
  2004                 unit_test_.ad_hoc_test_result().GetTestProperty(0).key());
  2005    EXPECT_STREQ("1",
  2006                 unit_test_.ad_hoc_test_result().GetTestProperty(0).value());
  2007  }
  2008  
  2009  // Tests TestResult has multiple properties when added.
  2010  TEST_F(UnitTestRecordPropertyTest, MultiplePropertiesFoundWhenAdded) {
  2011    UnitTestRecordProperty("key_1", "1");
  2012    UnitTestRecordProperty("key_2", "2");
  2013  
  2014    ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count());
  2015  
  2016    EXPECT_STREQ("key_1",
  2017                 unit_test_.ad_hoc_test_result().GetTestProperty(0).key());
  2018    EXPECT_STREQ("1", unit_test_.ad_hoc_test_result().GetTestProperty(0).value());
  2019  
  2020    EXPECT_STREQ("key_2",
  2021                 unit_test_.ad_hoc_test_result().GetTestProperty(1).key());
  2022    EXPECT_STREQ("2", unit_test_.ad_hoc_test_result().GetTestProperty(1).value());
  2023  }
  2024  
  2025  // Tests TestResult::RecordProperty() overrides values for duplicate keys.
  2026  TEST_F(UnitTestRecordPropertyTest, OverridesValuesForDuplicateKeys) {
  2027    UnitTestRecordProperty("key_1", "1");
  2028    UnitTestRecordProperty("key_2", "2");
  2029    UnitTestRecordProperty("key_1", "12");
  2030    UnitTestRecordProperty("key_2", "22");
  2031  
  2032    ASSERT_EQ(2, unit_test_.ad_hoc_test_result().test_property_count());
  2033  
  2034    EXPECT_STREQ("key_1",
  2035                 unit_test_.ad_hoc_test_result().GetTestProperty(0).key());
  2036    EXPECT_STREQ("12",
  2037                 unit_test_.ad_hoc_test_result().GetTestProperty(0).value());
  2038  
  2039    EXPECT_STREQ("key_2",
  2040                 unit_test_.ad_hoc_test_result().GetTestProperty(1).key());
  2041    EXPECT_STREQ("22",
  2042                 unit_test_.ad_hoc_test_result().GetTestProperty(1).value());
  2043  }
  2044  
  2045  TEST_F(UnitTestRecordPropertyTest,
  2046         AddFailureInsideTestsWhenUsingTestCaseReservedKeys) {
  2047    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2048        "name");
  2049    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2050        "value_param");
  2051    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2052        "type_param");
  2053    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2054        "status");
  2055    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2056        "time");
  2057    ExpectNonFatalFailureRecordingPropertyWithReservedKeyForCurrentTest(
  2058        "classname");
  2059  }
  2060  
  2061  TEST_F(UnitTestRecordPropertyTest,
  2062         AddRecordWithReservedKeysGeneratesCorrectPropertyList) {
  2063    EXPECT_NONFATAL_FAILURE(
  2064        Test::RecordProperty("name", "1"),
  2065        "'classname', 'name', 'status', 'time', 'type_param', and 'value_param'"
  2066        " are reserved");
  2067  }
  2068  
  2069  class UnitTestRecordPropertyTestEnvironment : public Environment {
  2070   public:
  2071    virtual void TearDown() {
  2072      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2073          "tests");
  2074      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2075          "failures");
  2076      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2077          "disabled");
  2078      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2079          "errors");
  2080      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2081          "name");
  2082      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2083          "timestamp");
  2084      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2085          "time");
  2086      ExpectNonFatalFailureRecordingPropertyWithReservedKeyOutsideOfTestCase(
  2087          "random_seed");
  2088    }
  2089  };
  2090  
  2091  // This will test property recording outside of any test or test case.
  2092  static Environment* record_property_env =
  2093      AddGlobalTestEnvironment(new UnitTestRecordPropertyTestEnvironment);
  2094  
  2095  // This group of tests is for predicate assertions (ASSERT_PRED*, etc)
  2096  // of various arities.  They do not attempt to be exhaustive.  Rather,
  2097  // view them as smoke tests that can be easily reviewed and verified.
  2098  // A more complete set of tests for predicate assertions can be found
  2099  // in gtest_pred_impl_unittest.cc.
  2100  
  2101  // First, some predicates and predicate-formatters needed by the tests.
  2102  
  2103  // Returns true iff the argument is an even number.
  2104  bool IsEven(int n) {
  2105    return (n % 2) == 0;
  2106  }
  2107  
  2108  // A functor that returns true iff the argument is an even number.
  2109  struct IsEvenFunctor {
  2110    bool operator()(int n) { return IsEven(n); }
  2111  };
  2112  
  2113  // A predicate-formatter function that asserts the argument is an even
  2114  // number.
  2115  AssertionResult AssertIsEven(const char* expr, int n) {
  2116    if (IsEven(n)) {
  2117      return AssertionSuccess();
  2118    }
  2119  
  2120    Message msg;
  2121    msg << expr << " evaluates to " << n << ", which is not even.";
  2122    return AssertionFailure(msg);
  2123  }
  2124  
  2125  // A predicate function that returns AssertionResult for use in
  2126  // EXPECT/ASSERT_TRUE/FALSE.
  2127  AssertionResult ResultIsEven(int n) {
  2128    if (IsEven(n))
  2129      return AssertionSuccess() << n << " is even";
  2130    else
  2131      return AssertionFailure() << n << " is odd";
  2132  }
  2133  
  2134  // A predicate function that returns AssertionResult but gives no
  2135  // explanation why it succeeds. Needed for testing that
  2136  // EXPECT/ASSERT_FALSE handles such functions correctly.
  2137  AssertionResult ResultIsEvenNoExplanation(int n) {
  2138    if (IsEven(n))
  2139      return AssertionSuccess();
  2140    else
  2141      return AssertionFailure() << n << " is odd";
  2142  }
  2143  
  2144  // A predicate-formatter functor that asserts the argument is an even
  2145  // number.
  2146  struct AssertIsEvenFunctor {
  2147    AssertionResult operator()(const char* expr, int n) {
  2148      return AssertIsEven(expr, n);
  2149    }
  2150  };
  2151  
  2152  // Returns true iff the sum of the arguments is an even number.
  2153  bool SumIsEven2(int n1, int n2) {
  2154    return IsEven(n1 + n2);
  2155  }
  2156  
  2157  // A functor that returns true iff the sum of the arguments is an even
  2158  // number.
  2159  struct SumIsEven3Functor {
  2160    bool operator()(int n1, int n2, int n3) {
  2161      return IsEven(n1 + n2 + n3);
  2162    }
  2163  };
  2164  
  2165  // A predicate-formatter function that asserts the sum of the
  2166  // arguments is an even number.
  2167  AssertionResult AssertSumIsEven4(
  2168      const char* e1, const char* e2, const char* e3, const char* e4,
  2169      int n1, int n2, int n3, int n4) {
  2170    const int sum = n1 + n2 + n3 + n4;
  2171    if (IsEven(sum)) {
  2172      return AssertionSuccess();
  2173    }
  2174  
  2175    Message msg;
  2176    msg << e1 << " + " << e2 << " + " << e3 << " + " << e4
  2177        << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4
  2178        << ") evaluates to " << sum << ", which is not even.";
  2179    return AssertionFailure(msg);
  2180  }
  2181  
  2182  // A predicate-formatter functor that asserts the sum of the arguments
  2183  // is an even number.
  2184  struct AssertSumIsEven5Functor {
  2185    AssertionResult operator()(
  2186        const char* e1, const char* e2, const char* e3, const char* e4,
  2187        const char* e5, int n1, int n2, int n3, int n4, int n5) {
  2188      const int sum = n1 + n2 + n3 + n4 + n5;
  2189      if (IsEven(sum)) {
  2190        return AssertionSuccess();
  2191      }
  2192  
  2193      Message msg;
  2194      msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
  2195          << " ("
  2196          << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5
  2197          << ") evaluates to " << sum << ", which is not even.";
  2198      return AssertionFailure(msg);
  2199    }
  2200  };
  2201  
  2202  
  2203  // Tests unary predicate assertions.
  2204  
  2205  // Tests unary predicate assertions that don't use a custom formatter.
  2206  TEST(Pred1Test, WithoutFormat) {
  2207    // Success cases.
  2208    EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!";
  2209    ASSERT_PRED1(IsEven, 4);
  2210  
  2211    // Failure cases.
  2212    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2213      EXPECT_PRED1(IsEven, 5) << "This failure is expected.";
  2214    }, "This failure is expected.");
  2215    EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5),
  2216                         "evaluates to false");
  2217  }
  2218  
  2219  // Tests unary predicate assertions that use a custom formatter.
  2220  TEST(Pred1Test, WithFormat) {
  2221    // Success cases.
  2222    EXPECT_PRED_FORMAT1(AssertIsEven, 2);
  2223    ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4)
  2224      << "This failure is UNEXPECTED!";
  2225  
  2226    // Failure cases.
  2227    const int n = 5;
  2228    EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n),
  2229                            "n evaluates to 5, which is not even.");
  2230    EXPECT_FATAL_FAILURE({  // NOLINT
  2231      ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected.";
  2232    }, "This failure is expected.");
  2233  }
  2234  
  2235  // Tests that unary predicate assertions evaluates their arguments
  2236  // exactly once.
  2237  TEST(Pred1Test, SingleEvaluationOnFailure) {
  2238    // A success case.
  2239    static int n = 0;
  2240    EXPECT_PRED1(IsEven, n++);
  2241    EXPECT_EQ(1, n) << "The argument is not evaluated exactly once.";
  2242  
  2243    // A failure case.
  2244    EXPECT_FATAL_FAILURE({  // NOLINT
  2245      ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++)
  2246          << "This failure is expected.";
  2247    }, "This failure is expected.");
  2248    EXPECT_EQ(2, n) << "The argument is not evaluated exactly once.";
  2249  }
  2250  
  2251  
  2252  // Tests predicate assertions whose arity is >= 2.
  2253  
  2254  // Tests predicate assertions that don't use a custom formatter.
  2255  TEST(PredTest, WithoutFormat) {
  2256    // Success cases.
  2257    ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!";
  2258    EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8);
  2259  
  2260    // Failure cases.
  2261    const int n1 = 1;
  2262    const int n2 = 2;
  2263    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2264      EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected.";
  2265    }, "This failure is expected.");
  2266    EXPECT_FATAL_FAILURE({  // NOLINT
  2267      ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4);
  2268    }, "evaluates to false");
  2269  }
  2270  
  2271  // Tests predicate assertions that use a custom formatter.
  2272  TEST(PredTest, WithFormat) {
  2273    // Success cases.
  2274    ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) <<
  2275      "This failure is UNEXPECTED!";
  2276    EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10);
  2277  
  2278    // Failure cases.
  2279    const int n1 = 1;
  2280    const int n2 = 2;
  2281    const int n3 = 4;
  2282    const int n4 = 6;
  2283    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2284      EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4);
  2285    }, "evaluates to 13, which is not even.");
  2286    EXPECT_FATAL_FAILURE({  // NOLINT
  2287      ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8)
  2288          << "This failure is expected.";
  2289    }, "This failure is expected.");
  2290  }
  2291  
  2292  // Tests that predicate assertions evaluates their arguments
  2293  // exactly once.
  2294  TEST(PredTest, SingleEvaluationOnFailure) {
  2295    // A success case.
  2296    int n1 = 0;
  2297    int n2 = 0;
  2298    EXPECT_PRED2(SumIsEven2, n1++, n2++);
  2299    EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
  2300    EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
  2301  
  2302    // Another success case.
  2303    n1 = n2 = 0;
  2304    int n3 = 0;
  2305    int n4 = 0;
  2306    int n5 = 0;
  2307    ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(),
  2308                        n1++, n2++, n3++, n4++, n5++)
  2309                          << "This failure is UNEXPECTED!";
  2310    EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
  2311    EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
  2312    EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
  2313    EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
  2314    EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once.";
  2315  
  2316    // A failure case.
  2317    n1 = n2 = n3 = 0;
  2318    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2319      EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++)
  2320          << "This failure is expected.";
  2321    }, "This failure is expected.");
  2322    EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
  2323    EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
  2324    EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
  2325  
  2326    // Another failure case.
  2327    n1 = n2 = n3 = n4 = 0;
  2328    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2329      EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++);
  2330    }, "evaluates to 1, which is not even.");
  2331    EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
  2332    EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
  2333    EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
  2334    EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
  2335  }
  2336  
  2337  
  2338  // Some helper functions for testing using overloaded/template
  2339  // functions with ASSERT_PREDn and EXPECT_PREDn.
  2340  
  2341  bool IsPositive(double x) {
  2342    return x > 0;
  2343  }
  2344  
  2345  template <typename T>
  2346  bool IsNegative(T x) {
  2347    return x < 0;
  2348  }
  2349  
  2350  template <typename T1, typename T2>
  2351  bool GreaterThan(T1 x1, T2 x2) {
  2352    return x1 > x2;
  2353  }
  2354  
  2355  // Tests that overloaded functions can be used in *_PRED* as long as
  2356  // their types are explicitly specified.
  2357  TEST(PredicateAssertionTest, AcceptsOverloadedFunction) {
  2358    // C++Builder requires C-style casts rather than static_cast.
  2359    EXPECT_PRED1((bool (*)(int))(IsPositive), 5);  // NOLINT
  2360    ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0);  // NOLINT
  2361  }
  2362  
  2363  // Tests that template functions can be used in *_PRED* as long as
  2364  // their types are explicitly specified.
  2365  TEST(PredicateAssertionTest, AcceptsTemplateFunction) {
  2366    EXPECT_PRED1(IsNegative<int>, -5);
  2367    // Makes sure that we can handle templates with more than one
  2368    // parameter.
  2369    ASSERT_PRED2((GreaterThan<int, int>), 5, 0);
  2370  }
  2371  
  2372  
  2373  // Some helper functions for testing using overloaded/template
  2374  // functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn.
  2375  
  2376  AssertionResult IsPositiveFormat(const char* /* expr */, int n) {
  2377    return n > 0 ? AssertionSuccess() :
  2378        AssertionFailure(Message() << "Failure");
  2379  }
  2380  
  2381  AssertionResult IsPositiveFormat(const char* /* expr */, double x) {
  2382    return x > 0 ? AssertionSuccess() :
  2383        AssertionFailure(Message() << "Failure");
  2384  }
  2385  
  2386  template <typename T>
  2387  AssertionResult IsNegativeFormat(const char* /* expr */, T x) {
  2388    return x < 0 ? AssertionSuccess() :
  2389        AssertionFailure(Message() << "Failure");
  2390  }
  2391  
  2392  template <typename T1, typename T2>
  2393  AssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */,
  2394                               const T1& x1, const T2& x2) {
  2395    return x1 == x2 ? AssertionSuccess() :
  2396        AssertionFailure(Message() << "Failure");
  2397  }
  2398  
  2399  // Tests that overloaded functions can be used in *_PRED_FORMAT*
  2400  // without explicitly specifying their types.
  2401  TEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) {
  2402    EXPECT_PRED_FORMAT1(IsPositiveFormat, 5);
  2403    ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0);
  2404  }
  2405  
  2406  // Tests that template functions can be used in *_PRED_FORMAT* without
  2407  // explicitly specifying their types.
  2408  TEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) {
  2409    EXPECT_PRED_FORMAT1(IsNegativeFormat, -5);
  2410    ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3);
  2411  }
  2412  
  2413  
  2414  // Tests string assertions.
  2415  
  2416  // Tests ASSERT_STREQ with non-NULL arguments.
  2417  TEST(StringAssertionTest, ASSERT_STREQ) {
  2418    const char * const p1 = "good";
  2419    ASSERT_STREQ(p1, p1);
  2420  
  2421    // Let p2 have the same content as p1, but be at a different address.
  2422    const char p2[] = "good";
  2423    ASSERT_STREQ(p1, p2);
  2424  
  2425    EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"),
  2426                         "Expected: \"bad\"");
  2427  }
  2428  
  2429  // Tests ASSERT_STREQ with NULL arguments.
  2430  TEST(StringAssertionTest, ASSERT_STREQ_Null) {
  2431    ASSERT_STREQ(static_cast<const char *>(NULL), NULL);
  2432    EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"),
  2433                         "non-null");
  2434  }
  2435  
  2436  // Tests ASSERT_STREQ with NULL arguments.
  2437  TEST(StringAssertionTest, ASSERT_STREQ_Null2) {
  2438    EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL),
  2439                         "non-null");
  2440  }
  2441  
  2442  // Tests ASSERT_STRNE.
  2443  TEST(StringAssertionTest, ASSERT_STRNE) {
  2444    ASSERT_STRNE("hi", "Hi");
  2445    ASSERT_STRNE("Hi", NULL);
  2446    ASSERT_STRNE(NULL, "Hi");
  2447    ASSERT_STRNE("", NULL);
  2448    ASSERT_STRNE(NULL, "");
  2449    ASSERT_STRNE("", "Hi");
  2450    ASSERT_STRNE("Hi", "");
  2451    EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"),
  2452                         "\"Hi\" vs \"Hi\"");
  2453  }
  2454  
  2455  // Tests ASSERT_STRCASEEQ.
  2456  TEST(StringAssertionTest, ASSERT_STRCASEEQ) {
  2457    ASSERT_STRCASEEQ("hi", "Hi");
  2458    ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL);
  2459  
  2460    ASSERT_STRCASEEQ("", "");
  2461    EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"),
  2462                         "(ignoring case)");
  2463  }
  2464  
  2465  // Tests ASSERT_STRCASENE.
  2466  TEST(StringAssertionTest, ASSERT_STRCASENE) {
  2467    ASSERT_STRCASENE("hi1", "Hi2");
  2468    ASSERT_STRCASENE("Hi", NULL);
  2469    ASSERT_STRCASENE(NULL, "Hi");
  2470    ASSERT_STRCASENE("", NULL);
  2471    ASSERT_STRCASENE(NULL, "");
  2472    ASSERT_STRCASENE("", "Hi");
  2473    ASSERT_STRCASENE("Hi", "");
  2474    EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"),
  2475                         "(ignoring case)");
  2476  }
  2477  
  2478  // Tests *_STREQ on wide strings.
  2479  TEST(StringAssertionTest, STREQ_Wide) {
  2480    // NULL strings.
  2481    ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL);
  2482  
  2483    // Empty strings.
  2484    ASSERT_STREQ(L"", L"");
  2485  
  2486    // Non-null vs NULL.
  2487    EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL),
  2488                            "non-null");
  2489  
  2490    // Equal strings.
  2491    EXPECT_STREQ(L"Hi", L"Hi");
  2492  
  2493    // Unequal strings.
  2494    EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"),
  2495                            "Abc");
  2496  
  2497    // Strings containing wide characters.
  2498    EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"),
  2499                            "abc");
  2500  
  2501    // The streaming variation.
  2502    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2503      EXPECT_STREQ(L"abc\x8119", L"abc\x8121") << "Expected failure";
  2504    }, "Expected failure");
  2505  }
  2506  
  2507  // Tests *_STRNE on wide strings.
  2508  TEST(StringAssertionTest, STRNE_Wide) {
  2509    // NULL strings.
  2510    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2511      EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL);
  2512    }, "");
  2513  
  2514    // Empty strings.
  2515    EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""),
  2516                            "L\"\"");
  2517  
  2518    // Non-null vs NULL.
  2519    ASSERT_STRNE(L"non-null", NULL);
  2520  
  2521    // Equal strings.
  2522    EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"),
  2523                            "L\"Hi\"");
  2524  
  2525    // Unequal strings.
  2526    EXPECT_STRNE(L"abc", L"Abc");
  2527  
  2528    // Strings containing wide characters.
  2529    EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"),
  2530                            "abc");
  2531  
  2532    // The streaming variation.
  2533    ASSERT_STRNE(L"abc\x8119", L"abc\x8120") << "This shouldn't happen";
  2534  }
  2535  
  2536  // Tests for ::testing::IsSubstring().
  2537  
  2538  // Tests that IsSubstring() returns the correct result when the input
  2539  // argument type is const char*.
  2540  TEST(IsSubstringTest, ReturnsCorrectResultForCString) {
  2541    EXPECT_FALSE(IsSubstring("", "", NULL, "a"));
  2542    EXPECT_FALSE(IsSubstring("", "", "b", NULL));
  2543    EXPECT_FALSE(IsSubstring("", "", "needle", "haystack"));
  2544  
  2545    EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL));
  2546    EXPECT_TRUE(IsSubstring("", "", "needle", "two needles"));
  2547  }
  2548  
  2549  // Tests that IsSubstring() returns the correct result when the input
  2550  // argument type is const wchar_t*.
  2551  TEST(IsSubstringTest, ReturnsCorrectResultForWideCString) {
  2552    EXPECT_FALSE(IsSubstring("", "", kNull, L"a"));
  2553    EXPECT_FALSE(IsSubstring("", "", L"b", kNull));
  2554    EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack"));
  2555  
  2556    EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL));
  2557    EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles"));
  2558  }
  2559  
  2560  // Tests that IsSubstring() generates the correct message when the input
  2561  // argument type is const char*.
  2562  TEST(IsSubstringTest, GeneratesCorrectMessageForCString) {
  2563    EXPECT_STREQ("Value of: needle_expr\n"
  2564                 "  Actual: \"needle\"\n"
  2565                 "Expected: a substring of haystack_expr\n"
  2566                 "Which is: \"haystack\"",
  2567                 IsSubstring("needle_expr", "haystack_expr",
  2568                             "needle", "haystack").failure_message());
  2569  }
  2570  
  2571  // Tests that IsSubstring returns the correct result when the input
  2572  // argument type is ::std::string.
  2573  TEST(IsSubstringTest, ReturnsCorrectResultsForStdString) {
  2574    EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob"));
  2575    EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world")));
  2576  }
  2577  
  2578  #if GTEST_HAS_STD_WSTRING
  2579  // Tests that IsSubstring returns the correct result when the input
  2580  // argument type is ::std::wstring.
  2581  TEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) {
  2582    EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
  2583    EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack")));
  2584  }
  2585  
  2586  // Tests that IsSubstring() generates the correct message when the input
  2587  // argument type is ::std::wstring.
  2588  TEST(IsSubstringTest, GeneratesCorrectMessageForWstring) {
  2589    EXPECT_STREQ("Value of: needle_expr\n"
  2590                 "  Actual: L\"needle\"\n"
  2591                 "Expected: a substring of haystack_expr\n"
  2592                 "Which is: L\"haystack\"",
  2593                 IsSubstring(
  2594                     "needle_expr", "haystack_expr",
  2595                     ::std::wstring(L"needle"), L"haystack").failure_message());
  2596  }
  2597  
  2598  #endif  // GTEST_HAS_STD_WSTRING
  2599  
  2600  // Tests for ::testing::IsNotSubstring().
  2601  
  2602  // Tests that IsNotSubstring() returns the correct result when the input
  2603  // argument type is const char*.
  2604  TEST(IsNotSubstringTest, ReturnsCorrectResultForCString) {
  2605    EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack"));
  2606    EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles"));
  2607  }
  2608  
  2609  // Tests that IsNotSubstring() returns the correct result when the input
  2610  // argument type is const wchar_t*.
  2611  TEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) {
  2612    EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack"));
  2613    EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles"));
  2614  }
  2615  
  2616  // Tests that IsNotSubstring() generates the correct message when the input
  2617  // argument type is const wchar_t*.
  2618  TEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) {
  2619    EXPECT_STREQ("Value of: needle_expr\n"
  2620                 "  Actual: L\"needle\"\n"
  2621                 "Expected: not a substring of haystack_expr\n"
  2622                 "Which is: L\"two needles\"",
  2623                 IsNotSubstring(
  2624                     "needle_expr", "haystack_expr",
  2625                     L"needle", L"two needles").failure_message());
  2626  }
  2627  
  2628  // Tests that IsNotSubstring returns the correct result when the input
  2629  // argument type is ::std::string.
  2630  TEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) {
  2631    EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob"));
  2632    EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world")));
  2633  }
  2634  
  2635  // Tests that IsNotSubstring() generates the correct message when the input
  2636  // argument type is ::std::string.
  2637  TEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) {
  2638    EXPECT_STREQ("Value of: needle_expr\n"
  2639                 "  Actual: \"needle\"\n"
  2640                 "Expected: not a substring of haystack_expr\n"
  2641                 "Which is: \"two needles\"",
  2642                 IsNotSubstring(
  2643                     "needle_expr", "haystack_expr",
  2644                     ::std::string("needle"), "two needles").failure_message());
  2645  }
  2646  
  2647  #if GTEST_HAS_STD_WSTRING
  2648  
  2649  // Tests that IsNotSubstring returns the correct result when the input
  2650  // argument type is ::std::wstring.
  2651  TEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) {
  2652    EXPECT_FALSE(
  2653        IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
  2654    EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack")));
  2655  }
  2656  
  2657  #endif  // GTEST_HAS_STD_WSTRING
  2658  
  2659  // Tests floating-point assertions.
  2660  
  2661  template <typename RawType>
  2662  class FloatingPointTest : public Test {
  2663   protected:
  2664    // Pre-calculated numbers to be used by the tests.
  2665    struct TestValues {
  2666      RawType close_to_positive_zero;
  2667      RawType close_to_negative_zero;
  2668      RawType further_from_negative_zero;
  2669  
  2670      RawType close_to_one;
  2671      RawType further_from_one;
  2672  
  2673      RawType infinity;
  2674      RawType close_to_infinity;
  2675      RawType further_from_infinity;
  2676  
  2677      RawType nan1;
  2678      RawType nan2;
  2679    };
  2680  
  2681    typedef typename testing::internal::FloatingPoint<RawType> Floating;
  2682    typedef typename Floating::Bits Bits;
  2683  
  2684    virtual void SetUp() {
  2685      const size_t max_ulps = Floating::kMaxUlps;
  2686  
  2687      // The bits that represent 0.0.
  2688      const Bits zero_bits = Floating(0).bits();
  2689  
  2690      // Makes some numbers close to 0.0.
  2691      values_.close_to_positive_zero = Floating::ReinterpretBits(
  2692          zero_bits + max_ulps/2);
  2693      values_.close_to_negative_zero = -Floating::ReinterpretBits(
  2694          zero_bits + max_ulps - max_ulps/2);
  2695      values_.further_from_negative_zero = -Floating::ReinterpretBits(
  2696          zero_bits + max_ulps + 1 - max_ulps/2);
  2697  
  2698      // The bits that represent 1.0.
  2699      const Bits one_bits = Floating(1).bits();
  2700  
  2701      // Makes some numbers close to 1.0.
  2702      values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps);
  2703      values_.further_from_one = Floating::ReinterpretBits(
  2704          one_bits + max_ulps + 1);
  2705  
  2706      // +infinity.
  2707      values_.infinity = Floating::Infinity();
  2708  
  2709      // The bits that represent +infinity.
  2710      const Bits infinity_bits = Floating(values_.infinity).bits();
  2711  
  2712      // Makes some numbers close to infinity.
  2713      values_.close_to_infinity = Floating::ReinterpretBits(
  2714          infinity_bits - max_ulps);
  2715      values_.further_from_infinity = Floating::ReinterpretBits(
  2716          infinity_bits - max_ulps - 1);
  2717  
  2718      // Makes some NAN's.  Sets the most significant bit of the fraction so that
  2719      // our NaN's are quiet; trying to process a signaling NaN would raise an
  2720      // exception if our environment enables floating point exceptions.
  2721      values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask
  2722          | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1);
  2723      values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask
  2724          | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200);
  2725    }
  2726  
  2727    void TestSize() {
  2728      EXPECT_EQ(sizeof(RawType), sizeof(Bits));
  2729    }
  2730  
  2731    static TestValues values_;
  2732  };
  2733  
  2734  template <typename RawType>
  2735  typename FloatingPointTest<RawType>::TestValues
  2736      FloatingPointTest<RawType>::values_;
  2737  
  2738  // Instantiates FloatingPointTest for testing *_FLOAT_EQ.
  2739  typedef FloatingPointTest<float> FloatTest;
  2740  
  2741  // Tests that the size of Float::Bits matches the size of float.
  2742  TEST_F(FloatTest, Size) {
  2743    TestSize();
  2744  }
  2745  
  2746  // Tests comparing with +0 and -0.
  2747  TEST_F(FloatTest, Zeros) {
  2748    EXPECT_FLOAT_EQ(0.0, -0.0);
  2749    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0),
  2750                            "1.0");
  2751    EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5),
  2752                         "1.5");
  2753  }
  2754  
  2755  // Tests comparing numbers close to 0.
  2756  //
  2757  // This ensures that *_FLOAT_EQ handles the sign correctly and no
  2758  // overflow occurs when comparing numbers whose absolute value is very
  2759  // small.
  2760  TEST_F(FloatTest, AlmostZeros) {
  2761    // In C++Builder, names within local classes (such as used by
  2762    // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
  2763    // scoping class.  Use a static local alias as a workaround.
  2764    // We use the assignment syntax since some compilers, like Sun Studio,
  2765    // don't allow initializing references using construction syntax
  2766    // (parentheses).
  2767    static const FloatTest::TestValues& v = this->values_;
  2768  
  2769    EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero);
  2770    EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero);
  2771    EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero);
  2772  
  2773    EXPECT_FATAL_FAILURE({  // NOLINT
  2774      ASSERT_FLOAT_EQ(v.close_to_positive_zero,
  2775                      v.further_from_negative_zero);
  2776    }, "v.further_from_negative_zero");
  2777  }
  2778  
  2779  // Tests comparing numbers close to each other.
  2780  TEST_F(FloatTest, SmallDiff) {
  2781    EXPECT_FLOAT_EQ(1.0, values_.close_to_one);
  2782    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one),
  2783                            "values_.further_from_one");
  2784  }
  2785  
  2786  // Tests comparing numbers far apart.
  2787  TEST_F(FloatTest, LargeDiff) {
  2788    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0),
  2789                            "3.0");
  2790  }
  2791  
  2792  // Tests comparing with infinity.
  2793  //
  2794  // This ensures that no overflow occurs when comparing numbers whose
  2795  // absolute value is very large.
  2796  TEST_F(FloatTest, Infinity) {
  2797    EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity);
  2798    EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity);
  2799  #if !GTEST_OS_SYMBIAN
  2800    // Nokia's STLport crashes if we try to output infinity or NaN.
  2801    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity),
  2802                            "-values_.infinity");
  2803  
  2804    // This is interesting as the representations of infinity and nan1
  2805    // are only 1 DLP apart.
  2806    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1),
  2807                            "values_.nan1");
  2808  #endif  // !GTEST_OS_SYMBIAN
  2809  }
  2810  
  2811  // Tests that comparing with NAN always returns false.
  2812  TEST_F(FloatTest, NaN) {
  2813  #if !GTEST_OS_SYMBIAN
  2814  // Nokia's STLport crashes if we try to output infinity or NaN.
  2815  
  2816    // In C++Builder, names within local classes (such as used by
  2817    // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
  2818    // scoping class.  Use a static local alias as a workaround.
  2819    // We use the assignment syntax since some compilers, like Sun Studio,
  2820    // don't allow initializing references using construction syntax
  2821    // (parentheses).
  2822    static const FloatTest::TestValues& v = this->values_;
  2823  
  2824    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1),
  2825                            "v.nan1");
  2826    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2),
  2827                            "v.nan2");
  2828    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1),
  2829                            "v.nan1");
  2830  
  2831    EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity),
  2832                         "v.infinity");
  2833  #endif  // !GTEST_OS_SYMBIAN
  2834  }
  2835  
  2836  // Tests that *_FLOAT_EQ are reflexive.
  2837  TEST_F(FloatTest, Reflexive) {
  2838    EXPECT_FLOAT_EQ(0.0, 0.0);
  2839    EXPECT_FLOAT_EQ(1.0, 1.0);
  2840    ASSERT_FLOAT_EQ(values_.infinity, values_.infinity);
  2841  }
  2842  
  2843  // Tests that *_FLOAT_EQ are commutative.
  2844  TEST_F(FloatTest, Commutative) {
  2845    // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one).
  2846    EXPECT_FLOAT_EQ(values_.close_to_one, 1.0);
  2847  
  2848    // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one).
  2849    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0),
  2850                            "1.0");
  2851  }
  2852  
  2853  // Tests EXPECT_NEAR.
  2854  TEST_F(FloatTest, EXPECT_NEAR) {
  2855    EXPECT_NEAR(-1.0f, -1.1f, 0.2f);
  2856    EXPECT_NEAR(2.0f, 3.0f, 1.0f);
  2857    EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT
  2858                            "The difference between 1.0f and 1.5f is 0.5, "
  2859                            "which exceeds 0.25f");
  2860    // To work around a bug in gcc 2.95.0, there is intentionally no
  2861    // space after the first comma in the previous line.
  2862  }
  2863  
  2864  // Tests ASSERT_NEAR.
  2865  TEST_F(FloatTest, ASSERT_NEAR) {
  2866    ASSERT_NEAR(-1.0f, -1.1f, 0.2f);
  2867    ASSERT_NEAR(2.0f, 3.0f, 1.0f);
  2868    EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT
  2869                         "The difference between 1.0f and 1.5f is 0.5, "
  2870                         "which exceeds 0.25f");
  2871    // To work around a bug in gcc 2.95.0, there is intentionally no
  2872    // space after the first comma in the previous line.
  2873  }
  2874  
  2875  // Tests the cases where FloatLE() should succeed.
  2876  TEST_F(FloatTest, FloatLESucceeds) {
  2877    EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f);  // When val1 < val2,
  2878    ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f);  // val1 == val2,
  2879  
  2880    // or when val1 is greater than, but almost equals to, val2.
  2881    EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f);
  2882  }
  2883  
  2884  // Tests the cases where FloatLE() should fail.
  2885  TEST_F(FloatTest, FloatLEFails) {
  2886    // When val1 is greater than val2 by a large margin,
  2887    EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f),
  2888                            "(2.0f) <= (1.0f)");
  2889  
  2890    // or by a small yet non-negligible margin,
  2891    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2892      EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f);
  2893    }, "(values_.further_from_one) <= (1.0f)");
  2894  
  2895  #if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
  2896    // Nokia's STLport crashes if we try to output infinity or NaN.
  2897    // C++Builder gives bad results for ordered comparisons involving NaNs
  2898    // due to compiler bugs.
  2899    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2900      EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity);
  2901    }, "(values_.nan1) <= (values_.infinity)");
  2902    EXPECT_NONFATAL_FAILURE({  // NOLINT
  2903      EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1);
  2904    }, "(-values_.infinity) <= (values_.nan1)");
  2905    EXPECT_FATAL_FAILURE({  // NOLINT
  2906      ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1);
  2907    }, "(values_.nan1) <= (values_.nan1)");
  2908  #endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
  2909  }
  2910  
  2911  // Instantiates FloatingPointTest for testing *_DOUBLE_EQ.
  2912  typedef FloatingPointTest<double> DoubleTest;
  2913  
  2914  // Tests that the size of Double::Bits matches the size of double.
  2915  TEST_F(DoubleTest, Size) {
  2916    TestSize();
  2917  }
  2918  
  2919  // Tests comparing with +0 and -0.
  2920  TEST_F(DoubleTest, Zeros) {
  2921    EXPECT_DOUBLE_EQ(0.0, -0.0);
  2922    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0),
  2923                            "1.0");
  2924    EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0),
  2925                         "1.0");
  2926  }
  2927  
  2928  // Tests comparing numbers close to 0.
  2929  //
  2930  // This ensures that *_DOUBLE_EQ handles the sign correctly and no
  2931  // overflow occurs when comparing numbers whose absolute value is very
  2932  // small.
  2933  TEST_F(DoubleTest, AlmostZeros) {
  2934    // In C++Builder, names within local classes (such as used by
  2935    // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
  2936    // scoping class.  Use a static local alias as a workaround.
  2937    // We use the assignment syntax since some compilers, like Sun Studio,
  2938    // don't allow initializing references using construction syntax
  2939    // (parentheses).
  2940    static const DoubleTest::TestValues& v = this->values_;
  2941  
  2942    EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero);
  2943    EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero);
  2944    EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero);
  2945  
  2946    EXPECT_FATAL_FAILURE({  // NOLINT
  2947      ASSERT_DOUBLE_EQ(v.close_to_positive_zero,
  2948                       v.further_from_negative_zero);
  2949    }, "v.further_from_negative_zero");
  2950  }
  2951  
  2952  // Tests comparing numbers close to each other.
  2953  TEST_F(DoubleTest, SmallDiff) {
  2954    EXPECT_DOUBLE_EQ(1.0, values_.close_to_one);
  2955    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one),
  2956                            "values_.further_from_one");
  2957  }
  2958  
  2959  // Tests comparing numbers far apart.
  2960  TEST_F(DoubleTest, LargeDiff) {
  2961    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0),
  2962                            "3.0");
  2963  }
  2964  
  2965  // Tests comparing with infinity.
  2966  //
  2967  // This ensures that no overflow occurs when comparing numbers whose
  2968  // absolute value is very large.
  2969  TEST_F(DoubleTest, Infinity) {
  2970    EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity);
  2971    EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity);
  2972  #if !GTEST_OS_SYMBIAN
  2973    // Nokia's STLport crashes if we try to output infinity or NaN.
  2974    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity),
  2975                            "-values_.infinity");
  2976  
  2977    // This is interesting as the representations of infinity_ and nan1_
  2978    // are only 1 DLP apart.
  2979    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1),
  2980                            "values_.nan1");
  2981  #endif  // !GTEST_OS_SYMBIAN
  2982  }
  2983  
  2984  // Tests that comparing with NAN always returns false.
  2985  TEST_F(DoubleTest, NaN) {
  2986  #if !GTEST_OS_SYMBIAN
  2987    // In C++Builder, names within local classes (such as used by
  2988    // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
  2989    // scoping class.  Use a static local alias as a workaround.
  2990    // We use the assignment syntax since some compilers, like Sun Studio,
  2991    // don't allow initializing references using construction syntax
  2992    // (parentheses).
  2993    static const DoubleTest::TestValues& v = this->values_;
  2994  
  2995    // Nokia's STLport crashes if we try to output infinity or NaN.
  2996    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1),
  2997                            "v.nan1");
  2998    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2");
  2999    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1");
  3000    EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity),
  3001                         "v.infinity");
  3002  #endif  // !GTEST_OS_SYMBIAN
  3003  }
  3004  
  3005  // Tests that *_DOUBLE_EQ are reflexive.
  3006  TEST_F(DoubleTest, Reflexive) {
  3007    EXPECT_DOUBLE_EQ(0.0, 0.0);
  3008    EXPECT_DOUBLE_EQ(1.0, 1.0);
  3009  #if !GTEST_OS_SYMBIAN
  3010    // Nokia's STLport crashes if we try to output infinity or NaN.
  3011    ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity);
  3012  #endif  // !GTEST_OS_SYMBIAN
  3013  }
  3014  
  3015  // Tests that *_DOUBLE_EQ are commutative.
  3016  TEST_F(DoubleTest, Commutative) {
  3017    // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one).
  3018    EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0);
  3019  
  3020    // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one).
  3021    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0),
  3022                            "1.0");
  3023  }
  3024  
  3025  // Tests EXPECT_NEAR.
  3026  TEST_F(DoubleTest, EXPECT_NEAR) {
  3027    EXPECT_NEAR(-1.0, -1.1, 0.2);
  3028    EXPECT_NEAR(2.0, 3.0, 1.0);
  3029    EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25),  // NOLINT
  3030                            "The difference between 1.0 and 1.5 is 0.5, "
  3031                            "which exceeds 0.25");
  3032    // To work around a bug in gcc 2.95.0, there is intentionally no
  3033    // space after the first comma in the previous statement.
  3034  }
  3035  
  3036  // Tests ASSERT_NEAR.
  3037  TEST_F(DoubleTest, ASSERT_NEAR) {
  3038    ASSERT_NEAR(-1.0, -1.1, 0.2);
  3039    ASSERT_NEAR(2.0, 3.0, 1.0);
  3040    EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25),  // NOLINT
  3041                         "The difference between 1.0 and 1.5 is 0.5, "
  3042                         "which exceeds 0.25");
  3043    // To work around a bug in gcc 2.95.0, there is intentionally no
  3044    // space after the first comma in the previous statement.
  3045  }
  3046  
  3047  // Tests the cases where DoubleLE() should succeed.
  3048  TEST_F(DoubleTest, DoubleLESucceeds) {
  3049    EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0);  // When val1 < val2,
  3050    ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0);  // val1 == val2,
  3051  
  3052    // or when val1 is greater than, but almost equals to, val2.
  3053    EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0);
  3054  }
  3055  
  3056  // Tests the cases where DoubleLE() should fail.
  3057  TEST_F(DoubleTest, DoubleLEFails) {
  3058    // When val1 is greater than val2 by a large margin,
  3059    EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0),
  3060                            "(2.0) <= (1.0)");
  3061  
  3062    // or by a small yet non-negligible margin,
  3063    EXPECT_NONFATAL_FAILURE({  // NOLINT
  3064      EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0);
  3065    }, "(values_.further_from_one) <= (1.0)");
  3066  
  3067  #if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
  3068    // Nokia's STLport crashes if we try to output infinity or NaN.
  3069    // C++Builder gives bad results for ordered comparisons involving NaNs
  3070    // due to compiler bugs.
  3071    EXPECT_NONFATAL_FAILURE({  // NOLINT
  3072      EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity);
  3073    }, "(values_.nan1) <= (values_.infinity)");
  3074    EXPECT_NONFATAL_FAILURE({  // NOLINT
  3075      EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1);
  3076    }, " (-values_.infinity) <= (values_.nan1)");
  3077    EXPECT_FATAL_FAILURE({  // NOLINT
  3078      ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1);
  3079    }, "(values_.nan1) <= (values_.nan1)");
  3080  #endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
  3081  }
  3082  
  3083  
  3084  // Verifies that a test or test case whose name starts with DISABLED_ is
  3085  // not run.
  3086  
  3087  // A test whose name starts with DISABLED_.
  3088  // Should not run.
  3089  TEST(DisabledTest, DISABLED_TestShouldNotRun) {
  3090    FAIL() << "Unexpected failure: Disabled test should not be run.";
  3091  }
  3092  
  3093  // A test whose name does not start with DISABLED_.
  3094  // Should run.
  3095  TEST(DisabledTest, NotDISABLED_TestShouldRun) {
  3096    EXPECT_EQ(1, 1);
  3097  }
  3098  
  3099  // A test case whose name starts with DISABLED_.
  3100  // Should not run.
  3101  TEST(DISABLED_TestCase, TestShouldNotRun) {
  3102    FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
  3103  }
  3104  
  3105  // A test case and test whose names start with DISABLED_.
  3106  // Should not run.
  3107  TEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) {
  3108    FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
  3109  }
  3110  
  3111  // Check that when all tests in a test case are disabled, SetupTestCase() and
  3112  // TearDownTestCase() are not called.
  3113  class DisabledTestsTest : public Test {
  3114   protected:
  3115    static void SetUpTestCase() {
  3116      FAIL() << "Unexpected failure: All tests disabled in test case. "
  3117                "SetupTestCase() should not be called.";
  3118    }
  3119  
  3120    static void TearDownTestCase() {
  3121      FAIL() << "Unexpected failure: All tests disabled in test case. "
  3122                "TearDownTestCase() should not be called.";
  3123    }
  3124  };
  3125  
  3126  TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) {
  3127    FAIL() << "Unexpected failure: Disabled test should not be run.";
  3128  }
  3129  
  3130  TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) {
  3131    FAIL() << "Unexpected failure: Disabled test should not be run.";
  3132  }
  3133  
  3134  // Tests that disabled typed tests aren't run.
  3135  
  3136  #if GTEST_HAS_TYPED_TEST
  3137  
  3138  template <typename T>
  3139  class TypedTest : public Test {
  3140  };
  3141  
  3142  typedef testing::Types<int, double> NumericTypes;
  3143  TYPED_TEST_CASE(TypedTest, NumericTypes);
  3144  
  3145  TYPED_TEST(TypedTest, DISABLED_ShouldNotRun) {
  3146    FAIL() << "Unexpected failure: Disabled typed test should not run.";
  3147  }
  3148  
  3149  template <typename T>
  3150  class DISABLED_TypedTest : public Test {
  3151  };
  3152  
  3153  TYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes);
  3154  
  3155  TYPED_TEST(DISABLED_TypedTest, ShouldNotRun) {
  3156    FAIL() << "Unexpected failure: Disabled typed test should not run.";
  3157  }
  3158  
  3159  #endif  // GTEST_HAS_TYPED_TEST
  3160  
  3161  // Tests that disabled type-parameterized tests aren't run.
  3162  
  3163  #if GTEST_HAS_TYPED_TEST_P
  3164  
  3165  template <typename T>
  3166  class TypedTestP : public Test {
  3167  };
  3168  
  3169  TYPED_TEST_CASE_P(TypedTestP);
  3170  
  3171  TYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) {
  3172    FAIL() << "Unexpected failure: "
  3173           << "Disabled type-parameterized test should not run.";
  3174  }
  3175  
  3176  REGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun);
  3177  
  3178  INSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes);
  3179  
  3180  template <typename T>
  3181  class DISABLED_TypedTestP : public Test {
  3182  };
  3183  
  3184  TYPED_TEST_CASE_P(DISABLED_TypedTestP);
  3185  
  3186  TYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) {
  3187    FAIL() << "Unexpected failure: "
  3188           << "Disabled type-parameterized test should not run.";
  3189  }
  3190  
  3191  REGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun);
  3192  
  3193  INSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes);
  3194  
  3195  #endif  // GTEST_HAS_TYPED_TEST_P
  3196  
  3197  // Tests that assertion macros evaluate their arguments exactly once.
  3198  
  3199  class SingleEvaluationTest : public Test {
  3200   public:  // Must be public and not protected due to a bug in g++ 3.4.2.
  3201    // This helper function is needed by the FailedASSERT_STREQ test
  3202    // below.  It's public to work around C++Builder's bug with scoping local
  3203    // classes.
  3204    static void CompareAndIncrementCharPtrs() {
  3205      ASSERT_STREQ(p1_++, p2_++);
  3206    }
  3207  
  3208    // This helper function is needed by the FailedASSERT_NE test below.  It's
  3209    // public to work around C++Builder's bug with scoping local classes.
  3210    static void CompareAndIncrementInts() {
  3211      ASSERT_NE(a_++, b_++);
  3212    }
  3213  
  3214   protected:
  3215    SingleEvaluationTest() {
  3216      p1_ = s1_;
  3217      p2_ = s2_;
  3218      a_ = 0;
  3219      b_ = 0;
  3220    }
  3221  
  3222    static const char* const s1_;
  3223    static const char* const s2_;
  3224    static const char* p1_;
  3225    static const char* p2_;
  3226  
  3227    static int a_;
  3228    static int b_;
  3229  };
  3230  
  3231  const char* const SingleEvaluationTest::s1_ = "01234";
  3232  const char* const SingleEvaluationTest::s2_ = "abcde";
  3233  const char* SingleEvaluationTest::p1_;
  3234  const char* SingleEvaluationTest::p2_;
  3235  int SingleEvaluationTest::a_;
  3236  int SingleEvaluationTest::b_;
  3237  
  3238  // Tests that when ASSERT_STREQ fails, it evaluates its arguments
  3239  // exactly once.
  3240  TEST_F(SingleEvaluationTest, FailedASSERT_STREQ) {
  3241    EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(),
  3242                         "p2_++");
  3243    EXPECT_EQ(s1_ + 1, p1_);
  3244    EXPECT_EQ(s2_ + 1, p2_);
  3245  }
  3246  
  3247  // Tests that string assertion arguments are evaluated exactly once.
  3248  TEST_F(SingleEvaluationTest, ASSERT_STR) {
  3249    // successful EXPECT_STRNE
  3250    EXPECT_STRNE(p1_++, p2_++);
  3251    EXPECT_EQ(s1_ + 1, p1_);
  3252    EXPECT_EQ(s2_ + 1, p2_);
  3253  
  3254    // failed EXPECT_STRCASEEQ
  3255    EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++),
  3256                            "ignoring case");
  3257    EXPECT_EQ(s1_ + 2, p1_);
  3258    EXPECT_EQ(s2_ + 2, p2_);
  3259  }
  3260  
  3261  // Tests that when ASSERT_NE fails, it evaluates its arguments exactly
  3262  // once.
  3263  TEST_F(SingleEvaluationTest, FailedASSERT_NE) {
  3264    EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(),
  3265                         "(a_++) != (b_++)");
  3266    EXPECT_EQ(1, a_);
  3267    EXPECT_EQ(1, b_);
  3268  }
  3269  
  3270  // Tests that assertion arguments are evaluated exactly once.
  3271  TEST_F(SingleEvaluationTest, OtherCases) {
  3272    // successful EXPECT_TRUE
  3273    EXPECT_TRUE(0 == a_++);  // NOLINT
  3274    EXPECT_EQ(1, a_);
  3275  
  3276    // failed EXPECT_TRUE
  3277    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++");
  3278    EXPECT_EQ(2, a_);
  3279  
  3280    // successful EXPECT_GT
  3281    EXPECT_GT(a_++, b_++);
  3282    EXPECT_EQ(3, a_);
  3283    EXPECT_EQ(1, b_);
  3284  
  3285    // failed EXPECT_LT
  3286    EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)");
  3287    EXPECT_EQ(4, a_);
  3288    EXPECT_EQ(2, b_);
  3289  
  3290    // successful ASSERT_TRUE
  3291    ASSERT_TRUE(0 < a_++);  // NOLINT
  3292    EXPECT_EQ(5, a_);
  3293  
  3294    // successful ASSERT_GT
  3295    ASSERT_GT(a_++, b_++);
  3296    EXPECT_EQ(6, a_);
  3297    EXPECT_EQ(3, b_);
  3298  }
  3299  
  3300  #if GTEST_HAS_EXCEPTIONS
  3301  
  3302  void ThrowAnInteger() {
  3303    throw 1;
  3304  }
  3305  
  3306  // Tests that assertion arguments are evaluated exactly once.
  3307  TEST_F(SingleEvaluationTest, ExceptionTests) {
  3308    // successful EXPECT_THROW
  3309    EXPECT_THROW({  // NOLINT
  3310      a_++;
  3311      ThrowAnInteger();
  3312    }, int);
  3313    EXPECT_EQ(1, a_);
  3314  
  3315    // failed EXPECT_THROW, throws different
  3316    EXPECT_NONFATAL_FAILURE(EXPECT_THROW({  // NOLINT
  3317      a_++;
  3318      ThrowAnInteger();
  3319    }, bool), "throws a different type");
  3320    EXPECT_EQ(2, a_);
  3321  
  3322    // failed EXPECT_THROW, throws nothing
  3323    EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing");
  3324    EXPECT_EQ(3, a_);
  3325  
  3326    // successful EXPECT_NO_THROW
  3327    EXPECT_NO_THROW(a_++);
  3328    EXPECT_EQ(4, a_);
  3329  
  3330    // failed EXPECT_NO_THROW
  3331    EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({  // NOLINT
  3332      a_++;
  3333      ThrowAnInteger();
  3334    }), "it throws");
  3335    EXPECT_EQ(5, a_);
  3336  
  3337    // successful EXPECT_ANY_THROW
  3338    EXPECT_ANY_THROW({  // NOLINT
  3339      a_++;
  3340      ThrowAnInteger();
  3341    });
  3342    EXPECT_EQ(6, a_);
  3343  
  3344    // failed EXPECT_ANY_THROW
  3345    EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't");
  3346    EXPECT_EQ(7, a_);
  3347  }
  3348  
  3349  #endif  // GTEST_HAS_EXCEPTIONS
  3350  
  3351  // Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE.
  3352  class NoFatalFailureTest : public Test {
  3353   protected:
  3354    void Succeeds() {}
  3355    void FailsNonFatal() {
  3356      ADD_FAILURE() << "some non-fatal failure";
  3357    }
  3358    void Fails() {
  3359      FAIL() << "some fatal failure";
  3360    }
  3361  
  3362    void DoAssertNoFatalFailureOnFails() {
  3363      ASSERT_NO_FATAL_FAILURE(Fails());
  3364      ADD_FAILURE() << "shold not reach here.";
  3365    }
  3366  
  3367    void DoExpectNoFatalFailureOnFails() {
  3368      EXPECT_NO_FATAL_FAILURE(Fails());
  3369      ADD_FAILURE() << "other failure";
  3370    }
  3371  };
  3372  
  3373  TEST_F(NoFatalFailureTest, NoFailure) {
  3374    EXPECT_NO_FATAL_FAILURE(Succeeds());
  3375    ASSERT_NO_FATAL_FAILURE(Succeeds());
  3376  }
  3377  
  3378  TEST_F(NoFatalFailureTest, NonFatalIsNoFailure) {
  3379    EXPECT_NONFATAL_FAILURE(
  3380        EXPECT_NO_FATAL_FAILURE(FailsNonFatal()),
  3381        "some non-fatal failure");
  3382    EXPECT_NONFATAL_FAILURE(
  3383        ASSERT_NO_FATAL_FAILURE(FailsNonFatal()),
  3384        "some non-fatal failure");
  3385  }
  3386  
  3387  TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) {
  3388    TestPartResultArray gtest_failures;
  3389    {
  3390      ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
  3391      DoAssertNoFatalFailureOnFails();
  3392    }
  3393    ASSERT_EQ(2, gtest_failures.size());
  3394    EXPECT_EQ(TestPartResult::kFatalFailure,
  3395              gtest_failures.GetTestPartResult(0).type());
  3396    EXPECT_EQ(TestPartResult::kFatalFailure,
  3397              gtest_failures.GetTestPartResult(1).type());
  3398    EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
  3399                        gtest_failures.GetTestPartResult(0).message());
  3400    EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
  3401                        gtest_failures.GetTestPartResult(1).message());
  3402  }
  3403  
  3404  TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) {
  3405    TestPartResultArray gtest_failures;
  3406    {
  3407      ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
  3408      DoExpectNoFatalFailureOnFails();
  3409    }
  3410    ASSERT_EQ(3, gtest_failures.size());
  3411    EXPECT_EQ(TestPartResult::kFatalFailure,
  3412              gtest_failures.GetTestPartResult(0).type());
  3413    EXPECT_EQ(TestPartResult::kNonFatalFailure,
  3414              gtest_failures.GetTestPartResult(1).type());
  3415    EXPECT_EQ(TestPartResult::kNonFatalFailure,
  3416              gtest_failures.GetTestPartResult(2).type());
  3417    EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
  3418                        gtest_failures.GetTestPartResult(0).message());
  3419    EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
  3420                        gtest_failures.GetTestPartResult(1).message());
  3421    EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure",
  3422                        gtest_failures.GetTestPartResult(2).message());
  3423  }
  3424  
  3425  TEST_F(NoFatalFailureTest, MessageIsStreamable) {
  3426    TestPartResultArray gtest_failures;
  3427    {
  3428      ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
  3429      EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message";
  3430    }
  3431    ASSERT_EQ(2, gtest_failures.size());
  3432    EXPECT_EQ(TestPartResult::kNonFatalFailure,
  3433              gtest_failures.GetTestPartResult(0).type());
  3434    EXPECT_EQ(TestPartResult::kNonFatalFailure,
  3435              gtest_failures.GetTestPartResult(1).type());
  3436    EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo",
  3437                        gtest_failures.GetTestPartResult(0).message());
  3438    EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message",
  3439                        gtest_failures.GetTestPartResult(1).message());
  3440  }
  3441  
  3442  // Tests non-string assertions.
  3443  
  3444  // Tests EqFailure(), used for implementing *EQ* assertions.
  3445  TEST(AssertionTest, EqFailure) {
  3446    const std::string foo_val("5"), bar_val("6");
  3447    const std::string msg1(
  3448        EqFailure("foo", "bar", foo_val, bar_val, false)
  3449        .failure_message());
  3450    EXPECT_STREQ(
  3451        "Value of: bar\n"
  3452        "  Actual: 6\n"
  3453        "Expected: foo\n"
  3454        "Which is: 5",
  3455        msg1.c_str());
  3456  
  3457    const std::string msg2(
  3458        EqFailure("foo", "6", foo_val, bar_val, false)
  3459        .failure_message());
  3460    EXPECT_STREQ(
  3461        "Value of: 6\n"
  3462        "Expected: foo\n"
  3463        "Which is: 5",
  3464        msg2.c_str());
  3465  
  3466    const std::string msg3(
  3467        EqFailure("5", "bar", foo_val, bar_val, false)
  3468        .failure_message());
  3469    EXPECT_STREQ(
  3470        "Value of: bar\n"
  3471        "  Actual: 6\n"
  3472        "Expected: 5",
  3473        msg3.c_str());
  3474  
  3475    const std::string msg4(
  3476        EqFailure("5", "6", foo_val, bar_val, false).failure_message());
  3477    EXPECT_STREQ(
  3478        "Value of: 6\n"
  3479        "Expected: 5",
  3480        msg4.c_str());
  3481  
  3482    const std::string msg5(
  3483        EqFailure("foo", "bar",
  3484                  std::string("\"x\""), std::string("\"y\""),
  3485                  true).failure_message());
  3486    EXPECT_STREQ(
  3487        "Value of: bar\n"
  3488        "  Actual: \"y\"\n"
  3489        "Expected: foo (ignoring case)\n"
  3490        "Which is: \"x\"",
  3491        msg5.c_str());
  3492  }
  3493  
  3494  // Tests AppendUserMessage(), used for implementing the *EQ* macros.
  3495  TEST(AssertionTest, AppendUserMessage) {
  3496    const std::string foo("foo");
  3497  
  3498    Message msg;
  3499    EXPECT_STREQ("foo",
  3500                 AppendUserMessage(foo, msg).c_str());
  3501  
  3502    msg << "bar";
  3503    EXPECT_STREQ("foo\nbar",
  3504                 AppendUserMessage(foo, msg).c_str());
  3505  }
  3506  
  3507  #ifdef __BORLANDC__
  3508  // Silences warnings: "Condition is always true", "Unreachable code"
  3509  # pragma option push -w-ccc -w-rch
  3510  #endif
  3511  
  3512  // Tests ASSERT_TRUE.
  3513  TEST(AssertionTest, ASSERT_TRUE) {
  3514    ASSERT_TRUE(2 > 1);  // NOLINT
  3515    EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1),
  3516                         "2 < 1");
  3517  }
  3518  
  3519  // Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult.
  3520  TEST(AssertionTest, AssertTrueWithAssertionResult) {
  3521    ASSERT_TRUE(ResultIsEven(2));
  3522  #ifndef __BORLANDC__
  3523    // ICE's in C++Builder.
  3524    EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)),
  3525                         "Value of: ResultIsEven(3)\n"
  3526                         "  Actual: false (3 is odd)\n"
  3527                         "Expected: true");
  3528  #endif
  3529    ASSERT_TRUE(ResultIsEvenNoExplanation(2));
  3530    EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)),
  3531                         "Value of: ResultIsEvenNoExplanation(3)\n"
  3532                         "  Actual: false (3 is odd)\n"
  3533                         "Expected: true");
  3534  }
  3535  
  3536  // Tests ASSERT_FALSE.
  3537  TEST(AssertionTest, ASSERT_FALSE) {
  3538    ASSERT_FALSE(2 < 1);  // NOLINT
  3539    EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1),
  3540                         "Value of: 2 > 1\n"
  3541                         "  Actual: true\n"
  3542                         "Expected: false");
  3543  }
  3544  
  3545  // Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult.
  3546  TEST(AssertionTest, AssertFalseWithAssertionResult) {
  3547    ASSERT_FALSE(ResultIsEven(3));
  3548  #ifndef __BORLANDC__
  3549    // ICE's in C++Builder.
  3550    EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)),
  3551                         "Value of: ResultIsEven(2)\n"
  3552                         "  Actual: true (2 is even)\n"
  3553                         "Expected: false");
  3554  #endif
  3555    ASSERT_FALSE(ResultIsEvenNoExplanation(3));
  3556    EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)),
  3557                         "Value of: ResultIsEvenNoExplanation(2)\n"
  3558                         "  Actual: true\n"
  3559                         "Expected: false");
  3560  }
  3561  
  3562  #ifdef __BORLANDC__
  3563  // Restores warnings after previous "#pragma option push" supressed them
  3564  # pragma option pop
  3565  #endif
  3566  
  3567  // Tests using ASSERT_EQ on double values.  The purpose is to make
  3568  // sure that the specialization we did for integer and anonymous enums
  3569  // isn't used for double arguments.
  3570  TEST(ExpectTest, ASSERT_EQ_Double) {
  3571    // A success.
  3572    ASSERT_EQ(5.6, 5.6);
  3573  
  3574    // A failure.
  3575    EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2),
  3576                         "5.1");
  3577  }
  3578  
  3579  // Tests ASSERT_EQ.
  3580  TEST(AssertionTest, ASSERT_EQ) {
  3581    ASSERT_EQ(5, 2 + 3);
  3582    EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3),
  3583                         "Value of: 2*3\n"
  3584                         "  Actual: 6\n"
  3585                         "Expected: 5");
  3586  }
  3587  
  3588  // Tests ASSERT_EQ(NULL, pointer).
  3589  #if GTEST_CAN_COMPARE_NULL
  3590  TEST(AssertionTest, ASSERT_EQ_NULL) {
  3591    // A success.
  3592    const char* p = NULL;
  3593    // Some older GCC versions may issue a spurious waring in this or the next
  3594    // assertion statement. This warning should not be suppressed with
  3595    // static_cast since the test verifies the ability to use bare NULL as the
  3596    // expected parameter to the macro.
  3597    ASSERT_EQ(NULL, p);
  3598  
  3599    // A failure.
  3600    static int n = 0;
  3601    EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n),
  3602                         "Value of: &n\n");
  3603  }
  3604  #endif  // GTEST_CAN_COMPARE_NULL
  3605  
  3606  // Tests ASSERT_EQ(0, non_pointer).  Since the literal 0 can be
  3607  // treated as a null pointer by the compiler, we need to make sure
  3608  // that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as
  3609  // ASSERT_EQ(static_cast<void*>(NULL), non_pointer).
  3610  TEST(ExpectTest, ASSERT_EQ_0) {
  3611    int n = 0;
  3612  
  3613    // A success.
  3614    ASSERT_EQ(0, n);
  3615  
  3616    // A failure.
  3617    EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6),
  3618                         "Expected: 0");
  3619  }
  3620  
  3621  // Tests ASSERT_NE.
  3622  TEST(AssertionTest, ASSERT_NE) {
  3623    ASSERT_NE(6, 7);
  3624    EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'),
  3625                         "Expected: ('a') != ('a'), "
  3626                         "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
  3627  }
  3628  
  3629  // Tests ASSERT_LE.
  3630  TEST(AssertionTest, ASSERT_LE) {
  3631    ASSERT_LE(2, 3);
  3632    ASSERT_LE(2, 2);
  3633    EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0),
  3634                         "Expected: (2) <= (0), actual: 2 vs 0");
  3635  }
  3636  
  3637  // Tests ASSERT_LT.
  3638  TEST(AssertionTest, ASSERT_LT) {
  3639    ASSERT_LT(2, 3);
  3640    EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2),
  3641                         "Expected: (2) < (2), actual: 2 vs 2");
  3642  }
  3643  
  3644  // Tests ASSERT_GE.
  3645  TEST(AssertionTest, ASSERT_GE) {
  3646    ASSERT_GE(2, 1);
  3647    ASSERT_GE(2, 2);
  3648    EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3),
  3649                         "Expected: (2) >= (3), actual: 2 vs 3");
  3650  }
  3651  
  3652  // Tests ASSERT_GT.
  3653  TEST(AssertionTest, ASSERT_GT) {
  3654    ASSERT_GT(2, 1);
  3655    EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2),
  3656                         "Expected: (2) > (2), actual: 2 vs 2");
  3657  }
  3658  
  3659  #if GTEST_HAS_EXCEPTIONS
  3660  
  3661  void ThrowNothing() {}
  3662  
  3663  // Tests ASSERT_THROW.
  3664  TEST(AssertionTest, ASSERT_THROW) {
  3665    ASSERT_THROW(ThrowAnInteger(), int);
  3666  
  3667  # ifndef __BORLANDC__
  3668  
  3669    // ICE's in C++Builder 2007 and 2009.
  3670    EXPECT_FATAL_FAILURE(
  3671        ASSERT_THROW(ThrowAnInteger(), bool),
  3672        "Expected: ThrowAnInteger() throws an exception of type bool.\n"
  3673        "  Actual: it throws a different type.");
  3674  # endif
  3675  
  3676    EXPECT_FATAL_FAILURE(
  3677        ASSERT_THROW(ThrowNothing(), bool),
  3678        "Expected: ThrowNothing() throws an exception of type bool.\n"
  3679        "  Actual: it throws nothing.");
  3680  }
  3681  
  3682  // Tests ASSERT_NO_THROW.
  3683  TEST(AssertionTest, ASSERT_NO_THROW) {
  3684    ASSERT_NO_THROW(ThrowNothing());
  3685    EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()),
  3686                         "Expected: ThrowAnInteger() doesn't throw an exception."
  3687                         "\n  Actual: it throws.");
  3688  }
  3689  
  3690  // Tests ASSERT_ANY_THROW.
  3691  TEST(AssertionTest, ASSERT_ANY_THROW) {
  3692    ASSERT_ANY_THROW(ThrowAnInteger());
  3693    EXPECT_FATAL_FAILURE(
  3694        ASSERT_ANY_THROW(ThrowNothing()),
  3695        "Expected: ThrowNothing() throws an exception.\n"
  3696        "  Actual: it doesn't.");
  3697  }
  3698  
  3699  #endif  // GTEST_HAS_EXCEPTIONS
  3700  
  3701  // Makes sure we deal with the precedence of <<.  This test should
  3702  // compile.
  3703  TEST(AssertionTest, AssertPrecedence) {
  3704    ASSERT_EQ(1 < 2, true);
  3705    bool false_value = false;
  3706    ASSERT_EQ(true && false_value, false);
  3707  }
  3708  
  3709  // A subroutine used by the following test.
  3710  void TestEq1(int x) {
  3711    ASSERT_EQ(1, x);
  3712  }
  3713  
  3714  // Tests calling a test subroutine that's not part of a fixture.
  3715  TEST(AssertionTest, NonFixtureSubroutine) {
  3716    EXPECT_FATAL_FAILURE(TestEq1(2),
  3717                         "Value of: x");
  3718  }
  3719  
  3720  // An uncopyable class.
  3721  class Uncopyable {
  3722   public:
  3723    explicit Uncopyable(int a_value) : value_(a_value) {}
  3724  
  3725    int value() const { return value_; }
  3726    bool operator==(const Uncopyable& rhs) const {
  3727      return value() == rhs.value();
  3728    }
  3729   private:
  3730    // This constructor deliberately has no implementation, as we don't
  3731    // want this class to be copyable.
  3732    Uncopyable(const Uncopyable&);  // NOLINT
  3733  
  3734    int value_;
  3735  };
  3736  
  3737  ::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) {
  3738    return os << value.value();
  3739  }
  3740  
  3741  
  3742  bool IsPositiveUncopyable(const Uncopyable& x) {
  3743    return x.value() > 0;
  3744  }
  3745  
  3746  // A subroutine used by the following test.
  3747  void TestAssertNonPositive() {
  3748    Uncopyable y(-1);
  3749    ASSERT_PRED1(IsPositiveUncopyable, y);
  3750  }
  3751  // A subroutine used by the following test.
  3752  void TestAssertEqualsUncopyable() {
  3753    Uncopyable x(5);
  3754    Uncopyable y(-1);
  3755    ASSERT_EQ(x, y);
  3756  }
  3757  
  3758  // Tests that uncopyable objects can be used in assertions.
  3759  TEST(AssertionTest, AssertWorksWithUncopyableObject) {
  3760    Uncopyable x(5);
  3761    ASSERT_PRED1(IsPositiveUncopyable, x);
  3762    ASSERT_EQ(x, x);
  3763    EXPECT_FATAL_FAILURE(TestAssertNonPositive(),
  3764      "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
  3765    EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(),
  3766      "Value of: y\n  Actual: -1\nExpected: x\nWhich is: 5");
  3767  }
  3768  
  3769  // Tests that uncopyable objects can be used in expects.
  3770  TEST(AssertionTest, ExpectWorksWithUncopyableObject) {
  3771    Uncopyable x(5);
  3772    EXPECT_PRED1(IsPositiveUncopyable, x);
  3773    Uncopyable y(-1);
  3774    EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y),
  3775      "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
  3776    EXPECT_EQ(x, x);
  3777    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y),
  3778      "Value of: y\n  Actual: -1\nExpected: x\nWhich is: 5");
  3779  }
  3780  
  3781  enum NamedEnum {
  3782    kE1 = 0,
  3783    kE2 = 1
  3784  };
  3785  
  3786  TEST(AssertionTest, NamedEnum) {
  3787    EXPECT_EQ(kE1, kE1);
  3788    EXPECT_LT(kE1, kE2);
  3789    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0");
  3790    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1");
  3791  }
  3792  
  3793  // The version of gcc used in XCode 2.2 has a bug and doesn't allow
  3794  // anonymous enums in assertions.  Therefore the following test is not
  3795  // done on Mac.
  3796  // Sun Studio and HP aCC also reject this code.
  3797  #if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC)
  3798  
  3799  // Tests using assertions with anonymous enums.
  3800  enum {
  3801    kCaseA = -1,
  3802  
  3803  # if GTEST_OS_LINUX
  3804  
  3805    // We want to test the case where the size of the anonymous enum is
  3806    // larger than sizeof(int), to make sure our implementation of the
  3807    // assertions doesn't truncate the enums.  However, MSVC
  3808    // (incorrectly) doesn't allow an enum value to exceed the range of
  3809    // an int, so this has to be conditionally compiled.
  3810    //
  3811    // On Linux, kCaseB and kCaseA have the same value when truncated to
  3812    // int size.  We want to test whether this will confuse the
  3813    // assertions.
  3814    kCaseB = testing::internal::kMaxBiggestInt,
  3815  
  3816  # else
  3817  
  3818    kCaseB = INT_MAX,
  3819  
  3820  # endif  // GTEST_OS_LINUX
  3821  
  3822    kCaseC = 42
  3823  };
  3824  
  3825  TEST(AssertionTest, AnonymousEnum) {
  3826  # if GTEST_OS_LINUX
  3827  
  3828    EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB));
  3829  
  3830  # endif  // GTEST_OS_LINUX
  3831  
  3832    EXPECT_EQ(kCaseA, kCaseA);
  3833    EXPECT_NE(kCaseA, kCaseB);
  3834    EXPECT_LT(kCaseA, kCaseB);
  3835    EXPECT_LE(kCaseA, kCaseB);
  3836    EXPECT_GT(kCaseB, kCaseA);
  3837    EXPECT_GE(kCaseA, kCaseA);
  3838    EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB),
  3839                            "(kCaseA) >= (kCaseB)");
  3840    EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC),
  3841                            "-1 vs 42");
  3842  
  3843    ASSERT_EQ(kCaseA, kCaseA);
  3844    ASSERT_NE(kCaseA, kCaseB);
  3845    ASSERT_LT(kCaseA, kCaseB);
  3846    ASSERT_LE(kCaseA, kCaseB);
  3847    ASSERT_GT(kCaseB, kCaseA);
  3848    ASSERT_GE(kCaseA, kCaseA);
  3849  
  3850  # ifndef __BORLANDC__
  3851  
  3852    // ICE's in C++Builder.
  3853    EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB),
  3854                         "Value of: kCaseB");
  3855    EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
  3856                         "Actual: 42");
  3857  # endif
  3858  
  3859    EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
  3860                         "Which is: -1");
  3861  }
  3862  
  3863  #endif  // !GTEST_OS_MAC && !defined(__SUNPRO_CC)
  3864  
  3865  #if GTEST_OS_WINDOWS
  3866  
  3867  static HRESULT UnexpectedHRESULTFailure() {
  3868    return E_UNEXPECTED;
  3869  }
  3870  
  3871  static HRESULT OkHRESULTSuccess() {
  3872    return S_OK;
  3873  }
  3874  
  3875  static HRESULT FalseHRESULTSuccess() {
  3876    return S_FALSE;
  3877  }
  3878  
  3879  // HRESULT assertion tests test both zero and non-zero
  3880  // success codes as well as failure message for each.
  3881  //
  3882  // Windows CE doesn't support message texts.
  3883  TEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) {
  3884    EXPECT_HRESULT_SUCCEEDED(S_OK);
  3885    EXPECT_HRESULT_SUCCEEDED(S_FALSE);
  3886  
  3887    EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
  3888      "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
  3889      "  Actual: 0x8000FFFF");
  3890  }
  3891  
  3892  TEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) {
  3893    ASSERT_HRESULT_SUCCEEDED(S_OK);
  3894    ASSERT_HRESULT_SUCCEEDED(S_FALSE);
  3895  
  3896    EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
  3897      "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
  3898      "  Actual: 0x8000FFFF");
  3899  }
  3900  
  3901  TEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) {
  3902    EXPECT_HRESULT_FAILED(E_UNEXPECTED);
  3903  
  3904    EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()),
  3905      "Expected: (OkHRESULTSuccess()) fails.\n"
  3906      "  Actual: 0x0");
  3907    EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()),
  3908      "Expected: (FalseHRESULTSuccess()) fails.\n"
  3909      "  Actual: 0x1");
  3910  }
  3911  
  3912  TEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) {
  3913    ASSERT_HRESULT_FAILED(E_UNEXPECTED);
  3914  
  3915  # ifndef __BORLANDC__
  3916  
  3917    // ICE's in C++Builder 2007 and 2009.
  3918    EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()),
  3919      "Expected: (OkHRESULTSuccess()) fails.\n"
  3920      "  Actual: 0x0");
  3921  # endif
  3922  
  3923    EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()),
  3924      "Expected: (FalseHRESULTSuccess()) fails.\n"
  3925      "  Actual: 0x1");
  3926  }
  3927  
  3928  // Tests that streaming to the HRESULT macros works.
  3929  TEST(HRESULTAssertionTest, Streaming) {
  3930    EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
  3931    ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
  3932    EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
  3933    ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
  3934  
  3935    EXPECT_NONFATAL_FAILURE(
  3936        EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
  3937        "expected failure");
  3938  
  3939  # ifndef __BORLANDC__
  3940  
  3941    // ICE's in C++Builder 2007 and 2009.
  3942    EXPECT_FATAL_FAILURE(
  3943        ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
  3944        "expected failure");
  3945  # endif
  3946  
  3947    EXPECT_NONFATAL_FAILURE(
  3948        EXPECT_HRESULT_FAILED(S_OK) << "expected failure",
  3949        "expected failure");
  3950  
  3951    EXPECT_FATAL_FAILURE(
  3952        ASSERT_HRESULT_FAILED(S_OK) << "expected failure",
  3953        "expected failure");
  3954  }
  3955  
  3956  #endif  // GTEST_OS_WINDOWS
  3957  
  3958  #ifdef __BORLANDC__
  3959  // Silences warnings: "Condition is always true", "Unreachable code"
  3960  # pragma option push -w-ccc -w-rch
  3961  #endif
  3962  
  3963  // Tests that the assertion macros behave like single statements.
  3964  TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) {
  3965    if (AlwaysFalse())
  3966      ASSERT_TRUE(false) << "This should never be executed; "
  3967                            "It's a compilation test only.";
  3968  
  3969    if (AlwaysTrue())
  3970      EXPECT_FALSE(false);
  3971    else
  3972      ;  // NOLINT
  3973  
  3974    if (AlwaysFalse())
  3975      ASSERT_LT(1, 3);
  3976  
  3977    if (AlwaysFalse())
  3978      ;  // NOLINT
  3979    else
  3980      EXPECT_GT(3, 2) << "";
  3981  }
  3982  
  3983  #if GTEST_HAS_EXCEPTIONS
  3984  // Tests that the compiler will not complain about unreachable code in the
  3985  // EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros.
  3986  TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) {
  3987    int n = 0;
  3988  
  3989    EXPECT_THROW(throw 1, int);
  3990    EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), "");
  3991    EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), "");
  3992    EXPECT_NO_THROW(n++);
  3993    EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), "");
  3994    EXPECT_ANY_THROW(throw 1);
  3995    EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), "");
  3996  }
  3997  
  3998  TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {
  3999    if (AlwaysFalse())
  4000      EXPECT_THROW(ThrowNothing(), bool);
  4001  
  4002    if (AlwaysTrue())
  4003      EXPECT_THROW(ThrowAnInteger(), int);
  4004    else
  4005      ;  // NOLINT
  4006  
  4007    if (AlwaysFalse())
  4008      EXPECT_NO_THROW(ThrowAnInteger());
  4009  
  4010    if (AlwaysTrue())
  4011      EXPECT_NO_THROW(ThrowNothing());
  4012    else
  4013      ;  // NOLINT
  4014  
  4015    if (AlwaysFalse())
  4016      EXPECT_ANY_THROW(ThrowNothing());
  4017  
  4018    if (AlwaysTrue())
  4019      EXPECT_ANY_THROW(ThrowAnInteger());
  4020    else
  4021      ;  // NOLINT
  4022  }
  4023  #endif  // GTEST_HAS_EXCEPTIONS
  4024  
  4025  TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) {
  4026    if (AlwaysFalse())
  4027      EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. "
  4028                                      << "It's a compilation test only.";
  4029    else
  4030      ;  // NOLINT
  4031  
  4032    if (AlwaysFalse())
  4033      ASSERT_NO_FATAL_FAILURE(FAIL()) << "";
  4034    else
  4035      ;  // NOLINT
  4036  
  4037    if (AlwaysTrue())
  4038      EXPECT_NO_FATAL_FAILURE(SUCCEED());
  4039    else
  4040      ;  // NOLINT
  4041  
  4042    if (AlwaysFalse())
  4043      ;  // NOLINT
  4044    else
  4045      ASSERT_NO_FATAL_FAILURE(SUCCEED());
  4046  }
  4047  
  4048  // Tests that the assertion macros work well with switch statements.
  4049  TEST(AssertionSyntaxTest, WorksWithSwitch) {
  4050    switch (0) {
  4051      case 1:
  4052        break;
  4053      default:
  4054        ASSERT_TRUE(true);
  4055    }
  4056  
  4057    switch (0)
  4058      case 0:
  4059        EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case";
  4060  
  4061    // Binary assertions are implemented using a different code path
  4062    // than the Boolean assertions.  Hence we test them separately.
  4063    switch (0) {
  4064      case 1:
  4065      default:
  4066        ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler";
  4067    }
  4068  
  4069    switch (0)
  4070      case 0:
  4071        EXPECT_NE(1, 2);
  4072  }
  4073  
  4074  #if GTEST_HAS_EXCEPTIONS
  4075  
  4076  void ThrowAString() {
  4077      throw "std::string";
  4078  }
  4079  
  4080  // Test that the exception assertion macros compile and work with const
  4081  // type qualifier.
  4082  TEST(AssertionSyntaxTest, WorksWithConst) {
  4083      ASSERT_THROW(ThrowAString(), const char*);
  4084  
  4085      EXPECT_THROW(ThrowAString(), const char*);
  4086  }
  4087  
  4088  #endif  // GTEST_HAS_EXCEPTIONS
  4089  
  4090  }  // namespace
  4091  
  4092  namespace testing {
  4093  
  4094  // Tests that Google Test tracks SUCCEED*.
  4095  TEST(SuccessfulAssertionTest, SUCCEED) {
  4096    SUCCEED();
  4097    SUCCEED() << "OK";
  4098    EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count());
  4099  }
  4100  
  4101  // Tests that Google Test doesn't track successful EXPECT_*.
  4102  TEST(SuccessfulAssertionTest, EXPECT) {
  4103    EXPECT_TRUE(true);
  4104    EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
  4105  }
  4106  
  4107  // Tests that Google Test doesn't track successful EXPECT_STR*.
  4108  TEST(SuccessfulAssertionTest, EXPECT_STR) {
  4109    EXPECT_STREQ("", "");
  4110    EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
  4111  }
  4112  
  4113  // Tests that Google Test doesn't track successful ASSERT_*.
  4114  TEST(SuccessfulAssertionTest, ASSERT) {
  4115    ASSERT_TRUE(true);
  4116    EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
  4117  }
  4118  
  4119  // Tests that Google Test doesn't track successful ASSERT_STR*.
  4120  TEST(SuccessfulAssertionTest, ASSERT_STR) {
  4121    ASSERT_STREQ("", "");
  4122    EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
  4123  }
  4124  
  4125  }  // namespace testing
  4126  
  4127  namespace {
  4128  
  4129  // Tests the message streaming variation of assertions.
  4130  
  4131  TEST(AssertionWithMessageTest, EXPECT) {
  4132    EXPECT_EQ(1, 1) << "This should succeed.";
  4133    EXPECT_NONFATAL_FAILURE(EXPECT_NE(1, 1) << "Expected failure #1.",
  4134                            "Expected failure #1");
  4135    EXPECT_LE(1, 2) << "This should succeed.";
  4136    EXPECT_NONFATAL_FAILURE(EXPECT_LT(1, 0) << "Expected failure #2.",
  4137                            "Expected failure #2.");
  4138    EXPECT_GE(1, 0) << "This should succeed.";
  4139    EXPECT_NONFATAL_FAILURE(EXPECT_GT(1, 2) << "Expected failure #3.",
  4140                            "Expected failure #3.");
  4141  
  4142    EXPECT_STREQ("1", "1") << "This should succeed.";
  4143    EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("1", "1") << "Expected failure #4.",
  4144                            "Expected failure #4.");
  4145    EXPECT_STRCASEEQ("a", "A") << "This should succeed.";
  4146    EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("a", "A") << "Expected failure #5.",
  4147                            "Expected failure #5.");
  4148  
  4149    EXPECT_FLOAT_EQ(1, 1) << "This should succeed.";
  4150    EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1, 1.2) << "Expected failure #6.",
  4151                            "Expected failure #6.");
  4152    EXPECT_NEAR(1, 1.1, 0.2) << "This should succeed.";
  4153  }
  4154  
  4155  TEST(AssertionWithMessageTest, ASSERT) {
  4156    ASSERT_EQ(1, 1) << "This should succeed.";
  4157    ASSERT_NE(1, 2) << "This should succeed.";
  4158    ASSERT_LE(1, 2) << "This should succeed.";
  4159    ASSERT_LT(1, 2) << "This should succeed.";
  4160    ASSERT_GE(1, 0) << "This should succeed.";
  4161    EXPECT_FATAL_FAILURE(ASSERT_GT(1, 2) << "Expected failure.",
  4162                         "Expected failure.");
  4163  }
  4164  
  4165  TEST(AssertionWithMessageTest, ASSERT_STR) {
  4166    ASSERT_STREQ("1", "1") << "This should succeed.";
  4167    ASSERT_STRNE("1", "2") << "This should succeed.";
  4168    ASSERT_STRCASEEQ("a", "A") << "This should succeed.";
  4169    EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("a", "A") << "Expected failure.",
  4170                         "Expected failure.");
  4171  }
  4172  
  4173  TEST(AssertionWithMessageTest, ASSERT_FLOATING) {
  4174    ASSERT_FLOAT_EQ(1, 1) << "This should succeed.";
  4175    ASSERT_DOUBLE_EQ(1, 1) << "This should succeed.";
  4176    EXPECT_FATAL_FAILURE(ASSERT_NEAR(1,1.2, 0.1) << "Expect failure.",  // NOLINT
  4177                         "Expect failure.");
  4178    // To work around a bug in gcc 2.95.0, there is intentionally no
  4179    // space after the first comma in the previous statement.
  4180  }
  4181  
  4182  // Tests using ASSERT_FALSE with a streamed message.
  4183  TEST(AssertionWithMessageTest, ASSERT_FALSE) {
  4184    ASSERT_FALSE(false) << "This shouldn't fail.";
  4185    EXPECT_FATAL_FAILURE({  // NOLINT
  4186      ASSERT_FALSE(true) << "Expected failure: " << 2 << " > " << 1
  4187                         << " evaluates to " << true;
  4188    }, "Expected failure");
  4189  }
  4190  
  4191  // Tests using FAIL with a streamed message.
  4192  TEST(AssertionWithMessageTest, FAIL) {
  4193    EXPECT_FATAL_FAILURE(FAIL() << 0,
  4194                         "0");
  4195  }
  4196  
  4197  // Tests using SUCCEED with a streamed message.
  4198  TEST(AssertionWithMessageTest, SUCCEED) {
  4199    SUCCEED() << "Success == " << 1;
  4200  }
  4201  
  4202  // Tests using ASSERT_TRUE with a streamed message.
  4203  TEST(AssertionWithMessageTest, ASSERT_TRUE) {
  4204    ASSERT_TRUE(true) << "This should succeed.";
  4205    ASSERT_TRUE(true) << true;
  4206    EXPECT_FATAL_FAILURE({  // NOLINT
  4207      ASSERT_TRUE(false) << static_cast<const char *>(NULL)
  4208                         << static_cast<char *>(NULL);
  4209    }, "(null)(null)");
  4210  }
  4211  
  4212  #if GTEST_OS_WINDOWS
  4213  // Tests using wide strings in assertion messages.
  4214  TEST(AssertionWithMessageTest, WideStringMessage) {
  4215    EXPECT_NONFATAL_FAILURE({  // NOLINT
  4216      EXPECT_TRUE(false) << L"This failure is expected.\x8119";
  4217    }, "This failure is expected.");
  4218    EXPECT_FATAL_FAILURE({  // NOLINT
  4219      ASSERT_EQ(1, 2) << "This failure is "
  4220                      << L"expected too.\x8120";
  4221    }, "This failure is expected too.");
  4222  }
  4223  #endif  // GTEST_OS_WINDOWS
  4224  
  4225  // Tests EXPECT_TRUE.
  4226  TEST(ExpectTest, EXPECT_TRUE) {
  4227    EXPECT_TRUE(true) << "Intentional success";
  4228    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #1.",
  4229                            "Intentional failure #1.");
  4230    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "Intentional failure #2.",
  4231                            "Intentional failure #2.");
  4232    EXPECT_TRUE(2 > 1);  // NOLINT
  4233    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1),
  4234                            "Value of: 2 < 1\n"
  4235                            "  Actual: false\n"
  4236                            "Expected: true");
  4237    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3),
  4238                            "2 > 3");
  4239  }
  4240  
  4241  // Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult.
  4242  TEST(ExpectTest, ExpectTrueWithAssertionResult) {
  4243    EXPECT_TRUE(ResultIsEven(2));
  4244    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)),
  4245                            "Value of: ResultIsEven(3)\n"
  4246                            "  Actual: false (3 is odd)\n"
  4247                            "Expected: true");
  4248    EXPECT_TRUE(ResultIsEvenNoExplanation(2));
  4249    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)),
  4250                            "Value of: ResultIsEvenNoExplanation(3)\n"
  4251                            "  Actual: false (3 is odd)\n"
  4252                            "Expected: true");
  4253  }
  4254  
  4255  // Tests EXPECT_FALSE with a streamed message.
  4256  TEST(ExpectTest, EXPECT_FALSE) {
  4257    EXPECT_FALSE(2 < 1);  // NOLINT
  4258    EXPECT_FALSE(false) << "Intentional success";
  4259    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #1.",
  4260                            "Intentional failure #1.");
  4261    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "Intentional failure #2.",
  4262                            "Intentional failure #2.");
  4263    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1),
  4264                            "Value of: 2 > 1\n"
  4265                            "  Actual: true\n"
  4266                            "Expected: false");
  4267    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3),
  4268                            "2 < 3");
  4269  }
  4270  
  4271  // Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult.
  4272  TEST(ExpectTest, ExpectFalseWithAssertionResult) {
  4273    EXPECT_FALSE(ResultIsEven(3));
  4274    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)),
  4275                            "Value of: ResultIsEven(2)\n"
  4276                            "  Actual: true (2 is even)\n"
  4277                            "Expected: false");
  4278    EXPECT_FALSE(ResultIsEvenNoExplanation(3));
  4279    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)),
  4280                            "Value of: ResultIsEvenNoExplanation(2)\n"
  4281                            "  Actual: true\n"
  4282                            "Expected: false");
  4283  }
  4284  
  4285  #ifdef __BORLANDC__
  4286  // Restores warnings after previous "#pragma option push" supressed them
  4287  # pragma option pop
  4288  #endif
  4289  
  4290  // Tests EXPECT_EQ.
  4291  TEST(ExpectTest, EXPECT_EQ) {
  4292    EXPECT_EQ(5, 2 + 3);
  4293    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3),
  4294                            "Value of: 2*3\n"
  4295                            "  Actual: 6\n"
  4296                            "Expected: 5");
  4297    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3),
  4298                            "2 - 3");
  4299  }
  4300  
  4301  // Tests using EXPECT_EQ on double values.  The purpose is to make
  4302  // sure that the specialization we did for integer and anonymous enums
  4303  // isn't used for double arguments.
  4304  TEST(ExpectTest, EXPECT_EQ_Double) {
  4305    // A success.
  4306    EXPECT_EQ(5.6, 5.6);
  4307  
  4308    // A failure.
  4309    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2),
  4310                            "5.1");
  4311  }
  4312  
  4313  #if GTEST_CAN_COMPARE_NULL
  4314  // Tests EXPECT_EQ(NULL, pointer).
  4315  TEST(ExpectTest, EXPECT_EQ_NULL) {
  4316    // A success.
  4317    const char* p = NULL;
  4318    // Some older GCC versions may issue a spurious warning in this or the next
  4319    // assertion statement. This warning should not be suppressed with
  4320    // static_cast since the test verifies the ability to use bare NULL as the
  4321    // expected parameter to the macro.
  4322    EXPECT_EQ(NULL, p);
  4323  
  4324    // A failure.
  4325    int n = 0;
  4326    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n),
  4327                            "Value of: &n\n");
  4328  }
  4329  #endif  // GTEST_CAN_COMPARE_NULL
  4330  
  4331  // Tests EXPECT_EQ(0, non_pointer).  Since the literal 0 can be
  4332  // treated as a null pointer by the compiler, we need to make sure
  4333  // that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as
  4334  // EXPECT_EQ(static_cast<void*>(NULL), non_pointer).
  4335  TEST(ExpectTest, EXPECT_EQ_0) {
  4336    int n = 0;
  4337  
  4338    // A success.
  4339    EXPECT_EQ(0, n);
  4340  
  4341    // A failure.
  4342    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6),
  4343                            "Expected: 0");
  4344  }
  4345  
  4346  // Tests EXPECT_NE.
  4347  TEST(ExpectTest, EXPECT_NE) {
  4348    EXPECT_NE(6, 7);
  4349  
  4350    EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'),
  4351                            "Expected: ('a') != ('a'), "
  4352                            "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
  4353    EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2),
  4354                            "2");
  4355    char* const p0 = NULL;
  4356    EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0),
  4357                            "p0");
  4358    // Only way to get the Nokia compiler to compile the cast
  4359    // is to have a separate void* variable first. Putting
  4360    // the two casts on the same line doesn't work, neither does
  4361    // a direct C-style to char*.
  4362    void* pv1 = (void*)0x1234;  // NOLINT
  4363    char* const p1 = reinterpret_cast<char*>(pv1);
  4364    EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1),
  4365                            "p1");
  4366  }
  4367  
  4368  // Tests EXPECT_LE.
  4369  TEST(ExpectTest, EXPECT_LE) {
  4370    EXPECT_LE(2, 3);
  4371    EXPECT_LE(2, 2);
  4372    EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0),
  4373                            "Expected: (2) <= (0), actual: 2 vs 0");
  4374    EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9),
  4375                            "(1.1) <= (0.9)");
  4376  }
  4377  
  4378  // Tests EXPECT_LT.
  4379  TEST(ExpectTest, EXPECT_LT) {
  4380    EXPECT_LT(2, 3);
  4381    EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2),
  4382                            "Expected: (2) < (2), actual: 2 vs 2");
  4383    EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1),
  4384                            "(2) < (1)");
  4385  }
  4386  
  4387  // Tests EXPECT_GE.
  4388  TEST(ExpectTest, EXPECT_GE) {
  4389    EXPECT_GE(2, 1);
  4390    EXPECT_GE(2, 2);
  4391    EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3),
  4392                            "Expected: (2) >= (3), actual: 2 vs 3");
  4393    EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1),
  4394                            "(0.9) >= (1.1)");
  4395  }
  4396  
  4397  // Tests EXPECT_GT.
  4398  TEST(ExpectTest, EXPECT_GT) {
  4399    EXPECT_GT(2, 1);
  4400    EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2),
  4401                            "Expected: (2) > (2), actual: 2 vs 2");
  4402    EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3),
  4403                            "(2) > (3)");
  4404  }
  4405  
  4406  #if GTEST_HAS_EXCEPTIONS
  4407  
  4408  // Tests EXPECT_THROW.
  4409  TEST(ExpectTest, EXPECT_THROW) {
  4410    EXPECT_THROW(ThrowAnInteger(), int);
  4411    EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool),
  4412                            "Expected: ThrowAnInteger() throws an exception of "
  4413                            "type bool.\n  Actual: it throws a different type.");
  4414    EXPECT_NONFATAL_FAILURE(
  4415        EXPECT_THROW(ThrowNothing(), bool),
  4416        "Expected: ThrowNothing() throws an exception of type bool.\n"
  4417        "  Actual: it throws nothing.");
  4418  }
  4419  
  4420  // Tests EXPECT_NO_THROW.
  4421  TEST(ExpectTest, EXPECT_NO_THROW) {
  4422    EXPECT_NO_THROW(ThrowNothing());
  4423    EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()),
  4424                            "Expected: ThrowAnInteger() doesn't throw an "
  4425                            "exception.\n  Actual: it throws.");
  4426  }
  4427  
  4428  // Tests EXPECT_ANY_THROW.
  4429  TEST(ExpectTest, EXPECT_ANY_THROW) {
  4430    EXPECT_ANY_THROW(ThrowAnInteger());
  4431    EXPECT_NONFATAL_FAILURE(
  4432        EXPECT_ANY_THROW(ThrowNothing()),
  4433        "Expected: ThrowNothing() throws an exception.\n"
  4434        "  Actual: it doesn't.");
  4435  }
  4436  
  4437  #endif  // GTEST_HAS_EXCEPTIONS
  4438  
  4439  // Make sure we deal with the precedence of <<.
  4440  TEST(ExpectTest, ExpectPrecedence) {
  4441    EXPECT_EQ(1 < 2, true);
  4442    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false),
  4443                            "Value of: true && false");
  4444  }
  4445  
  4446  
  4447  // Tests the StreamableToString() function.
  4448  
  4449  // Tests using StreamableToString() on a scalar.
  4450  TEST(StreamableToStringTest, Scalar) {
  4451    EXPECT_STREQ("5", StreamableToString(5).c_str());
  4452  }
  4453  
  4454  // Tests using StreamableToString() on a non-char pointer.
  4455  TEST(StreamableToStringTest, Pointer) {
  4456    int n = 0;
  4457    int* p = &n;
  4458    EXPECT_STRNE("(null)", StreamableToString(p).c_str());
  4459  }
  4460  
  4461  // Tests using StreamableToString() on a NULL non-char pointer.
  4462  TEST(StreamableToStringTest, NullPointer) {
  4463    int* p = NULL;
  4464    EXPECT_STREQ("(null)", StreamableToString(p).c_str());
  4465  }
  4466  
  4467  // Tests using StreamableToString() on a C string.
  4468  TEST(StreamableToStringTest, CString) {
  4469    EXPECT_STREQ("Foo", StreamableToString("Foo").c_str());
  4470  }
  4471  
  4472  // Tests using StreamableToString() on a NULL C string.
  4473  TEST(StreamableToStringTest, NullCString) {
  4474    char* p = NULL;
  4475    EXPECT_STREQ("(null)", StreamableToString(p).c_str());
  4476  }
  4477  
  4478  // Tests using streamable values as assertion messages.
  4479  
  4480  // Tests using std::string as an assertion message.
  4481  TEST(StreamableTest, string) {
  4482    static const std::string str(
  4483        "This failure message is a std::string, and is expected.");
  4484    EXPECT_FATAL_FAILURE(FAIL() << str,
  4485                         str.c_str());
  4486  }
  4487  
  4488  // Tests that we can output strings containing embedded NULs.
  4489  // Limited to Linux because we can only do this with std::string's.
  4490  TEST(StreamableTest, stringWithEmbeddedNUL) {
  4491    static const char char_array_with_nul[] =
  4492        "Here's a NUL\0 and some more string";
  4493    static const std::string string_with_nul(char_array_with_nul,
  4494                                             sizeof(char_array_with_nul)
  4495                                             - 1);  // drops the trailing NUL
  4496    EXPECT_FATAL_FAILURE(FAIL() << string_with_nul,
  4497                         "Here's a NUL\\0 and some more string");
  4498  }
  4499  
  4500  // Tests that we can output a NUL char.
  4501  TEST(StreamableTest, NULChar) {
  4502    EXPECT_FATAL_FAILURE({  // NOLINT
  4503      FAIL() << "A NUL" << '\0' << " and some more string";
  4504    }, "A NUL\\0 and some more string");
  4505  }
  4506  
  4507  // Tests using int as an assertion message.
  4508  TEST(StreamableTest, int) {
  4509    EXPECT_FATAL_FAILURE(FAIL() << 900913,
  4510                         "900913");
  4511  }
  4512  
  4513  // Tests using NULL char pointer as an assertion message.
  4514  //
  4515  // In MSVC, streaming a NULL char * causes access violation.  Google Test
  4516  // implemented a workaround (substituting "(null)" for NULL).  This
  4517  // tests whether the workaround works.
  4518  TEST(StreamableTest, NullCharPtr) {
  4519    EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL),
  4520                         "(null)");
  4521  }
  4522  
  4523  // Tests that basic IO manipulators (endl, ends, and flush) can be
  4524  // streamed to testing::Message.
  4525  TEST(StreamableTest, BasicIoManip) {
  4526    EXPECT_FATAL_FAILURE({  // NOLINT
  4527      FAIL() << "Line 1." << std::endl
  4528             << "A NUL char " << std::ends << std::flush << " in line 2.";
  4529    }, "Line 1.\nA NUL char \\0 in line 2.");
  4530  }
  4531  
  4532  // Tests the macros that haven't been covered so far.
  4533  
  4534  void AddFailureHelper(bool* aborted) {
  4535    *aborted = true;
  4536    ADD_FAILURE() << "Intentional failure.";
  4537    *aborted = false;
  4538  }
  4539  
  4540  // Tests ADD_FAILURE.
  4541  TEST(MacroTest, ADD_FAILURE) {
  4542    bool aborted = true;
  4543    EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted),
  4544                            "Intentional failure.");
  4545    EXPECT_FALSE(aborted);
  4546  }
  4547  
  4548  // Tests ADD_FAILURE_AT.
  4549  TEST(MacroTest, ADD_FAILURE_AT) {
  4550    // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and
  4551    // the failure message contains the user-streamed part.
  4552    EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!");
  4553  
  4554    // Verifies that the user-streamed part is optional.
  4555    EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed");
  4556  
  4557    // Unfortunately, we cannot verify that the failure message contains
  4558    // the right file path and line number the same way, as
  4559    // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and
  4560    // line number.  Instead, we do that in gtest_output_test_.cc.
  4561  }
  4562  
  4563  // Tests FAIL.
  4564  TEST(MacroTest, FAIL) {
  4565    EXPECT_FATAL_FAILURE(FAIL(),
  4566                         "Failed");
  4567    EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.",
  4568                         "Intentional failure.");
  4569  }
  4570  
  4571  // Tests SUCCEED
  4572  TEST(MacroTest, SUCCEED) {
  4573    SUCCEED();
  4574    SUCCEED() << "Explicit success.";
  4575  }
  4576  
  4577  // Tests for EXPECT_EQ() and ASSERT_EQ().
  4578  //
  4579  // These tests fail *intentionally*, s.t. the failure messages can be
  4580  // generated and tested.
  4581  //
  4582  // We have different tests for different argument types.
  4583  
  4584  // Tests using bool values in {EXPECT|ASSERT}_EQ.
  4585  TEST(EqAssertionTest, Bool) {
  4586    EXPECT_EQ(true,  true);
  4587    EXPECT_FATAL_FAILURE({
  4588        bool false_value = false;
  4589        ASSERT_EQ(false_value, true);
  4590      }, "Value of: true");
  4591  }
  4592  
  4593  // Tests using int values in {EXPECT|ASSERT}_EQ.
  4594  TEST(EqAssertionTest, Int) {
  4595    ASSERT_EQ(32, 32);
  4596    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33),
  4597                            "33");
  4598  }
  4599  
  4600  // Tests using time_t values in {EXPECT|ASSERT}_EQ.
  4601  TEST(EqAssertionTest, Time_T) {
  4602    EXPECT_EQ(static_cast<time_t>(0),
  4603              static_cast<time_t>(0));
  4604    EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0),
  4605                                   static_cast<time_t>(1234)),
  4606                         "1234");
  4607  }
  4608  
  4609  // Tests using char values in {EXPECT|ASSERT}_EQ.
  4610  TEST(EqAssertionTest, Char) {
  4611    ASSERT_EQ('z', 'z');
  4612    const char ch = 'b';
  4613    EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch),
  4614                            "ch");
  4615    EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch),
  4616                            "ch");
  4617  }
  4618  
  4619  // Tests using wchar_t values in {EXPECT|ASSERT}_EQ.
  4620  TEST(EqAssertionTest, WideChar) {
  4621    EXPECT_EQ(L'b', L'b');
  4622  
  4623    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'),
  4624                            "Value of: L'x'\n"
  4625                            "  Actual: L'x' (120, 0x78)\n"
  4626                            "Expected: L'\0'\n"
  4627                            "Which is: L'\0' (0, 0x0)");
  4628  
  4629    static wchar_t wchar;
  4630    wchar = L'b';
  4631    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar),
  4632                            "wchar");
  4633    wchar = 0x8119;
  4634    EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar),
  4635                         "Value of: wchar");
  4636  }
  4637  
  4638  // Tests using ::std::string values in {EXPECT|ASSERT}_EQ.
  4639  TEST(EqAssertionTest, StdString) {
  4640    // Compares a const char* to an std::string that has identical
  4641    // content.
  4642    ASSERT_EQ("Test", ::std::string("Test"));
  4643  
  4644    // Compares two identical std::strings.
  4645    static const ::std::string str1("A * in the middle");
  4646    static const ::std::string str2(str1);
  4647    EXPECT_EQ(str1, str2);
  4648  
  4649    // Compares a const char* to an std::string that has different
  4650    // content
  4651    EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")),
  4652                            "\"test\"");
  4653  
  4654    // Compares an std::string to a char* that has different content.
  4655    char* const p1 = const_cast<char*>("foo");
  4656    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1),
  4657                            "p1");
  4658  
  4659    // Compares two std::strings that have different contents, one of
  4660    // which having a NUL character in the middle.  This should fail.
  4661    static ::std::string str3(str1);
  4662    str3.at(2) = '\0';
  4663    EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3),
  4664                         "Value of: str3\n"
  4665                         "  Actual: \"A \\0 in the middle\"");
  4666  }
  4667  
  4668  #if GTEST_HAS_STD_WSTRING
  4669  
  4670  // Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ.
  4671  TEST(EqAssertionTest, StdWideString) {
  4672    // Compares two identical std::wstrings.
  4673    const ::std::wstring wstr1(L"A * in the middle");
  4674    const ::std::wstring wstr2(wstr1);
  4675    ASSERT_EQ(wstr1, wstr2);
  4676  
  4677    // Compares an std::wstring to a const wchar_t* that has identical
  4678    // content.
  4679    const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' };
  4680    EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119);
  4681  
  4682    // Compares an std::wstring to a const wchar_t* that has different
  4683    // content.
  4684    const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' };
  4685    EXPECT_NONFATAL_FAILURE({  // NOLINT
  4686      EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120);
  4687    }, "kTestX8120");
  4688  
  4689    // Compares two std::wstrings that have different contents, one of
  4690    // which having a NUL character in the middle.
  4691    ::std::wstring wstr3(wstr1);
  4692    wstr3.at(2) = L'\0';
  4693    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3),
  4694                            "wstr3");
  4695  
  4696    // Compares a wchar_t* to an std::wstring that has different
  4697    // content.
  4698    EXPECT_FATAL_FAILURE({  // NOLINT
  4699      ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar"));
  4700    }, "");
  4701  }
  4702  
  4703  #endif  // GTEST_HAS_STD_WSTRING
  4704  
  4705  #if GTEST_HAS_GLOBAL_STRING
  4706  // Tests using ::string values in {EXPECT|ASSERT}_EQ.
  4707  TEST(EqAssertionTest, GlobalString) {
  4708    // Compares a const char* to a ::string that has identical content.
  4709    EXPECT_EQ("Test", ::string("Test"));
  4710  
  4711    // Compares two identical ::strings.
  4712    const ::string str1("A * in the middle");
  4713    const ::string str2(str1);
  4714    ASSERT_EQ(str1, str2);
  4715  
  4716    // Compares a ::string to a const char* that has different content.
  4717    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"),
  4718                            "test");
  4719  
  4720    // Compares two ::strings that have different contents, one of which
  4721    // having a NUL character in the middle.
  4722    ::string str3(str1);
  4723    str3.at(2) = '\0';
  4724    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3),
  4725                            "str3");
  4726  
  4727    // Compares a ::string to a char* that has different content.
  4728    EXPECT_FATAL_FAILURE({  // NOLINT
  4729      ASSERT_EQ(::string("bar"), const_cast<char*>("foo"));
  4730    }, "");
  4731  }
  4732  
  4733  #endif  // GTEST_HAS_GLOBAL_STRING
  4734  
  4735  #if GTEST_HAS_GLOBAL_WSTRING
  4736  
  4737  // Tests using ::wstring values in {EXPECT|ASSERT}_EQ.
  4738  TEST(EqAssertionTest, GlobalWideString) {
  4739    // Compares two identical ::wstrings.
  4740    static const ::wstring wstr1(L"A * in the middle");
  4741    static const ::wstring wstr2(wstr1);
  4742    EXPECT_EQ(wstr1, wstr2);
  4743  
  4744    // Compares a const wchar_t* to a ::wstring that has identical content.
  4745    const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' };
  4746    ASSERT_EQ(kTestX8119, ::wstring(kTestX8119));
  4747  
  4748    // Compares a const wchar_t* to a ::wstring that has different
  4749    // content.
  4750    const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' };
  4751    EXPECT_NONFATAL_FAILURE({  // NOLINT
  4752      EXPECT_EQ(kTestX8120, ::wstring(kTestX8119));
  4753    }, "Test\\x8119");
  4754  
  4755    // Compares a wchar_t* to a ::wstring that has different content.
  4756    wchar_t* const p1 = const_cast<wchar_t*>(L"foo");
  4757    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")),
  4758                            "bar");
  4759  
  4760    // Compares two ::wstrings that have different contents, one of which
  4761    // having a NUL character in the middle.
  4762    static ::wstring wstr3;
  4763    wstr3 = wstr1;
  4764    wstr3.at(2) = L'\0';
  4765    EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3),
  4766                         "wstr3");
  4767  }
  4768  
  4769  #endif  // GTEST_HAS_GLOBAL_WSTRING
  4770  
  4771  // Tests using char pointers in {EXPECT|ASSERT}_EQ.
  4772  TEST(EqAssertionTest, CharPointer) {
  4773    char* const p0 = NULL;
  4774    // Only way to get the Nokia compiler to compile the cast
  4775    // is to have a separate void* variable first. Putting
  4776    // the two casts on the same line doesn't work, neither does
  4777    // a direct C-style to char*.
  4778    void* pv1 = (void*)0x1234;  // NOLINT
  4779    void* pv2 = (void*)0xABC0;  // NOLINT
  4780    char* const p1 = reinterpret_cast<char*>(pv1);
  4781    char* const p2 = reinterpret_cast<char*>(pv2);
  4782    ASSERT_EQ(p1, p1);
  4783  
  4784    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
  4785                            "Value of: p2");
  4786    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
  4787                            "p2");
  4788    EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234),
  4789                                   reinterpret_cast<char*>(0xABC0)),
  4790                         "ABC0");
  4791  }
  4792  
  4793  // Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ.
  4794  TEST(EqAssertionTest, WideCharPointer) {
  4795    wchar_t* const p0 = NULL;
  4796    // Only way to get the Nokia compiler to compile the cast
  4797    // is to have a separate void* variable first. Putting
  4798    // the two casts on the same line doesn't work, neither does
  4799    // a direct C-style to char*.
  4800    void* pv1 = (void*)0x1234;  // NOLINT
  4801    void* pv2 = (void*)0xABC0;  // NOLINT
  4802    wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1);
  4803    wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2);
  4804    EXPECT_EQ(p0, p0);
  4805  
  4806    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
  4807                            "Value of: p2");
  4808    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
  4809                            "p2");
  4810    void* pv3 = (void*)0x1234;  // NOLINT
  4811    void* pv4 = (void*)0xABC0;  // NOLINT
  4812    const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3);
  4813    const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4);
  4814    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4),
  4815                            "p4");
  4816  }
  4817  
  4818  // Tests using other types of pointers in {EXPECT|ASSERT}_EQ.
  4819  TEST(EqAssertionTest, OtherPointer) {
  4820    ASSERT_EQ(static_cast<const int*>(NULL),
  4821              static_cast<const int*>(NULL));
  4822    EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL),
  4823                                   reinterpret_cast<const int*>(0x1234)),
  4824                         "0x1234");
  4825  }
  4826  
  4827  // A class that supports binary comparison operators but not streaming.
  4828  class UnprintableChar {
  4829   public:
  4830    explicit UnprintableChar(char ch) : char_(ch) {}
  4831  
  4832    bool operator==(const UnprintableChar& rhs) const {
  4833      return char_ == rhs.char_;
  4834    }
  4835    bool operator!=(const UnprintableChar& rhs) const {
  4836      return char_ != rhs.char_;
  4837    }
  4838    bool operator<(const UnprintableChar& rhs) const {
  4839      return char_ < rhs.char_;
  4840    }
  4841    bool operator<=(const UnprintableChar& rhs) const {
  4842      return char_ <= rhs.char_;
  4843    }
  4844    bool operator>(const UnprintableChar& rhs) const {
  4845      return char_ > rhs.char_;
  4846    }
  4847    bool operator>=(const UnprintableChar& rhs) const {
  4848      return char_ >= rhs.char_;
  4849    }
  4850  
  4851   private:
  4852    char char_;
  4853  };
  4854  
  4855  // Tests that ASSERT_EQ() and friends don't require the arguments to
  4856  // be printable.
  4857  TEST(ComparisonAssertionTest, AcceptsUnprintableArgs) {
  4858    const UnprintableChar x('x'), y('y');
  4859    ASSERT_EQ(x, x);
  4860    EXPECT_NE(x, y);
  4861    ASSERT_LT(x, y);
  4862    EXPECT_LE(x, y);
  4863    ASSERT_GT(y, x);
  4864    EXPECT_GE(x, x);
  4865  
  4866    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>");
  4867    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>");
  4868    EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>");
  4869    EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>");
  4870    EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>");
  4871  
  4872    // Code tested by EXPECT_FATAL_FAILURE cannot reference local
  4873    // variables, so we have to write UnprintableChar('x') instead of x.
  4874  #ifndef __BORLANDC__
  4875    // ICE's in C++Builder.
  4876    EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')),
  4877                         "1-byte object <78>");
  4878    EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
  4879                         "1-byte object <78>");
  4880  #endif
  4881    EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
  4882                         "1-byte object <79>");
  4883    EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),
  4884                         "1-byte object <78>");
  4885    EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),
  4886                         "1-byte object <79>");
  4887  }
  4888  
  4889  // Tests the FRIEND_TEST macro.
  4890  
  4891  // This class has a private member we want to test.  We will test it
  4892  // both in a TEST and in a TEST_F.
  4893  class Foo {
  4894   public:
  4895    Foo() {}
  4896  
  4897   private:
  4898    int Bar() const { return 1; }
  4899  
  4900    // Declares the friend tests that can access the private member
  4901    // Bar().
  4902    FRIEND_TEST(FRIEND_TEST_Test, TEST);
  4903    FRIEND_TEST(FRIEND_TEST_Test2, TEST_F);
  4904  };
  4905  
  4906  // Tests that the FRIEND_TEST declaration allows a TEST to access a
  4907  // class's private members.  This should compile.
  4908  TEST(FRIEND_TEST_Test, TEST) {
  4909    ASSERT_EQ(1, Foo().Bar());
  4910  }
  4911  
  4912  // The fixture needed to test using FRIEND_TEST with TEST_F.
  4913  class FRIEND_TEST_Test2 : public Test {
  4914   protected:
  4915    Foo foo;
  4916  };
  4917  
  4918  // Tests that the FRIEND_TEST declaration allows a TEST_F to access a
  4919  // class's private members.  This should compile.
  4920  TEST_F(FRIEND_TEST_Test2, TEST_F) {
  4921    ASSERT_EQ(1, foo.Bar());
  4922  }
  4923  
  4924  // Tests the life cycle of Test objects.
  4925  
  4926  // The test fixture for testing the life cycle of Test objects.
  4927  //
  4928  // This class counts the number of live test objects that uses this
  4929  // fixture.
  4930  class TestLifeCycleTest : public Test {
  4931   protected:
  4932    // Constructor.  Increments the number of test objects that uses
  4933    // this fixture.
  4934    TestLifeCycleTest() { count_++; }
  4935  
  4936    // Destructor.  Decrements the number of test objects that uses this
  4937    // fixture.
  4938    ~TestLifeCycleTest() { count_--; }
  4939  
  4940    // Returns the number of live test objects that uses this fixture.
  4941    int count() const { return count_; }
  4942  
  4943   private:
  4944    static int count_;
  4945  };
  4946  
  4947  int TestLifeCycleTest::count_ = 0;
  4948  
  4949  // Tests the life cycle of test objects.
  4950  TEST_F(TestLifeCycleTest, Test1) {
  4951    // There should be only one test object in this test case that's
  4952    // currently alive.
  4953    ASSERT_EQ(1, count());
  4954  }
  4955  
  4956  // Tests the life cycle of test objects.
  4957  TEST_F(TestLifeCycleTest, Test2) {
  4958    // After Test1 is done and Test2 is started, there should still be
  4959    // only one live test object, as the object for Test1 should've been
  4960    // deleted.
  4961    ASSERT_EQ(1, count());
  4962  }
  4963  
  4964  }  // namespace
  4965  
  4966  // Tests that the copy constructor works when it is NOT optimized away by
  4967  // the compiler.
  4968  TEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) {
  4969    // Checks that the copy constructor doesn't try to dereference NULL pointers
  4970    // in the source object.
  4971    AssertionResult r1 = AssertionSuccess();
  4972    AssertionResult r2 = r1;
  4973    // The following line is added to prevent the compiler from optimizing
  4974    // away the constructor call.
  4975    r1 << "abc";
  4976  
  4977    AssertionResult r3 = r1;
  4978    EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1));
  4979    EXPECT_STREQ("abc", r1.message());
  4980  }
  4981  
  4982  // Tests that AssertionSuccess and AssertionFailure construct
  4983  // AssertionResult objects as expected.
  4984  TEST(AssertionResultTest, ConstructionWorks) {
  4985    AssertionResult r1 = AssertionSuccess();
  4986    EXPECT_TRUE(r1);
  4987    EXPECT_STREQ("", r1.message());
  4988  
  4989    AssertionResult r2 = AssertionSuccess() << "abc";
  4990    EXPECT_TRUE(r2);
  4991    EXPECT_STREQ("abc", r2.message());
  4992  
  4993    AssertionResult r3 = AssertionFailure();
  4994    EXPECT_FALSE(r3);
  4995    EXPECT_STREQ("", r3.message());
  4996  
  4997    AssertionResult r4 = AssertionFailure() << "def";
  4998    EXPECT_FALSE(r4);
  4999    EXPECT_STREQ("def", r4.message());
  5000  
  5001    AssertionResult r5 = AssertionFailure(Message() << "ghi");
  5002    EXPECT_FALSE(r5);
  5003    EXPECT_STREQ("ghi", r5.message());
  5004  }
  5005  
  5006  // Tests that the negation flips the predicate result but keeps the message.
  5007  TEST(AssertionResultTest, NegationWorks) {
  5008    AssertionResult r1 = AssertionSuccess() << "abc";
  5009    EXPECT_FALSE(!r1);
  5010    EXPECT_STREQ("abc", (!r1).message());
  5011  
  5012    AssertionResult r2 = AssertionFailure() << "def";
  5013    EXPECT_TRUE(!r2);
  5014    EXPECT_STREQ("def", (!r2).message());
  5015  }
  5016  
  5017  TEST(AssertionResultTest, StreamingWorks) {
  5018    AssertionResult r = AssertionSuccess();
  5019    r << "abc" << 'd' << 0 << true;
  5020    EXPECT_STREQ("abcd0true", r.message());
  5021  }
  5022  
  5023  TEST(AssertionResultTest, CanStreamOstreamManipulators) {
  5024    AssertionResult r = AssertionSuccess();
  5025    r << "Data" << std::endl << std::flush << std::ends << "Will be visible";
  5026    EXPECT_STREQ("Data\n\\0Will be visible", r.message());
  5027  }
  5028  
  5029  // Tests streaming a user type whose definition and operator << are
  5030  // both in the global namespace.
  5031  class Base {
  5032   public:
  5033    explicit Base(int an_x) : x_(an_x) {}
  5034    int x() const { return x_; }
  5035   private:
  5036    int x_;
  5037  };
  5038  std::ostream& operator<<(std::ostream& os,
  5039                           const Base& val) {
  5040    return os << val.x();
  5041  }
  5042  std::ostream& operator<<(std::ostream& os,
  5043                           const Base* pointer) {
  5044    return os << "(" << pointer->x() << ")";
  5045  }
  5046  
  5047  TEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) {
  5048    Message msg;
  5049    Base a(1);
  5050  
  5051    msg << a << &a;  // Uses ::operator<<.
  5052    EXPECT_STREQ("1(1)", msg.GetString().c_str());
  5053  }
  5054  
  5055  // Tests streaming a user type whose definition and operator<< are
  5056  // both in an unnamed namespace.
  5057  namespace {
  5058  class MyTypeInUnnamedNameSpace : public Base {
  5059   public:
  5060    explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {}
  5061  };
  5062  std::ostream& operator<<(std::ostream& os,
  5063                           const MyTypeInUnnamedNameSpace& val) {
  5064    return os << val.x();
  5065  }
  5066  std::ostream& operator<<(std::ostream& os,
  5067                           const MyTypeInUnnamedNameSpace* pointer) {
  5068    return os << "(" << pointer->x() << ")";
  5069  }
  5070  }  // namespace
  5071  
  5072  TEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) {
  5073    Message msg;
  5074    MyTypeInUnnamedNameSpace a(1);
  5075  
  5076    msg << a << &a;  // Uses <unnamed_namespace>::operator<<.
  5077    EXPECT_STREQ("1(1)", msg.GetString().c_str());
  5078  }
  5079  
  5080  // Tests streaming a user type whose definition and operator<< are
  5081  // both in a user namespace.
  5082  namespace namespace1 {
  5083  class MyTypeInNameSpace1 : public Base {
  5084   public:
  5085    explicit MyTypeInNameSpace1(int an_x): Base(an_x) {}
  5086  };
  5087  std::ostream& operator<<(std::ostream& os,
  5088                           const MyTypeInNameSpace1& val) {
  5089    return os << val.x();
  5090  }
  5091  std::ostream& operator<<(std::ostream& os,
  5092                           const MyTypeInNameSpace1* pointer) {
  5093    return os << "(" << pointer->x() << ")";
  5094  }
  5095  }  // namespace namespace1
  5096  
  5097  TEST(MessageTest, CanStreamUserTypeInUserNameSpace) {
  5098    Message msg;
  5099    namespace1::MyTypeInNameSpace1 a(1);
  5100  
  5101    msg << a << &a;  // Uses namespace1::operator<<.
  5102    EXPECT_STREQ("1(1)", msg.GetString().c_str());
  5103  }
  5104  
  5105  // Tests streaming a user type whose definition is in a user namespace
  5106  // but whose operator<< is in the global namespace.
  5107  namespace namespace2 {
  5108  class MyTypeInNameSpace2 : public ::Base {
  5109   public:
  5110    explicit MyTypeInNameSpace2(int an_x): Base(an_x) {}
  5111  };
  5112  }  // namespace namespace2
  5113  std::ostream& operator<<(std::ostream& os,
  5114                           const namespace2::MyTypeInNameSpace2& val) {
  5115    return os << val.x();
  5116  }
  5117  std::ostream& operator<<(std::ostream& os,
  5118                           const namespace2::MyTypeInNameSpace2* pointer) {
  5119    return os << "(" << pointer->x() << ")";
  5120  }
  5121  
  5122  TEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) {
  5123    Message msg;
  5124    namespace2::MyTypeInNameSpace2 a(1);
  5125  
  5126    msg << a << &a;  // Uses ::operator<<.
  5127    EXPECT_STREQ("1(1)", msg.GetString().c_str());
  5128  }
  5129  
  5130  // Tests streaming NULL pointers to testing::Message.
  5131  TEST(MessageTest, NullPointers) {
  5132    Message msg;
  5133    char* const p1 = NULL;
  5134    unsigned char* const p2 = NULL;
  5135    int* p3 = NULL;
  5136    double* p4 = NULL;
  5137    bool* p5 = NULL;
  5138    Message* p6 = NULL;
  5139  
  5140    msg << p1 << p2 << p3 << p4 << p5 << p6;
  5141    ASSERT_STREQ("(null)(null)(null)(null)(null)(null)",
  5142                 msg.GetString().c_str());
  5143  }
  5144  
  5145  // Tests streaming wide strings to testing::Message.
  5146  TEST(MessageTest, WideStrings) {
  5147    // Streams a NULL of type const wchar_t*.
  5148    const wchar_t* const_wstr = NULL;
  5149    EXPECT_STREQ("(null)",
  5150                 (Message() << const_wstr).GetString().c_str());
  5151  
  5152    // Streams a NULL of type wchar_t*.
  5153    wchar_t* wstr = NULL;
  5154    EXPECT_STREQ("(null)",
  5155                 (Message() << wstr).GetString().c_str());
  5156  
  5157    // Streams a non-NULL of type const wchar_t*.
  5158    const_wstr = L"abc\x8119";
  5159    EXPECT_STREQ("abc\xe8\x84\x99",
  5160                 (Message() << const_wstr).GetString().c_str());
  5161  
  5162    // Streams a non-NULL of type wchar_t*.
  5163    wstr = const_cast<wchar_t*>(const_wstr);
  5164    EXPECT_STREQ("abc\xe8\x84\x99",
  5165                 (Message() << wstr).GetString().c_str());
  5166  }
  5167  
  5168  
  5169  // This line tests that we can define tests in the testing namespace.
  5170  namespace testing {
  5171  
  5172  // Tests the TestInfo class.
  5173  
  5174  class TestInfoTest : public Test {
  5175   protected:
  5176    static const TestInfo* GetTestInfo(const char* test_name) {
  5177      const TestCase* const test_case = GetUnitTestImpl()->
  5178          GetTestCase("TestInfoTest", "", NULL, NULL);
  5179  
  5180      for (int i = 0; i < test_case->total_test_count(); ++i) {
  5181        const TestInfo* const test_info = test_case->GetTestInfo(i);
  5182        if (strcmp(test_name, test_info->name()) == 0)
  5183          return test_info;
  5184      }
  5185      return NULL;
  5186    }
  5187  
  5188    static const TestResult* GetTestResult(
  5189        const TestInfo* test_info) {
  5190      return test_info->result();
  5191    }
  5192  };
  5193  
  5194  // Tests TestInfo::test_case_name() and TestInfo::name().
  5195  TEST_F(TestInfoTest, Names) {
  5196    const TestInfo* const test_info = GetTestInfo("Names");
  5197  
  5198    ASSERT_STREQ("TestInfoTest", test_info->test_case_name());
  5199    ASSERT_STREQ("Names", test_info->name());
  5200  }
  5201  
  5202  // Tests TestInfo::result().
  5203  TEST_F(TestInfoTest, result) {
  5204    const TestInfo* const test_info = GetTestInfo("result");
  5205  
  5206    // Initially, there is no TestPartResult for this test.
  5207    ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());
  5208  
  5209    // After the previous assertion, there is still none.
  5210    ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());
  5211  }
  5212  
  5213  // Tests setting up and tearing down a test case.
  5214  
  5215  class SetUpTestCaseTest : public Test {
  5216   protected:
  5217    // This will be called once before the first test in this test case
  5218    // is run.
  5219    static void SetUpTestCase() {
  5220      printf("Setting up the test case . . .\n");
  5221  
  5222      // Initializes some shared resource.  In this simple example, we
  5223      // just create a C string.  More complex stuff can be done if
  5224      // desired.
  5225      shared_resource_ = "123";
  5226  
  5227      // Increments the number of test cases that have been set up.
  5228      counter_++;
  5229  
  5230      // SetUpTestCase() should be called only once.
  5231      EXPECT_EQ(1, counter_);
  5232    }
  5233  
  5234    // This will be called once after the last test in this test case is
  5235    // run.
  5236    static void TearDownTestCase() {
  5237      printf("Tearing down the test case . . .\n");
  5238  
  5239      // Decrements the number of test cases that have been set up.
  5240      counter_--;
  5241  
  5242      // TearDownTestCase() should be called only once.
  5243      EXPECT_EQ(0, counter_);
  5244  
  5245      // Cleans up the shared resource.
  5246      shared_resource_ = NULL;
  5247    }
  5248  
  5249    // This will be called before each test in this test case.
  5250    virtual void SetUp() {
  5251      // SetUpTestCase() should be called only once, so counter_ should
  5252      // always be 1.
  5253      EXPECT_EQ(1, counter_);
  5254    }
  5255  
  5256    // Number of test cases that have been set up.
  5257    static int counter_;
  5258  
  5259    // Some resource to be shared by all tests in this test case.
  5260    static const char* shared_resource_;
  5261  };
  5262  
  5263  int SetUpTestCaseTest::counter_ = 0;
  5264  const char* SetUpTestCaseTest::shared_resource_ = NULL;
  5265  
  5266  // A test that uses the shared resource.
  5267  TEST_F(SetUpTestCaseTest, Test1) {
  5268    EXPECT_STRNE(NULL, shared_resource_);
  5269  }
  5270  
  5271  // Another test that uses the shared resource.
  5272  TEST_F(SetUpTestCaseTest, Test2) {
  5273    EXPECT_STREQ("123", shared_resource_);
  5274  }
  5275  
  5276  // The InitGoogleTestTest test case tests testing::InitGoogleTest().
  5277  
  5278  // The Flags struct stores a copy of all Google Test flags.
  5279  struct Flags {
  5280    // Constructs a Flags struct where each flag has its default value.
  5281    Flags() : also_run_disabled_tests(false),
  5282              break_on_failure(false),
  5283              catch_exceptions(false),
  5284              death_test_use_fork(false),
  5285              filter(""),
  5286              list_tests(false),
  5287              output(""),
  5288              print_time(true),
  5289              random_seed(0),
  5290              repeat(1),
  5291              shuffle(false),
  5292              stack_trace_depth(kMaxStackTraceDepth),
  5293              stream_result_to(""),
  5294              throw_on_failure(false) {}
  5295  
  5296    // Factory methods.
  5297  
  5298    // Creates a Flags struct where the gtest_also_run_disabled_tests flag has
  5299    // the given value.
  5300    static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) {
  5301      Flags flags;
  5302      flags.also_run_disabled_tests = also_run_disabled_tests;
  5303      return flags;
  5304    }
  5305  
  5306    // Creates a Flags struct where the gtest_break_on_failure flag has
  5307    // the given value.
  5308    static Flags BreakOnFailure(bool break_on_failure) {
  5309      Flags flags;
  5310      flags.break_on_failure = break_on_failure;
  5311      return flags;
  5312    }
  5313  
  5314    // Creates a Flags struct where the gtest_catch_exceptions flag has
  5315    // the given value.
  5316    static Flags CatchExceptions(bool catch_exceptions) {
  5317      Flags flags;
  5318      flags.catch_exceptions = catch_exceptions;
  5319      return flags;
  5320    }
  5321  
  5322    // Creates a Flags struct where the gtest_death_test_use_fork flag has
  5323    // the given value.
  5324    static Flags DeathTestUseFork(bool death_test_use_fork) {
  5325      Flags flags;
  5326      flags.death_test_use_fork = death_test_use_fork;
  5327      return flags;
  5328    }
  5329  
  5330    // Creates a Flags struct where the gtest_filter flag has the given
  5331    // value.
  5332    static Flags Filter(const char* filter) {
  5333      Flags flags;
  5334      flags.filter = filter;
  5335      return flags;
  5336    }
  5337  
  5338    // Creates a Flags struct where the gtest_list_tests flag has the
  5339    // given value.
  5340    static Flags ListTests(bool list_tests) {
  5341      Flags flags;
  5342      flags.list_tests = list_tests;
  5343      return flags;
  5344    }
  5345  
  5346    // Creates a Flags struct where the gtest_output flag has the given
  5347    // value.
  5348    static Flags Output(const char* output) {
  5349      Flags flags;
  5350      flags.output = output;
  5351      return flags;
  5352    }
  5353  
  5354    // Creates a Flags struct where the gtest_print_time flag has the given
  5355    // value.
  5356    static Flags PrintTime(bool print_time) {
  5357      Flags flags;
  5358      flags.print_time = print_time;
  5359      return flags;
  5360    }
  5361  
  5362    // Creates a Flags struct where the gtest_random_seed flag has
  5363    // the given value.
  5364    static Flags RandomSeed(Int32 random_seed) {
  5365      Flags flags;
  5366      flags.random_seed = random_seed;
  5367      return flags;
  5368    }
  5369  
  5370    // Creates a Flags struct where the gtest_repeat flag has the given
  5371    // value.
  5372    static Flags Repeat(Int32 repeat) {
  5373      Flags flags;
  5374      flags.repeat = repeat;
  5375      return flags;
  5376    }
  5377  
  5378    // Creates a Flags struct where the gtest_shuffle flag has
  5379    // the given value.
  5380    static Flags Shuffle(bool shuffle) {
  5381      Flags flags;
  5382      flags.shuffle = shuffle;
  5383      return flags;
  5384    }
  5385  
  5386    // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has
  5387    // the given value.
  5388    static Flags StackTraceDepth(Int32 stack_trace_depth) {
  5389      Flags flags;
  5390      flags.stack_trace_depth = stack_trace_depth;
  5391      return flags;
  5392    }
  5393  
  5394    // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has
  5395    // the given value.
  5396    static Flags StreamResultTo(const char* stream_result_to) {
  5397      Flags flags;
  5398      flags.stream_result_to = stream_result_to;
  5399      return flags;
  5400    }
  5401  
  5402    // Creates a Flags struct where the gtest_throw_on_failure flag has
  5403    // the given value.
  5404    static Flags ThrowOnFailure(bool throw_on_failure) {
  5405      Flags flags;
  5406      flags.throw_on_failure = throw_on_failure;
  5407      return flags;
  5408    }
  5409  
  5410    // These fields store the flag values.
  5411    bool also_run_disabled_tests;
  5412    bool break_on_failure;
  5413    bool catch_exceptions;
  5414    bool death_test_use_fork;
  5415    const char* filter;
  5416    bool list_tests;
  5417    const char* output;
  5418    bool print_time;
  5419    Int32 random_seed;
  5420    Int32 repeat;
  5421    bool shuffle;
  5422    Int32 stack_trace_depth;
  5423    const char* stream_result_to;
  5424    bool throw_on_failure;
  5425  };
  5426  
  5427  // Fixture for testing InitGoogleTest().
  5428  class InitGoogleTestTest : public Test {
  5429   protected:
  5430    // Clears the flags before each test.
  5431    virtual void SetUp() {
  5432      GTEST_FLAG(also_run_disabled_tests) = false;
  5433      GTEST_FLAG(break_on_failure) = false;
  5434      GTEST_FLAG(catch_exceptions) = false;
  5435      GTEST_FLAG(death_test_use_fork) = false;
  5436      GTEST_FLAG(filter) = "";
  5437      GTEST_FLAG(list_tests) = false;
  5438      GTEST_FLAG(output) = "";
  5439      GTEST_FLAG(print_time) = true;
  5440      GTEST_FLAG(random_seed) = 0;
  5441      GTEST_FLAG(repeat) = 1;
  5442      GTEST_FLAG(shuffle) = false;
  5443      GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;
  5444      GTEST_FLAG(stream_result_to) = "";
  5445      GTEST_FLAG(throw_on_failure) = false;
  5446    }
  5447  
  5448    // Asserts that two narrow or wide string arrays are equal.
  5449    template <typename CharType>
  5450    static void AssertStringArrayEq(size_t size1, CharType** array1,
  5451                                    size_t size2, CharType** array2) {
  5452      ASSERT_EQ(size1, size2) << " Array sizes different.";
  5453  
  5454      for (size_t i = 0; i != size1; i++) {
  5455        ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i;
  5456      }
  5457    }
  5458  
  5459    // Verifies that the flag values match the expected values.
  5460    static void CheckFlags(const Flags& expected) {
  5461      EXPECT_EQ(expected.also_run_disabled_tests,
  5462                GTEST_FLAG(also_run_disabled_tests));
  5463      EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure));
  5464      EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions));
  5465      EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork));
  5466      EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str());
  5467      EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests));
  5468      EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str());
  5469      EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time));
  5470      EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed));
  5471      EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat));
  5472      EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle));
  5473      EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth));
  5474      EXPECT_STREQ(expected.stream_result_to,
  5475                   GTEST_FLAG(stream_result_to).c_str());
  5476      EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure));
  5477    }
  5478  
  5479    // Parses a command line (specified by argc1 and argv1), then
  5480    // verifies that the flag values are expected and that the
  5481    // recognized flags are removed from the command line.
  5482    template <typename CharType>
  5483    static void TestParsingFlags(int argc1, const CharType** argv1,
  5484                                 int argc2, const CharType** argv2,
  5485                                 const Flags& expected, bool should_print_help) {
  5486      const bool saved_help_flag = ::testing::internal::g_help_flag;
  5487      ::testing::internal::g_help_flag = false;
  5488  
  5489  #if GTEST_HAS_STREAM_REDIRECTION
  5490      CaptureStdout();
  5491  #endif
  5492  
  5493      // Parses the command line.
  5494      internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1));
  5495  
  5496  #if GTEST_HAS_STREAM_REDIRECTION
  5497      const std::string captured_stdout = GetCapturedStdout();
  5498  #endif
  5499  
  5500      // Verifies the flag values.
  5501      CheckFlags(expected);
  5502  
  5503      // Verifies that the recognized flags are removed from the command
  5504      // line.
  5505      AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2);
  5506  
  5507      // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the
  5508      // help message for the flags it recognizes.
  5509      EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag);
  5510  
  5511  #if GTEST_HAS_STREAM_REDIRECTION
  5512      const char* const expected_help_fragment =
  5513          "This program contains tests written using";
  5514      if (should_print_help) {
  5515        EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout);
  5516      } else {
  5517        EXPECT_PRED_FORMAT2(IsNotSubstring,
  5518                            expected_help_fragment, captured_stdout);
  5519      }
  5520  #endif  // GTEST_HAS_STREAM_REDIRECTION
  5521  
  5522      ::testing::internal::g_help_flag = saved_help_flag;
  5523    }
  5524  
  5525    // This macro wraps TestParsingFlags s.t. the user doesn't need
  5526    // to specify the array sizes.
  5527  
  5528  #define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \
  5529    TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \
  5530                     sizeof(argv2)/sizeof(*argv2) - 1, argv2, \
  5531                     expected, should_print_help)
  5532  };
  5533  
  5534  // Tests parsing an empty command line.
  5535  TEST_F(InitGoogleTestTest, Empty) {
  5536    const char* argv[] = {
  5537      NULL
  5538    };
  5539  
  5540    const char* argv2[] = {
  5541      NULL
  5542    };
  5543  
  5544    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);
  5545  }
  5546  
  5547  // Tests parsing a command line that has no flag.
  5548  TEST_F(InitGoogleTestTest, NoFlag) {
  5549    const char* argv[] = {
  5550      "foo.exe",
  5551      NULL
  5552    };
  5553  
  5554    const char* argv2[] = {
  5555      "foo.exe",
  5556      NULL
  5557    };
  5558  
  5559    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);
  5560  }
  5561  
  5562  // Tests parsing a bad --gtest_filter flag.
  5563  TEST_F(InitGoogleTestTest, FilterBad) {
  5564    const char* argv[] = {
  5565      "foo.exe",
  5566      "--gtest_filter",
  5567      NULL
  5568    };
  5569  
  5570    const char* argv2[] = {
  5571      "foo.exe",
  5572      "--gtest_filter",
  5573      NULL
  5574    };
  5575  
  5576    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true);
  5577  }
  5578  
  5579  // Tests parsing an empty --gtest_filter flag.
  5580  TEST_F(InitGoogleTestTest, FilterEmpty) {
  5581    const char* argv[] = {
  5582      "foo.exe",
  5583      "--gtest_filter=",
  5584      NULL
  5585    };
  5586  
  5587    const char* argv2[] = {
  5588      "foo.exe",
  5589      NULL
  5590    };
  5591  
  5592    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false);
  5593  }
  5594  
  5595  // Tests parsing a non-empty --gtest_filter flag.
  5596  TEST_F(InitGoogleTestTest, FilterNonEmpty) {
  5597    const char* argv[] = {
  5598      "foo.exe",
  5599      "--gtest_filter=abc",
  5600      NULL
  5601    };
  5602  
  5603    const char* argv2[] = {
  5604      "foo.exe",
  5605      NULL
  5606    };
  5607  
  5608    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false);
  5609  }
  5610  
  5611  // Tests parsing --gtest_break_on_failure.
  5612  TEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) {
  5613    const char* argv[] = {
  5614      "foo.exe",
  5615      "--gtest_break_on_failure",
  5616      NULL
  5617  };
  5618  
  5619    const char* argv2[] = {
  5620      "foo.exe",
  5621      NULL
  5622    };
  5623  
  5624    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);
  5625  }
  5626  
  5627  // Tests parsing --gtest_break_on_failure=0.
  5628  TEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) {
  5629    const char* argv[] = {
  5630      "foo.exe",
  5631      "--gtest_break_on_failure=0",
  5632      NULL
  5633    };
  5634  
  5635    const char* argv2[] = {
  5636      "foo.exe",
  5637      NULL
  5638    };
  5639  
  5640    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
  5641  }
  5642  
  5643  // Tests parsing --gtest_break_on_failure=f.
  5644  TEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) {
  5645    const char* argv[] = {
  5646      "foo.exe",
  5647      "--gtest_break_on_failure=f",
  5648      NULL
  5649    };
  5650  
  5651    const char* argv2[] = {
  5652      "foo.exe",
  5653      NULL
  5654    };
  5655  
  5656    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
  5657  }
  5658  
  5659  // Tests parsing --gtest_break_on_failure=F.
  5660  TEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) {
  5661    const char* argv[] = {
  5662      "foo.exe",
  5663      "--gtest_break_on_failure=F",
  5664      NULL
  5665    };
  5666  
  5667    const char* argv2[] = {
  5668      "foo.exe",
  5669      NULL
  5670    };
  5671  
  5672    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
  5673  }
  5674  
  5675  // Tests parsing a --gtest_break_on_failure flag that has a "true"
  5676  // definition.
  5677  TEST_F(InitGoogleTestTest, BreakOnFailureTrue) {
  5678    const char* argv[] = {
  5679      "foo.exe",
  5680      "--gtest_break_on_failure=1",
  5681      NULL
  5682    };
  5683  
  5684    const char* argv2[] = {
  5685      "foo.exe",
  5686      NULL
  5687    };
  5688  
  5689    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);
  5690  }
  5691  
  5692  // Tests parsing --gtest_catch_exceptions.
  5693  TEST_F(InitGoogleTestTest, CatchExceptions) {
  5694    const char* argv[] = {
  5695      "foo.exe",
  5696      "--gtest_catch_exceptions",
  5697      NULL
  5698    };
  5699  
  5700    const char* argv2[] = {
  5701      "foo.exe",
  5702      NULL
  5703    };
  5704  
  5705    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false);
  5706  }
  5707  
  5708  // Tests parsing --gtest_death_test_use_fork.
  5709  TEST_F(InitGoogleTestTest, DeathTestUseFork) {
  5710    const char* argv[] = {
  5711      "foo.exe",
  5712      "--gtest_death_test_use_fork",
  5713      NULL
  5714    };
  5715  
  5716    const char* argv2[] = {
  5717      "foo.exe",
  5718      NULL
  5719    };
  5720  
  5721    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false);
  5722  }
  5723  
  5724  // Tests having the same flag twice with different values.  The
  5725  // expected behavior is that the one coming last takes precedence.
  5726  TEST_F(InitGoogleTestTest, DuplicatedFlags) {
  5727    const char* argv[] = {
  5728      "foo.exe",
  5729      "--gtest_filter=a",
  5730      "--gtest_filter=b",
  5731      NULL
  5732    };
  5733  
  5734    const char* argv2[] = {
  5735      "foo.exe",
  5736      NULL
  5737    };
  5738  
  5739    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false);
  5740  }
  5741  
  5742  // Tests having an unrecognized flag on the command line.
  5743  TEST_F(InitGoogleTestTest, UnrecognizedFlag) {
  5744    const char* argv[] = {
  5745      "foo.exe",
  5746      "--gtest_break_on_failure",
  5747      "bar",  // Unrecognized by Google Test.
  5748      "--gtest_filter=b",
  5749      NULL
  5750    };
  5751  
  5752    const char* argv2[] = {
  5753      "foo.exe",
  5754      "bar",
  5755      NULL
  5756    };
  5757  
  5758    Flags flags;
  5759    flags.break_on_failure = true;
  5760    flags.filter = "b";
  5761    GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false);
  5762  }
  5763  
  5764  // Tests having a --gtest_list_tests flag
  5765  TEST_F(InitGoogleTestTest, ListTestsFlag) {
  5766      const char* argv[] = {
  5767        "foo.exe",
  5768        "--gtest_list_tests",
  5769        NULL
  5770      };
  5771  
  5772      const char* argv2[] = {
  5773        "foo.exe",
  5774        NULL
  5775      };
  5776  
  5777      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);
  5778  }
  5779  
  5780  // Tests having a --gtest_list_tests flag with a "true" value
  5781  TEST_F(InitGoogleTestTest, ListTestsTrue) {
  5782      const char* argv[] = {
  5783        "foo.exe",
  5784        "--gtest_list_tests=1",
  5785        NULL
  5786      };
  5787  
  5788      const char* argv2[] = {
  5789        "foo.exe",
  5790        NULL
  5791      };
  5792  
  5793      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);
  5794  }
  5795  
  5796  // Tests having a --gtest_list_tests flag with a "false" value
  5797  TEST_F(InitGoogleTestTest, ListTestsFalse) {
  5798      const char* argv[] = {
  5799        "foo.exe",
  5800        "--gtest_list_tests=0",
  5801        NULL
  5802      };
  5803  
  5804      const char* argv2[] = {
  5805        "foo.exe",
  5806        NULL
  5807      };
  5808  
  5809      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
  5810  }
  5811  
  5812  // Tests parsing --gtest_list_tests=f.
  5813  TEST_F(InitGoogleTestTest, ListTestsFalse_f) {
  5814    const char* argv[] = {
  5815      "foo.exe",
  5816      "--gtest_list_tests=f",
  5817      NULL
  5818    };
  5819  
  5820    const char* argv2[] = {
  5821      "foo.exe",
  5822      NULL
  5823    };
  5824  
  5825    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
  5826  }
  5827  
  5828  // Tests parsing --gtest_list_tests=F.
  5829  TEST_F(InitGoogleTestTest, ListTestsFalse_F) {
  5830    const char* argv[] = {
  5831      "foo.exe",
  5832      "--gtest_list_tests=F",
  5833      NULL
  5834    };
  5835  
  5836    const char* argv2[] = {
  5837      "foo.exe",
  5838      NULL
  5839    };
  5840  
  5841    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
  5842  }
  5843  
  5844  // Tests parsing --gtest_output (invalid).
  5845  TEST_F(InitGoogleTestTest, OutputEmpty) {
  5846    const char* argv[] = {
  5847      "foo.exe",
  5848      "--gtest_output",
  5849      NULL
  5850    };
  5851  
  5852    const char* argv2[] = {
  5853      "foo.exe",
  5854      "--gtest_output",
  5855      NULL
  5856    };
  5857  
  5858    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true);
  5859  }
  5860  
  5861  // Tests parsing --gtest_output=xml
  5862  TEST_F(InitGoogleTestTest, OutputXml) {
  5863    const char* argv[] = {
  5864      "foo.exe",
  5865      "--gtest_output=xml",
  5866      NULL
  5867    };
  5868  
  5869    const char* argv2[] = {
  5870      "foo.exe",
  5871      NULL
  5872    };
  5873  
  5874    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false);
  5875  }
  5876  
  5877  // Tests parsing --gtest_output=xml:file
  5878  TEST_F(InitGoogleTestTest, OutputXmlFile) {
  5879    const char* argv[] = {
  5880      "foo.exe",
  5881      "--gtest_output=xml:file",
  5882      NULL
  5883    };
  5884  
  5885    const char* argv2[] = {
  5886      "foo.exe",
  5887      NULL
  5888    };
  5889  
  5890    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false);
  5891  }
  5892  
  5893  // Tests parsing --gtest_output=xml:directory/path/
  5894  TEST_F(InitGoogleTestTest, OutputXmlDirectory) {
  5895    const char* argv[] = {
  5896      "foo.exe",
  5897      "--gtest_output=xml:directory/path/",
  5898      NULL
  5899    };
  5900  
  5901    const char* argv2[] = {
  5902      "foo.exe",
  5903      NULL
  5904    };
  5905  
  5906    GTEST_TEST_PARSING_FLAGS_(argv, argv2,
  5907                              Flags::Output("xml:directory/path/"), false);
  5908  }
  5909  
  5910  // Tests having a --gtest_print_time flag
  5911  TEST_F(InitGoogleTestTest, PrintTimeFlag) {
  5912      const char* argv[] = {
  5913        "foo.exe",
  5914        "--gtest_print_time",
  5915        NULL
  5916      };
  5917  
  5918      const char* argv2[] = {
  5919        "foo.exe",
  5920        NULL
  5921      };
  5922  
  5923      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);
  5924  }
  5925  
  5926  // Tests having a --gtest_print_time flag with a "true" value
  5927  TEST_F(InitGoogleTestTest, PrintTimeTrue) {
  5928      const char* argv[] = {
  5929        "foo.exe",
  5930        "--gtest_print_time=1",
  5931        NULL
  5932      };
  5933  
  5934      const char* argv2[] = {
  5935        "foo.exe",
  5936        NULL
  5937      };
  5938  
  5939      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);
  5940  }
  5941  
  5942  // Tests having a --gtest_print_time flag with a "false" value
  5943  TEST_F(InitGoogleTestTest, PrintTimeFalse) {
  5944      const char* argv[] = {
  5945        "foo.exe",
  5946        "--gtest_print_time=0",
  5947        NULL
  5948      };
  5949  
  5950      const char* argv2[] = {
  5951        "foo.exe",
  5952        NULL
  5953      };
  5954  
  5955      GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
  5956  }
  5957  
  5958  // Tests parsing --gtest_print_time=f.
  5959  TEST_F(InitGoogleTestTest, PrintTimeFalse_f) {
  5960    const char* argv[] = {
  5961      "foo.exe",
  5962      "--gtest_print_time=f",
  5963      NULL
  5964    };
  5965  
  5966    const char* argv2[] = {
  5967      "foo.exe",
  5968      NULL
  5969    };
  5970  
  5971    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
  5972  }
  5973  
  5974  // Tests parsing --gtest_print_time=F.
  5975  TEST_F(InitGoogleTestTest, PrintTimeFalse_F) {
  5976    const char* argv[] = {
  5977      "foo.exe",
  5978      "--gtest_print_time=F",
  5979      NULL
  5980    };
  5981  
  5982    const char* argv2[] = {
  5983      "foo.exe",
  5984      NULL
  5985    };
  5986  
  5987    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
  5988  }
  5989  
  5990  // Tests parsing --gtest_random_seed=number
  5991  TEST_F(InitGoogleTestTest, RandomSeed) {
  5992    const char* argv[] = {
  5993      "foo.exe",
  5994      "--gtest_random_seed=1000",
  5995      NULL
  5996    };
  5997  
  5998    const char* argv2[] = {
  5999      "foo.exe",
  6000      NULL
  6001    };
  6002  
  6003    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false);
  6004  }
  6005  
  6006  // Tests parsing --gtest_repeat=number
  6007  TEST_F(InitGoogleTestTest, Repeat) {
  6008    const char* argv[] = {
  6009      "foo.exe",
  6010      "--gtest_repeat=1000",
  6011      NULL
  6012    };
  6013  
  6014    const char* argv2[] = {
  6015      "foo.exe",
  6016      NULL
  6017    };
  6018  
  6019    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false);
  6020  }
  6021  
  6022  // Tests having a --gtest_also_run_disabled_tests flag
  6023  TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) {
  6024      const char* argv[] = {
  6025        "foo.exe",
  6026        "--gtest_also_run_disabled_tests",
  6027        NULL
  6028      };
  6029  
  6030      const char* argv2[] = {
  6031        "foo.exe",
  6032        NULL
  6033      };
  6034  
  6035      GTEST_TEST_PARSING_FLAGS_(argv, argv2,
  6036                                Flags::AlsoRunDisabledTests(true), false);
  6037  }
  6038  
  6039  // Tests having a --gtest_also_run_disabled_tests flag with a "true" value
  6040  TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) {
  6041      const char* argv[] = {
  6042        "foo.exe",
  6043        "--gtest_also_run_disabled_tests=1",
  6044        NULL
  6045      };
  6046  
  6047      const char* argv2[] = {
  6048        "foo.exe",
  6049        NULL
  6050      };
  6051  
  6052      GTEST_TEST_PARSING_FLAGS_(argv, argv2,
  6053                                Flags::AlsoRunDisabledTests(true), false);
  6054  }
  6055  
  6056  // Tests having a --gtest_also_run_disabled_tests flag with a "false" value
  6057  TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) {
  6058      const char* argv[] = {
  6059        "foo.exe",
  6060        "--gtest_also_run_disabled_tests=0",
  6061        NULL
  6062      };
  6063  
  6064      const char* argv2[] = {
  6065        "foo.exe",
  6066        NULL
  6067      };
  6068  
  6069      GTEST_TEST_PARSING_FLAGS_(argv, argv2,
  6070                                Flags::AlsoRunDisabledTests(false), false);
  6071  }
  6072  
  6073  // Tests parsing --gtest_shuffle.
  6074  TEST_F(InitGoogleTestTest, ShuffleWithoutValue) {
  6075    const char* argv[] = {
  6076      "foo.exe",
  6077      "--gtest_shuffle",
  6078      NULL
  6079  };
  6080  
  6081    const char* argv2[] = {
  6082      "foo.exe",
  6083      NULL
  6084    };
  6085  
  6086    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);
  6087  }
  6088  
  6089  // Tests parsing --gtest_shuffle=0.
  6090  TEST_F(InitGoogleTestTest, ShuffleFalse_0) {
  6091    const char* argv[] = {
  6092      "foo.exe",
  6093      "--gtest_shuffle=0",
  6094      NULL
  6095    };
  6096  
  6097    const char* argv2[] = {
  6098      "foo.exe",
  6099      NULL
  6100    };
  6101  
  6102    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false);
  6103  }
  6104  
  6105  // Tests parsing a --gtest_shuffle flag that has a "true"
  6106  // definition.
  6107  TEST_F(InitGoogleTestTest, ShuffleTrue) {
  6108    const char* argv[] = {
  6109      "foo.exe",
  6110      "--gtest_shuffle=1",
  6111      NULL
  6112    };
  6113  
  6114    const char* argv2[] = {
  6115      "foo.exe",
  6116      NULL
  6117    };
  6118  
  6119    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);
  6120  }
  6121  
  6122  // Tests parsing --gtest_stack_trace_depth=number.
  6123  TEST_F(InitGoogleTestTest, StackTraceDepth) {
  6124    const char* argv[] = {
  6125      "foo.exe",
  6126      "--gtest_stack_trace_depth=5",
  6127      NULL
  6128    };
  6129  
  6130    const char* argv2[] = {
  6131      "foo.exe",
  6132      NULL
  6133    };
  6134  
  6135    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false);
  6136  }
  6137  
  6138  TEST_F(InitGoogleTestTest, StreamResultTo) {
  6139    const char* argv[] = {
  6140      "foo.exe",
  6141      "--gtest_stream_result_to=localhost:1234",
  6142      NULL
  6143    };
  6144  
  6145    const char* argv2[] = {
  6146      "foo.exe",
  6147      NULL
  6148    };
  6149  
  6150    GTEST_TEST_PARSING_FLAGS_(
  6151        argv, argv2, Flags::StreamResultTo("localhost:1234"), false);
  6152  }
  6153  
  6154  // Tests parsing --gtest_throw_on_failure.
  6155  TEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) {
  6156    const char* argv[] = {
  6157      "foo.exe",
  6158      "--gtest_throw_on_failure",
  6159      NULL
  6160  };
  6161  
  6162    const char* argv2[] = {
  6163      "foo.exe",
  6164      NULL
  6165    };
  6166  
  6167    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);
  6168  }
  6169  
  6170  // Tests parsing --gtest_throw_on_failure=0.
  6171  TEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) {
  6172    const char* argv[] = {
  6173      "foo.exe",
  6174      "--gtest_throw_on_failure=0",
  6175      NULL
  6176    };
  6177  
  6178    const char* argv2[] = {
  6179      "foo.exe",
  6180      NULL
  6181    };
  6182  
  6183    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false);
  6184  }
  6185  
  6186  // Tests parsing a --gtest_throw_on_failure flag that has a "true"
  6187  // definition.
  6188  TEST_F(InitGoogleTestTest, ThrowOnFailureTrue) {
  6189    const char* argv[] = {
  6190      "foo.exe",
  6191      "--gtest_throw_on_failure=1",
  6192      NULL
  6193    };
  6194  
  6195    const char* argv2[] = {
  6196      "foo.exe",
  6197      NULL
  6198    };
  6199  
  6200    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);
  6201  }
  6202  
  6203  #if GTEST_OS_WINDOWS
  6204  // Tests parsing wide strings.
  6205  TEST_F(InitGoogleTestTest, WideStrings) {
  6206    const wchar_t* argv[] = {
  6207      L"foo.exe",
  6208      L"--gtest_filter=Foo*",
  6209      L"--gtest_list_tests=1",
  6210      L"--gtest_break_on_failure",
  6211      L"--non_gtest_flag",
  6212      NULL
  6213    };
  6214  
  6215    const wchar_t* argv2[] = {
  6216      L"foo.exe",
  6217      L"--non_gtest_flag",
  6218      NULL
  6219    };
  6220  
  6221    Flags expected_flags;
  6222    expected_flags.break_on_failure = true;
  6223    expected_flags.filter = "Foo*";
  6224    expected_flags.list_tests = true;
  6225  
  6226    GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false);
  6227  }
  6228  #endif  // GTEST_OS_WINDOWS
  6229  
  6230  // Tests current_test_info() in UnitTest.
  6231  class CurrentTestInfoTest : public Test {
  6232   protected:
  6233    // Tests that current_test_info() returns NULL before the first test in
  6234    // the test case is run.
  6235    static void SetUpTestCase() {
  6236      // There should be no tests running at this point.
  6237      const TestInfo* test_info =
  6238        UnitTest::GetInstance()->current_test_info();
  6239      EXPECT_TRUE(test_info == NULL)
  6240          << "There should be no tests running at this point.";
  6241    }
  6242  
  6243    // Tests that current_test_info() returns NULL after the last test in
  6244    // the test case has run.
  6245    static void TearDownTestCase() {
  6246      const TestInfo* test_info =
  6247        UnitTest::GetInstance()->current_test_info();
  6248      EXPECT_TRUE(test_info == NULL)
  6249          << "There should be no tests running at this point.";
  6250    }
  6251  };
  6252  
  6253  // Tests that current_test_info() returns TestInfo for currently running
  6254  // test by checking the expected test name against the actual one.
  6255  TEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) {
  6256    const TestInfo* test_info =
  6257      UnitTest::GetInstance()->current_test_info();
  6258    ASSERT_TRUE(NULL != test_info)
  6259        << "There is a test running so we should have a valid TestInfo.";
  6260    EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
  6261        << "Expected the name of the currently running test case.";
  6262    EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name())
  6263        << "Expected the name of the currently running test.";
  6264  }
  6265  
  6266  // Tests that current_test_info() returns TestInfo for currently running
  6267  // test by checking the expected test name against the actual one.  We
  6268  // use this test to see that the TestInfo object actually changed from
  6269  // the previous invocation.
  6270  TEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) {
  6271    const TestInfo* test_info =
  6272      UnitTest::GetInstance()->current_test_info();
  6273    ASSERT_TRUE(NULL != test_info)
  6274        << "There is a test running so we should have a valid TestInfo.";
  6275    EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
  6276        << "Expected the name of the currently running test case.";
  6277    EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name())
  6278        << "Expected the name of the currently running test.";
  6279  }
  6280  
  6281  }  // namespace testing
  6282  
  6283  // These two lines test that we can define tests in a namespace that
  6284  // has the name "testing" and is nested in another namespace.
  6285  namespace my_namespace {
  6286  namespace testing {
  6287  
  6288  // Makes sure that TEST knows to use ::testing::Test instead of
  6289  // ::my_namespace::testing::Test.
  6290  class Test {};
  6291  
  6292  // Makes sure that an assertion knows to use ::testing::Message instead of
  6293  // ::my_namespace::testing::Message.
  6294  class Message {};
  6295  
  6296  // Makes sure that an assertion knows to use
  6297  // ::testing::AssertionResult instead of
  6298  // ::my_namespace::testing::AssertionResult.
  6299  class AssertionResult {};
  6300  
  6301  // Tests that an assertion that should succeed works as expected.
  6302  TEST(NestedTestingNamespaceTest, Success) {
  6303    EXPECT_EQ(1, 1) << "This shouldn't fail.";
  6304  }
  6305  
  6306  // Tests that an assertion that should fail works as expected.
  6307  TEST(NestedTestingNamespaceTest, Failure) {
  6308    EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.",
  6309                         "This failure is expected.");
  6310  }
  6311  
  6312  }  // namespace testing
  6313  }  // namespace my_namespace
  6314  
  6315  // Tests that one can call superclass SetUp and TearDown methods--
  6316  // that is, that they are not private.
  6317  // No tests are based on this fixture; the test "passes" if it compiles
  6318  // successfully.
  6319  class ProtectedFixtureMethodsTest : public Test {
  6320   protected:
  6321    virtual void SetUp() {
  6322      Test::SetUp();
  6323    }
  6324    virtual void TearDown() {
  6325      Test::TearDown();
  6326    }
  6327  };
  6328  
  6329  // StreamingAssertionsTest tests the streaming versions of a representative
  6330  // sample of assertions.
  6331  TEST(StreamingAssertionsTest, Unconditional) {
  6332    SUCCEED() << "expected success";
  6333    EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure",
  6334                            "expected failure");
  6335    EXPECT_FATAL_FAILURE(FAIL() << "expected failure",
  6336                         "expected failure");
  6337  }
  6338  
  6339  #ifdef __BORLANDC__
  6340  // Silences warnings: "Condition is always true", "Unreachable code"
  6341  # pragma option push -w-ccc -w-rch
  6342  #endif
  6343  
  6344  TEST(StreamingAssertionsTest, Truth) {
  6345    EXPECT_TRUE(true) << "unexpected failure";
  6346    ASSERT_TRUE(true) << "unexpected failure";
  6347    EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure",
  6348                            "expected failure");
  6349    EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure",
  6350                         "expected failure");
  6351  }
  6352  
  6353  TEST(StreamingAssertionsTest, Truth2) {
  6354    EXPECT_FALSE(false) << "unexpected failure";
  6355    ASSERT_FALSE(false) << "unexpected failure";
  6356    EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure",
  6357                            "expected failure");
  6358    EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure",
  6359                         "expected failure");
  6360  }
  6361  
  6362  #ifdef __BORLANDC__
  6363  // Restores warnings after previous "#pragma option push" supressed them
  6364  # pragma option pop
  6365  #endif
  6366  
  6367  TEST(StreamingAssertionsTest, IntegerEquals) {
  6368    EXPECT_EQ(1, 1) << "unexpected failure";
  6369    ASSERT_EQ(1, 1) << "unexpected failure";
  6370    EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure",
  6371                            "expected failure");
  6372    EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure",
  6373                         "expected failure");
  6374  }
  6375  
  6376  TEST(StreamingAssertionsTest, IntegerLessThan) {
  6377    EXPECT_LT(1, 2) << "unexpected failure";
  6378    ASSERT_LT(1, 2) << "unexpected failure";
  6379    EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure",
  6380                            "expected failure");
  6381    EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure",
  6382                         "expected failure");
  6383  }
  6384  
  6385  TEST(StreamingAssertionsTest, StringsEqual) {
  6386    EXPECT_STREQ("foo", "foo") << "unexpected failure";
  6387    ASSERT_STREQ("foo", "foo") << "unexpected failure";
  6388    EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure",
  6389                            "expected failure");
  6390    EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure",
  6391                         "expected failure");
  6392  }
  6393  
  6394  TEST(StreamingAssertionsTest, StringsNotEqual) {
  6395    EXPECT_STRNE("foo", "bar") << "unexpected failure";
  6396    ASSERT_STRNE("foo", "bar") << "unexpected failure";
  6397    EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure",
  6398                            "expected failure");
  6399    EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure",
  6400                         "expected failure");
  6401  }
  6402  
  6403  TEST(StreamingAssertionsTest, StringsEqualIgnoringCase) {
  6404    EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure";
  6405    ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure";
  6406    EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure",
  6407                            "expected failure");
  6408    EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure",
  6409                         "expected failure");
  6410  }
  6411  
  6412  TEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) {
  6413    EXPECT_STRCASENE("foo", "bar") << "unexpected failure";
  6414    ASSERT_STRCASENE("foo", "bar") << "unexpected failure";
  6415    EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure",
  6416                            "expected failure");
  6417    EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure",
  6418                         "expected failure");
  6419  }
  6420  
  6421  TEST(StreamingAssertionsTest, FloatingPointEquals) {
  6422    EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
  6423    ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
  6424    EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure",
  6425                            "expected failure");
  6426    EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure",
  6427                         "expected failure");
  6428  }
  6429  
  6430  #if GTEST_HAS_EXCEPTIONS
  6431  
  6432  TEST(StreamingAssertionsTest, Throw) {
  6433    EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure";
  6434    ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure";
  6435    EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) <<
  6436                            "expected failure", "expected failure");
  6437    EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) <<
  6438                         "expected failure", "expected failure");
  6439  }
  6440  
  6441  TEST(StreamingAssertionsTest, NoThrow) {
  6442    EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure";
  6443    ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure";
  6444    EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) <<
  6445                            "expected failure", "expected failure");
  6446    EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) <<
  6447                         "expected failure", "expected failure");
  6448  }
  6449  
  6450  TEST(StreamingAssertionsTest, AnyThrow) {
  6451    EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
  6452    ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
  6453    EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) <<
  6454                            "expected failure", "expected failure");
  6455    EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) <<
  6456                         "expected failure", "expected failure");
  6457  }
  6458  
  6459  #endif  // GTEST_HAS_EXCEPTIONS
  6460  
  6461  // Tests that Google Test correctly decides whether to use colors in the output.
  6462  
  6463  TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) {
  6464    GTEST_FLAG(color) = "yes";
  6465  
  6466    SetEnv("TERM", "xterm");  // TERM supports colors.
  6467    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6468    EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
  6469  
  6470    SetEnv("TERM", "dumb");  // TERM doesn't support colors.
  6471    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6472    EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
  6473  }
  6474  
  6475  TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) {
  6476    SetEnv("TERM", "dumb");  // TERM doesn't support colors.
  6477  
  6478    GTEST_FLAG(color) = "True";
  6479    EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
  6480  
  6481    GTEST_FLAG(color) = "t";
  6482    EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
  6483  
  6484    GTEST_FLAG(color) = "1";
  6485    EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
  6486  }
  6487  
  6488  TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) {
  6489    GTEST_FLAG(color) = "no";
  6490  
  6491    SetEnv("TERM", "xterm");  // TERM supports colors.
  6492    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6493    EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
  6494  
  6495    SetEnv("TERM", "dumb");  // TERM doesn't support colors.
  6496    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6497    EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
  6498  }
  6499  
  6500  TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) {
  6501    SetEnv("TERM", "xterm");  // TERM supports colors.
  6502  
  6503    GTEST_FLAG(color) = "F";
  6504    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6505  
  6506    GTEST_FLAG(color) = "0";
  6507    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6508  
  6509    GTEST_FLAG(color) = "unknown";
  6510    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6511  }
  6512  
  6513  TEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) {
  6514    GTEST_FLAG(color) = "auto";
  6515  
  6516    SetEnv("TERM", "xterm");  // TERM supports colors.
  6517    EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
  6518    EXPECT_TRUE(ShouldUseColor(true));    // Stdout is a TTY.
  6519  }
  6520  
  6521  TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) {
  6522    GTEST_FLAG(color) = "auto";
  6523  
  6524  #if GTEST_OS_WINDOWS
  6525    // On Windows, we ignore the TERM variable as it's usually not set.
  6526  
  6527    SetEnv("TERM", "dumb");
  6528    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6529  
  6530    SetEnv("TERM", "");
  6531    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6532  
  6533    SetEnv("TERM", "xterm");
  6534    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6535  #else
  6536    // On non-Windows platforms, we rely on TERM to determine if the
  6537    // terminal supports colors.
  6538  
  6539    SetEnv("TERM", "dumb");  // TERM doesn't support colors.
  6540    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6541  
  6542    SetEnv("TERM", "emacs");  // TERM doesn't support colors.
  6543    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6544  
  6545    SetEnv("TERM", "vt100");  // TERM doesn't support colors.
  6546    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6547  
  6548    SetEnv("TERM", "xterm-mono");  // TERM doesn't support colors.
  6549    EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
  6550  
  6551    SetEnv("TERM", "xterm");  // TERM supports colors.
  6552    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6553  
  6554    SetEnv("TERM", "xterm-color");  // TERM supports colors.
  6555    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6556  
  6557    SetEnv("TERM", "xterm-256color");  // TERM supports colors.
  6558    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6559  
  6560    SetEnv("TERM", "screen");  // TERM supports colors.
  6561    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6562  
  6563    SetEnv("TERM", "screen-256color");  // TERM supports colors.
  6564    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6565  
  6566    SetEnv("TERM", "linux");  // TERM supports colors.
  6567    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6568  
  6569    SetEnv("TERM", "cygwin");  // TERM supports colors.
  6570    EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
  6571  #endif  // GTEST_OS_WINDOWS
  6572  }
  6573  
  6574  // Verifies that StaticAssertTypeEq works in a namespace scope.
  6575  
  6576  static bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>();
  6577  static bool dummy2 GTEST_ATTRIBUTE_UNUSED_ =
  6578      StaticAssertTypeEq<const int, const int>();
  6579  
  6580  // Verifies that StaticAssertTypeEq works in a class.
  6581  
  6582  template <typename T>
  6583  class StaticAssertTypeEqTestHelper {
  6584   public:
  6585    StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); }
  6586  };
  6587  
  6588  TEST(StaticAssertTypeEqTest, WorksInClass) {
  6589    StaticAssertTypeEqTestHelper<bool>();
  6590  }
  6591  
  6592  // Verifies that StaticAssertTypeEq works inside a function.
  6593  
  6594  typedef int IntAlias;
  6595  
  6596  TEST(StaticAssertTypeEqTest, CompilesForEqualTypes) {
  6597    StaticAssertTypeEq<int, IntAlias>();
  6598    StaticAssertTypeEq<int*, IntAlias*>();
  6599  }
  6600  
  6601  TEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) {
  6602    testing::UnitTest* const unit_test = testing::UnitTest::GetInstance();
  6603  
  6604    // We don't have a stack walker in Google Test yet.
  6605    EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str());
  6606    EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str());
  6607  }
  6608  
  6609  TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) {
  6610    EXPECT_FALSE(HasNonfatalFailure());
  6611  }
  6612  
  6613  static void FailFatally() { FAIL(); }
  6614  
  6615  TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) {
  6616    FailFatally();
  6617    const bool has_nonfatal_failure = HasNonfatalFailure();
  6618    ClearCurrentTestPartResults();
  6619    EXPECT_FALSE(has_nonfatal_failure);
  6620  }
  6621  
  6622  TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {
  6623    ADD_FAILURE();
  6624    const bool has_nonfatal_failure = HasNonfatalFailure();
  6625    ClearCurrentTestPartResults();
  6626    EXPECT_TRUE(has_nonfatal_failure);
  6627  }
  6628  
  6629  TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {
  6630    FailFatally();
  6631    ADD_FAILURE();
  6632    const bool has_nonfatal_failure = HasNonfatalFailure();
  6633    ClearCurrentTestPartResults();
  6634    EXPECT_TRUE(has_nonfatal_failure);
  6635  }
  6636  
  6637  // A wrapper for calling HasNonfatalFailure outside of a test body.
  6638  static bool HasNonfatalFailureHelper() {
  6639    return testing::Test::HasNonfatalFailure();
  6640  }
  6641  
  6642  TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) {
  6643    EXPECT_FALSE(HasNonfatalFailureHelper());
  6644  }
  6645  
  6646  TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) {
  6647    ADD_FAILURE();
  6648    const bool has_nonfatal_failure = HasNonfatalFailureHelper();
  6649    ClearCurrentTestPartResults();
  6650    EXPECT_TRUE(has_nonfatal_failure);
  6651  }
  6652  
  6653  TEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) {
  6654    EXPECT_FALSE(HasFailure());
  6655  }
  6656  
  6657  TEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) {
  6658    FailFatally();
  6659    const bool has_failure = HasFailure();
  6660    ClearCurrentTestPartResults();
  6661    EXPECT_TRUE(has_failure);
  6662  }
  6663  
  6664  TEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {
  6665    ADD_FAILURE();
  6666    const bool has_failure = HasFailure();
  6667    ClearCurrentTestPartResults();
  6668    EXPECT_TRUE(has_failure);
  6669  }
  6670  
  6671  TEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {
  6672    FailFatally();
  6673    ADD_FAILURE();
  6674    const bool has_failure = HasFailure();
  6675    ClearCurrentTestPartResults();
  6676    EXPECT_TRUE(has_failure);
  6677  }
  6678  
  6679  // A wrapper for calling HasFailure outside of a test body.
  6680  static bool HasFailureHelper() { return testing::Test::HasFailure(); }
  6681  
  6682  TEST(HasFailureTest, WorksOutsideOfTestBody) {
  6683    EXPECT_FALSE(HasFailureHelper());
  6684  }
  6685  
  6686  TEST(HasFailureTest, WorksOutsideOfTestBody2) {
  6687    ADD_FAILURE();
  6688    const bool has_failure = HasFailureHelper();
  6689    ClearCurrentTestPartResults();
  6690    EXPECT_TRUE(has_failure);
  6691  }
  6692  
  6693  class TestListener : public EmptyTestEventListener {
  6694   public:
  6695    TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {}
  6696    TestListener(int* on_start_counter, bool* is_destroyed)
  6697        : on_start_counter_(on_start_counter),
  6698          is_destroyed_(is_destroyed) {}
  6699  
  6700    virtual ~TestListener() {
  6701      if (is_destroyed_)
  6702        *is_destroyed_ = true;
  6703    }
  6704  
  6705   protected:
  6706    virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
  6707      if (on_start_counter_ != NULL)
  6708        (*on_start_counter_)++;
  6709    }
  6710  
  6711   private:
  6712    int* on_start_counter_;
  6713    bool* is_destroyed_;
  6714  };
  6715  
  6716  // Tests the constructor.
  6717  TEST(TestEventListenersTest, ConstructionWorks) {
  6718    TestEventListeners listeners;
  6719  
  6720    EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL);
  6721    EXPECT_TRUE(listeners.default_result_printer() == NULL);
  6722    EXPECT_TRUE(listeners.default_xml_generator() == NULL);
  6723  }
  6724  
  6725  // Tests that the TestEventListeners destructor deletes all the listeners it
  6726  // owns.
  6727  TEST(TestEventListenersTest, DestructionWorks) {
  6728    bool default_result_printer_is_destroyed = false;
  6729    bool default_xml_printer_is_destroyed = false;
  6730    bool extra_listener_is_destroyed = false;
  6731    TestListener* default_result_printer = new TestListener(
  6732        NULL, &default_result_printer_is_destroyed);
  6733    TestListener* default_xml_printer = new TestListener(
  6734        NULL, &default_xml_printer_is_destroyed);
  6735    TestListener* extra_listener = new TestListener(
  6736        NULL, &extra_listener_is_destroyed);
  6737  
  6738    {
  6739      TestEventListeners listeners;
  6740      TestEventListenersAccessor::SetDefaultResultPrinter(&listeners,
  6741                                                          default_result_printer);
  6742      TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners,
  6743                                                         default_xml_printer);
  6744      listeners.Append(extra_listener);
  6745    }
  6746    EXPECT_TRUE(default_result_printer_is_destroyed);
  6747    EXPECT_TRUE(default_xml_printer_is_destroyed);
  6748    EXPECT_TRUE(extra_listener_is_destroyed);
  6749  }
  6750  
  6751  // Tests that a listener Append'ed to a TestEventListeners list starts
  6752  // receiving events.
  6753  TEST(TestEventListenersTest, Append) {
  6754    int on_start_counter = 0;
  6755    bool is_destroyed = false;
  6756    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6757    {
  6758      TestEventListeners listeners;
  6759      listeners.Append(listener);
  6760      TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6761          *UnitTest::GetInstance());
  6762      EXPECT_EQ(1, on_start_counter);
  6763    }
  6764    EXPECT_TRUE(is_destroyed);
  6765  }
  6766  
  6767  // Tests that listeners receive events in the order they were appended to
  6768  // the list, except for *End requests, which must be received in the reverse
  6769  // order.
  6770  class SequenceTestingListener : public EmptyTestEventListener {
  6771   public:
  6772    SequenceTestingListener(std::vector<std::string>* vector, const char* id)
  6773        : vector_(vector), id_(id) {}
  6774  
  6775   protected:
  6776    virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
  6777      vector_->push_back(GetEventDescription("OnTestProgramStart"));
  6778    }
  6779  
  6780    virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
  6781      vector_->push_back(GetEventDescription("OnTestProgramEnd"));
  6782    }
  6783  
  6784    virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
  6785                                      int /*iteration*/) {
  6786      vector_->push_back(GetEventDescription("OnTestIterationStart"));
  6787    }
  6788  
  6789    virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
  6790                                    int /*iteration*/) {
  6791      vector_->push_back(GetEventDescription("OnTestIterationEnd"));
  6792    }
  6793  
  6794   private:
  6795    std::string GetEventDescription(const char* method) {
  6796      Message message;
  6797      message << id_ << "." << method;
  6798      return message.GetString();
  6799    }
  6800  
  6801    std::vector<std::string>* vector_;
  6802    const char* const id_;
  6803  
  6804    GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener);
  6805  };
  6806  
  6807  TEST(EventListenerTest, AppendKeepsOrder) {
  6808    std::vector<std::string> vec;
  6809    TestEventListeners listeners;
  6810    listeners.Append(new SequenceTestingListener(&vec, "1st"));
  6811    listeners.Append(new SequenceTestingListener(&vec, "2nd"));
  6812    listeners.Append(new SequenceTestingListener(&vec, "3rd"));
  6813  
  6814    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6815        *UnitTest::GetInstance());
  6816    ASSERT_EQ(3U, vec.size());
  6817    EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str());
  6818    EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str());
  6819    EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str());
  6820  
  6821    vec.clear();
  6822    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd(
  6823        *UnitTest::GetInstance());
  6824    ASSERT_EQ(3U, vec.size());
  6825    EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str());
  6826    EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str());
  6827    EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str());
  6828  
  6829    vec.clear();
  6830    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart(
  6831        *UnitTest::GetInstance(), 0);
  6832    ASSERT_EQ(3U, vec.size());
  6833    EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str());
  6834    EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str());
  6835    EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str());
  6836  
  6837    vec.clear();
  6838    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd(
  6839        *UnitTest::GetInstance(), 0);
  6840    ASSERT_EQ(3U, vec.size());
  6841    EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str());
  6842    EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str());
  6843    EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str());
  6844  }
  6845  
  6846  // Tests that a listener removed from a TestEventListeners list stops receiving
  6847  // events and is not deleted when the list is destroyed.
  6848  TEST(TestEventListenersTest, Release) {
  6849    int on_start_counter = 0;
  6850    bool is_destroyed = false;
  6851    // Although Append passes the ownership of this object to the list,
  6852    // the following calls release it, and we need to delete it before the
  6853    // test ends.
  6854    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6855    {
  6856      TestEventListeners listeners;
  6857      listeners.Append(listener);
  6858      EXPECT_EQ(listener, listeners.Release(listener));
  6859      TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6860          *UnitTest::GetInstance());
  6861      EXPECT_TRUE(listeners.Release(listener) == NULL);
  6862    }
  6863    EXPECT_EQ(0, on_start_counter);
  6864    EXPECT_FALSE(is_destroyed);
  6865    delete listener;
  6866  }
  6867  
  6868  // Tests that no events are forwarded when event forwarding is disabled.
  6869  TEST(EventListenerTest, SuppressEventForwarding) {
  6870    int on_start_counter = 0;
  6871    TestListener* listener = new TestListener(&on_start_counter, NULL);
  6872  
  6873    TestEventListeners listeners;
  6874    listeners.Append(listener);
  6875    ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
  6876    TestEventListenersAccessor::SuppressEventForwarding(&listeners);
  6877    ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
  6878    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6879        *UnitTest::GetInstance());
  6880    EXPECT_EQ(0, on_start_counter);
  6881  }
  6882  
  6883  // Tests that events generated by Google Test are not forwarded in
  6884  // death test subprocesses.
  6885  TEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) {
  6886    EXPECT_DEATH_IF_SUPPORTED({
  6887        GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled(
  6888            *GetUnitTestImpl()->listeners())) << "expected failure";},
  6889        "expected failure");
  6890  }
  6891  
  6892  // Tests that a listener installed via SetDefaultResultPrinter() starts
  6893  // receiving events and is returned via default_result_printer() and that
  6894  // the previous default_result_printer is removed from the list and deleted.
  6895  TEST(EventListenerTest, default_result_printer) {
  6896    int on_start_counter = 0;
  6897    bool is_destroyed = false;
  6898    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6899  
  6900    TestEventListeners listeners;
  6901    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
  6902  
  6903    EXPECT_EQ(listener, listeners.default_result_printer());
  6904  
  6905    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6906        *UnitTest::GetInstance());
  6907  
  6908    EXPECT_EQ(1, on_start_counter);
  6909  
  6910    // Replacing default_result_printer with something else should remove it
  6911    // from the list and destroy it.
  6912    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL);
  6913  
  6914    EXPECT_TRUE(listeners.default_result_printer() == NULL);
  6915    EXPECT_TRUE(is_destroyed);
  6916  
  6917    // After broadcasting an event the counter is still the same, indicating
  6918    // the listener is not in the list anymore.
  6919    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6920        *UnitTest::GetInstance());
  6921    EXPECT_EQ(1, on_start_counter);
  6922  }
  6923  
  6924  // Tests that the default_result_printer listener stops receiving events
  6925  // when removed via Release and that is not owned by the list anymore.
  6926  TEST(EventListenerTest, RemovingDefaultResultPrinterWorks) {
  6927    int on_start_counter = 0;
  6928    bool is_destroyed = false;
  6929    // Although Append passes the ownership of this object to the list,
  6930    // the following calls release it, and we need to delete it before the
  6931    // test ends.
  6932    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6933    {
  6934      TestEventListeners listeners;
  6935      TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
  6936  
  6937      EXPECT_EQ(listener, listeners.Release(listener));
  6938      EXPECT_TRUE(listeners.default_result_printer() == NULL);
  6939      EXPECT_FALSE(is_destroyed);
  6940  
  6941      // Broadcasting events now should not affect default_result_printer.
  6942      TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6943          *UnitTest::GetInstance());
  6944      EXPECT_EQ(0, on_start_counter);
  6945    }
  6946    // Destroying the list should not affect the listener now, too.
  6947    EXPECT_FALSE(is_destroyed);
  6948    delete listener;
  6949  }
  6950  
  6951  // Tests that a listener installed via SetDefaultXmlGenerator() starts
  6952  // receiving events and is returned via default_xml_generator() and that
  6953  // the previous default_xml_generator is removed from the list and deleted.
  6954  TEST(EventListenerTest, default_xml_generator) {
  6955    int on_start_counter = 0;
  6956    bool is_destroyed = false;
  6957    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6958  
  6959    TestEventListeners listeners;
  6960    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
  6961  
  6962    EXPECT_EQ(listener, listeners.default_xml_generator());
  6963  
  6964    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6965        *UnitTest::GetInstance());
  6966  
  6967    EXPECT_EQ(1, on_start_counter);
  6968  
  6969    // Replacing default_xml_generator with something else should remove it
  6970    // from the list and destroy it.
  6971    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL);
  6972  
  6973    EXPECT_TRUE(listeners.default_xml_generator() == NULL);
  6974    EXPECT_TRUE(is_destroyed);
  6975  
  6976    // After broadcasting an event the counter is still the same, indicating
  6977    // the listener is not in the list anymore.
  6978    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  6979        *UnitTest::GetInstance());
  6980    EXPECT_EQ(1, on_start_counter);
  6981  }
  6982  
  6983  // Tests that the default_xml_generator listener stops receiving events
  6984  // when removed via Release and that is not owned by the list anymore.
  6985  TEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) {
  6986    int on_start_counter = 0;
  6987    bool is_destroyed = false;
  6988    // Although Append passes the ownership of this object to the list,
  6989    // the following calls release it, and we need to delete it before the
  6990    // test ends.
  6991    TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
  6992    {
  6993      TestEventListeners listeners;
  6994      TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
  6995  
  6996      EXPECT_EQ(listener, listeners.Release(listener));
  6997      EXPECT_TRUE(listeners.default_xml_generator() == NULL);
  6998      EXPECT_FALSE(is_destroyed);
  6999  
  7000      // Broadcasting events now should not affect default_xml_generator.
  7001      TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
  7002          *UnitTest::GetInstance());
  7003      EXPECT_EQ(0, on_start_counter);
  7004    }
  7005    // Destroying the list should not affect the listener now, too.
  7006    EXPECT_FALSE(is_destroyed);
  7007    delete listener;
  7008  }
  7009  
  7010  // Sanity tests to ensure that the alternative, verbose spellings of
  7011  // some of the macros work.  We don't test them thoroughly as that
  7012  // would be quite involved.  Since their implementations are
  7013  // straightforward, and they are rarely used, we'll just rely on the
  7014  // users to tell us when they are broken.
  7015  GTEST_TEST(AlternativeNameTest, Works) {  // GTEST_TEST is the same as TEST.
  7016    GTEST_SUCCEED() << "OK";  // GTEST_SUCCEED is the same as SUCCEED.
  7017  
  7018    // GTEST_FAIL is the same as FAIL.
  7019    EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure",
  7020                         "An expected failure");
  7021  
  7022    // GTEST_ASSERT_XY is the same as ASSERT_XY.
  7023  
  7024    GTEST_ASSERT_EQ(0, 0);
  7025    EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure",
  7026                         "An expected failure");
  7027    EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure",
  7028                         "An expected failure");
  7029  
  7030    GTEST_ASSERT_NE(0, 1);
  7031    GTEST_ASSERT_NE(1, 0);
  7032    EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure",
  7033                         "An expected failure");
  7034  
  7035    GTEST_ASSERT_LE(0, 0);
  7036    GTEST_ASSERT_LE(0, 1);
  7037    EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure",
  7038                         "An expected failure");
  7039  
  7040    GTEST_ASSERT_LT(0, 1);
  7041    EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure",
  7042                         "An expected failure");
  7043    EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure",
  7044                         "An expected failure");
  7045  
  7046    GTEST_ASSERT_GE(0, 0);
  7047    GTEST_ASSERT_GE(1, 0);
  7048    EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure",
  7049                         "An expected failure");
  7050  
  7051    GTEST_ASSERT_GT(1, 0);
  7052    EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure",
  7053                         "An expected failure");
  7054    EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure",
  7055                         "An expected failure");
  7056  }
  7057  
  7058  // Tests for internal utilities necessary for implementation of the universal
  7059  // printing.
  7060  // TODO(vladl@google.com): Find a better home for them.
  7061  
  7062  class ConversionHelperBase {};
  7063  class ConversionHelperDerived : public ConversionHelperBase {};
  7064  
  7065  // Tests that IsAProtocolMessage<T>::value is a compile-time constant.
  7066  TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) {
  7067    GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value,
  7068                          const_true);
  7069    GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false);
  7070  }
  7071  
  7072  // Tests that IsAProtocolMessage<T>::value is true when T is
  7073  // proto2::Message or a sub-class of it.
  7074  TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) {
  7075    EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value);
  7076    EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value);
  7077  }
  7078  
  7079  // Tests that IsAProtocolMessage<T>::value is false when T is neither
  7080  // ProtocolMessage nor a sub-class of it.
  7081  TEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) {
  7082    EXPECT_FALSE(IsAProtocolMessage<int>::value);
  7083    EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value);
  7084  }
  7085  
  7086  // Tests that CompileAssertTypesEqual compiles when the type arguments are
  7087  // equal.
  7088  TEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) {
  7089    CompileAssertTypesEqual<void, void>();
  7090    CompileAssertTypesEqual<int*, int*>();
  7091  }
  7092  
  7093  // Tests that RemoveReference does not affect non-reference types.
  7094  TEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) {
  7095    CompileAssertTypesEqual<int, RemoveReference<int>::type>();
  7096    CompileAssertTypesEqual<const char, RemoveReference<const char>::type>();
  7097  }
  7098  
  7099  // Tests that RemoveReference removes reference from reference types.
  7100  TEST(RemoveReferenceTest, RemovesReference) {
  7101    CompileAssertTypesEqual<int, RemoveReference<int&>::type>();
  7102    CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>();
  7103  }
  7104  
  7105  // Tests GTEST_REMOVE_REFERENCE_.
  7106  
  7107  template <typename T1, typename T2>
  7108  void TestGTestRemoveReference() {
  7109    CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>();
  7110  }
  7111  
  7112  TEST(RemoveReferenceTest, MacroVersion) {
  7113    TestGTestRemoveReference<int, int>();
  7114    TestGTestRemoveReference<const char, const char&>();
  7115  }
  7116  
  7117  
  7118  // Tests that RemoveConst does not affect non-const types.
  7119  TEST(RemoveConstTest, DoesNotAffectNonConstType) {
  7120    CompileAssertTypesEqual<int, RemoveConst<int>::type>();
  7121    CompileAssertTypesEqual<char&, RemoveConst<char&>::type>();
  7122  }
  7123  
  7124  // Tests that RemoveConst removes const from const types.
  7125  TEST(RemoveConstTest, RemovesConst) {
  7126    CompileAssertTypesEqual<int, RemoveConst<const int>::type>();
  7127    CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>();
  7128    CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>();
  7129  }
  7130  
  7131  // Tests GTEST_REMOVE_CONST_.
  7132  
  7133  template <typename T1, typename T2>
  7134  void TestGTestRemoveConst() {
  7135    CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>();
  7136  }
  7137  
  7138  TEST(RemoveConstTest, MacroVersion) {
  7139    TestGTestRemoveConst<int, int>();
  7140    TestGTestRemoveConst<double&, double&>();
  7141    TestGTestRemoveConst<char, const char>();
  7142  }
  7143  
  7144  // Tests GTEST_REMOVE_REFERENCE_AND_CONST_.
  7145  
  7146  template <typename T1, typename T2>
  7147  void TestGTestRemoveReferenceAndConst() {
  7148    CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>();
  7149  }
  7150  
  7151  TEST(RemoveReferenceToConstTest, Works) {
  7152    TestGTestRemoveReferenceAndConst<int, int>();
  7153    TestGTestRemoveReferenceAndConst<double, double&>();
  7154    TestGTestRemoveReferenceAndConst<char, const char>();
  7155    TestGTestRemoveReferenceAndConst<char, const char&>();
  7156    TestGTestRemoveReferenceAndConst<const char*, const char*>();
  7157  }
  7158  
  7159  // Tests that AddReference does not affect reference types.
  7160  TEST(AddReferenceTest, DoesNotAffectReferenceType) {
  7161    CompileAssertTypesEqual<int&, AddReference<int&>::type>();
  7162    CompileAssertTypesEqual<const char&, AddReference<const char&>::type>();
  7163  }
  7164  
  7165  // Tests that AddReference adds reference to non-reference types.
  7166  TEST(AddReferenceTest, AddsReference) {
  7167    CompileAssertTypesEqual<int&, AddReference<int>::type>();
  7168    CompileAssertTypesEqual<const char&, AddReference<const char>::type>();
  7169  }
  7170  
  7171  // Tests GTEST_ADD_REFERENCE_.
  7172  
  7173  template <typename T1, typename T2>
  7174  void TestGTestAddReference() {
  7175    CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>();
  7176  }
  7177  
  7178  TEST(AddReferenceTest, MacroVersion) {
  7179    TestGTestAddReference<int&, int>();
  7180    TestGTestAddReference<const char&, const char&>();
  7181  }
  7182  
  7183  // Tests GTEST_REFERENCE_TO_CONST_.
  7184  
  7185  template <typename T1, typename T2>
  7186  void TestGTestReferenceToConst() {
  7187    CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>();
  7188  }
  7189  
  7190  TEST(GTestReferenceToConstTest, Works) {
  7191    TestGTestReferenceToConst<const char&, char>();
  7192    TestGTestReferenceToConst<const int&, const int>();
  7193    TestGTestReferenceToConst<const double&, double>();
  7194    TestGTestReferenceToConst<const std::string&, const std::string&>();
  7195  }
  7196  
  7197  // Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant.
  7198  TEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) {
  7199    GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true);
  7200    GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value),
  7201                          const_false);
  7202  }
  7203  
  7204  // Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can
  7205  // be implicitly converted to T2.
  7206  TEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) {
  7207    EXPECT_TRUE((ImplicitlyConvertible<int, double>::value));
  7208    EXPECT_TRUE((ImplicitlyConvertible<double, int>::value));
  7209    EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value));
  7210    EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value));
  7211    EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&,
  7212                                       const ConversionHelperBase&>::value));
  7213    EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase,
  7214                                       ConversionHelperBase>::value));
  7215  }
  7216  
  7217  // Tests that ImplicitlyConvertible<T1, T2>::value is false when T1
  7218  // cannot be implicitly converted to T2.
  7219  TEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) {
  7220    EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value));
  7221    EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value));
  7222    EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value));
  7223    EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&,
  7224                                        ConversionHelperDerived&>::value));
  7225  }
  7226  
  7227  // Tests IsContainerTest.
  7228  
  7229  class NonContainer {};
  7230  
  7231  TEST(IsContainerTestTest, WorksForNonContainer) {
  7232    EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0)));
  7233    EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0)));
  7234    EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0)));
  7235  }
  7236  
  7237  TEST(IsContainerTestTest, WorksForContainer) {
  7238    EXPECT_EQ(sizeof(IsContainer),
  7239              sizeof(IsContainerTest<std::vector<bool> >(0)));
  7240    EXPECT_EQ(sizeof(IsContainer),
  7241              sizeof(IsContainerTest<std::map<int, double> >(0)));
  7242  }
  7243  
  7244  // Tests ArrayEq().
  7245  
  7246  TEST(ArrayEqTest, WorksForDegeneratedArrays) {
  7247    EXPECT_TRUE(ArrayEq(5, 5L));
  7248    EXPECT_FALSE(ArrayEq('a', 0));
  7249  }
  7250  
  7251  TEST(ArrayEqTest, WorksForOneDimensionalArrays) {
  7252    // Note that a and b are distinct but compatible types.
  7253    const int a[] = { 0, 1 };
  7254    long b[] = { 0, 1 };
  7255    EXPECT_TRUE(ArrayEq(a, b));
  7256    EXPECT_TRUE(ArrayEq(a, 2, b));
  7257  
  7258    b[0] = 2;
  7259    EXPECT_FALSE(ArrayEq(a, b));
  7260    EXPECT_FALSE(ArrayEq(a, 1, b));
  7261  }
  7262  
  7263  TEST(ArrayEqTest, WorksForTwoDimensionalArrays) {
  7264    const char a[][3] = { "hi", "lo" };
  7265    const char b[][3] = { "hi", "lo" };
  7266    const char c[][3] = { "hi", "li" };
  7267  
  7268    EXPECT_TRUE(ArrayEq(a, b));
  7269    EXPECT_TRUE(ArrayEq(a, 2, b));
  7270  
  7271    EXPECT_FALSE(ArrayEq(a, c));
  7272    EXPECT_FALSE(ArrayEq(a, 2, c));
  7273  }
  7274  
  7275  // Tests ArrayAwareFind().
  7276  
  7277  TEST(ArrayAwareFindTest, WorksForOneDimensionalArray) {
  7278    const char a[] = "hello";
  7279    EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o'));
  7280    EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x'));
  7281  }
  7282  
  7283  TEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) {
  7284    int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };
  7285    const int b[2] = { 2, 3 };
  7286    EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b));
  7287  
  7288    const int c[2] = { 6, 7 };
  7289    EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c));
  7290  }
  7291  
  7292  // Tests CopyArray().
  7293  
  7294  TEST(CopyArrayTest, WorksForDegeneratedArrays) {
  7295    int n = 0;
  7296    CopyArray('a', &n);
  7297    EXPECT_EQ('a', n);
  7298  }
  7299  
  7300  TEST(CopyArrayTest, WorksForOneDimensionalArrays) {
  7301    const char a[3] = "hi";
  7302    int b[3];
  7303  #ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
  7304    CopyArray(a, &b);
  7305    EXPECT_TRUE(ArrayEq(a, b));
  7306  #endif
  7307  
  7308    int c[3];
  7309    CopyArray(a, 3, c);
  7310    EXPECT_TRUE(ArrayEq(a, c));
  7311  }
  7312  
  7313  TEST(CopyArrayTest, WorksForTwoDimensionalArrays) {
  7314    const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } };
  7315    int b[2][3];
  7316  #ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
  7317    CopyArray(a, &b);
  7318    EXPECT_TRUE(ArrayEq(a, b));
  7319  #endif
  7320  
  7321    int c[2][3];
  7322    CopyArray(a, 2, c);
  7323    EXPECT_TRUE(ArrayEq(a, c));
  7324  }
  7325  
  7326  // Tests NativeArray.
  7327  
  7328  TEST(NativeArrayTest, ConstructorFromArrayWorks) {
  7329    const int a[3] = { 0, 1, 2 };
  7330    NativeArray<int> na(a, 3, kReference);
  7331    EXPECT_EQ(3U, na.size());
  7332    EXPECT_EQ(a, na.begin());
  7333  }
  7334  
  7335  TEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) {
  7336    typedef int Array[2];
  7337    Array* a = new Array[1];
  7338    (*a)[0] = 0;
  7339    (*a)[1] = 1;
  7340    NativeArray<int> na(*a, 2, kCopy);
  7341    EXPECT_NE(*a, na.begin());
  7342    delete[] a;
  7343    EXPECT_EQ(0, na.begin()[0]);
  7344    EXPECT_EQ(1, na.begin()[1]);
  7345  
  7346    // We rely on the heap checker to verify that na deletes the copy of
  7347    // array.
  7348  }
  7349  
  7350  TEST(NativeArrayTest, TypeMembersAreCorrect) {
  7351    StaticAssertTypeEq<char, NativeArray<char>::value_type>();
  7352    StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>();
  7353  
  7354    StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>();
  7355    StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>();
  7356  }
  7357  
  7358  TEST(NativeArrayTest, MethodsWork) {
  7359    const int a[3] = { 0, 1, 2 };
  7360    NativeArray<int> na(a, 3, kCopy);
  7361    ASSERT_EQ(3U, na.size());
  7362    EXPECT_EQ(3, na.end() - na.begin());
  7363  
  7364    NativeArray<int>::const_iterator it = na.begin();
  7365    EXPECT_EQ(0, *it);
  7366    ++it;
  7367    EXPECT_EQ(1, *it);
  7368    it++;
  7369    EXPECT_EQ(2, *it);
  7370    ++it;
  7371    EXPECT_EQ(na.end(), it);
  7372  
  7373    EXPECT_TRUE(na == na);
  7374  
  7375    NativeArray<int> na2(a, 3, kReference);
  7376    EXPECT_TRUE(na == na2);
  7377  
  7378    const int b1[3] = { 0, 1, 1 };
  7379    const int b2[4] = { 0, 1, 2, 3 };
  7380    EXPECT_FALSE(na == NativeArray<int>(b1, 3, kReference));
  7381    EXPECT_FALSE(na == NativeArray<int>(b2, 4, kCopy));
  7382  }
  7383  
  7384  TEST(NativeArrayTest, WorksForTwoDimensionalArray) {
  7385    const char a[2][3] = { "hi", "lo" };
  7386    NativeArray<char[3]> na(a, 2, kReference);
  7387    ASSERT_EQ(2U, na.size());
  7388    EXPECT_EQ(a, na.begin());
  7389  }
  7390  
  7391  // Tests SkipPrefix().
  7392  
  7393  TEST(SkipPrefixTest, SkipsWhenPrefixMatches) {
  7394    const char* const str = "hello";
  7395  
  7396    const char* p = str;
  7397    EXPECT_TRUE(SkipPrefix("", &p));
  7398    EXPECT_EQ(str, p);
  7399  
  7400    p = str;
  7401    EXPECT_TRUE(SkipPrefix("hell", &p));
  7402    EXPECT_EQ(str + 4, p);
  7403  }
  7404  
  7405  TEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) {
  7406    const char* const str = "world";
  7407  
  7408    const char* p = str;
  7409    EXPECT_FALSE(SkipPrefix("W", &p));
  7410    EXPECT_EQ(str, p);
  7411  
  7412    p = str;
  7413    EXPECT_FALSE(SkipPrefix("world!", &p));
  7414    EXPECT_EQ(str, p);
  7415  }