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