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