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