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