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