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