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(&gtest_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(&gtest_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(&gtest_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