1 // Copyright 2005, Google Inc.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are
6 // met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above
11 // copyright notice, this list of conditions and the following disclaimer
12 // in the documentation and/or other materials provided with the
13 // distribution.
14 // * Neither the name of Google Inc. nor the names of its
15 // contributors may be used to endorse or promote products derived from
16 // this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 //
30 // Author: wan@google.com (Zhanyong Wan)
31 //
32 // Tests for Google Test itself. This verifies that the basic constructs of
33 // Google Test work.
34
35 #include <gtest/gtest.h>
36
37 // Verifies that the command line flag variables can be accessed
38 // in code once <gtest/gtest.h> has been #included.
39 // Do not move it after other #includes.
TEST(CommandLineFlagsTest,CanBeAccessedInCodeOnceGTestHIsIncluded)40 TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
41 bool dummy = testing::GTEST_FLAG(also_run_disabled_tests)
42 || testing::GTEST_FLAG(break_on_failure)
43 || testing::GTEST_FLAG(catch_exceptions)
44 || testing::GTEST_FLAG(color) != "unknown"
45 || testing::GTEST_FLAG(filter) != "unknown"
46 || testing::GTEST_FLAG(list_tests)
47 || testing::GTEST_FLAG(output) != "unknown"
48 || testing::GTEST_FLAG(print_time)
49 || testing::GTEST_FLAG(repeat) > 0
50 || testing::GTEST_FLAG(show_internal_stack_frames)
51 || testing::GTEST_FLAG(stack_trace_depth) > 0
52 || testing::GTEST_FLAG(throw_on_failure);
53 EXPECT_TRUE(dummy || !dummy); // Suppresses warning that dummy is unused.
54 }
55
56 #include <gtest/gtest-spi.h>
57
58 // Indicates that this translation unit is part of Google Test's
59 // implementation. It must come before gtest-internal-inl.h is
60 // included, or there will be a compiler error. This trick is to
61 // prevent a user from accidentally including gtest-internal-inl.h in
62 // his code.
63 #define GTEST_IMPLEMENTATION_ 1
64 #include "src/gtest-internal-inl.h"
65 #undef GTEST_IMPLEMENTATION_
66
67 #include <stdlib.h>
68
69 #if GTEST_HAS_PTHREAD
70 #include <pthread.h>
71 #endif // GTEST_HAS_PTHREAD
72
73 #if GTEST_OS_LINUX
74 #include <string.h>
75 #include <signal.h>
76 #include <sys/stat.h>
77 #include <unistd.h>
78 #include <string>
79 #include <vector>
80 #endif // GTEST_OS_LINUX
81
82 namespace testing {
83 namespace internal {
84 const char* FormatTimeInMillisAsSeconds(TimeInMillis ms);
85 bool ParseInt32Flag(const char* str, const char* flag, Int32* value);
86 } // namespace internal
87 } // namespace testing
88
89 using testing::internal::FormatTimeInMillisAsSeconds;
90 using testing::internal::ParseInt32Flag;
91
92 namespace testing {
93
94 GTEST_DECLARE_string_(output);
95 GTEST_DECLARE_string_(color);
96
97 namespace internal {
98 bool ShouldUseColor(bool stdout_is_tty);
99 } // namespace internal
100 } // namespace testing
101
102 using testing::AssertionFailure;
103 using testing::AssertionResult;
104 using testing::AssertionSuccess;
105 using testing::DoubleLE;
106 using testing::FloatLE;
107 using testing::GTEST_FLAG(also_run_disabled_tests);
108 using testing::GTEST_FLAG(break_on_failure);
109 using testing::GTEST_FLAG(catch_exceptions);
110 using testing::GTEST_FLAG(death_test_use_fork);
111 using testing::GTEST_FLAG(color);
112 using testing::GTEST_FLAG(filter);
113 using testing::GTEST_FLAG(list_tests);
114 using testing::GTEST_FLAG(output);
115 using testing::GTEST_FLAG(print_time);
116 using testing::GTEST_FLAG(repeat);
117 using testing::GTEST_FLAG(show_internal_stack_frames);
118 using testing::GTEST_FLAG(stack_trace_depth);
119 using testing::GTEST_FLAG(throw_on_failure);
120 using testing::IsNotSubstring;
121 using testing::IsSubstring;
122 using testing::Message;
123 using testing::ScopedFakeTestPartResultReporter;
124 using testing::StaticAssertTypeEq;
125 using testing::Test;
126 using testing::TestPartResult;
127 using testing::TestPartResultArray;
128 using testing::TPRT_FATAL_FAILURE;
129 using testing::TPRT_NONFATAL_FAILURE;
130 using testing::TPRT_SUCCESS;
131 using testing::UnitTest;
132 using testing::internal::kTestTypeIdInGoogleTest;
133 using testing::internal::AppendUserMessage;
134 using testing::internal::CodePointToUtf8;
135 using testing::internal::EqFailure;
136 using testing::internal::FloatingPoint;
137 using testing::internal::GetCurrentOsStackTraceExceptTop;
138 using testing::internal::GetFailedPartCount;
139 using testing::internal::GetTestTypeId;
140 using testing::internal::GetTypeId;
141 using testing::internal::GTestFlagSaver;
142 using testing::internal::Int32;
143 using testing::internal::Int32FromEnvOrDie;
144 using testing::internal::List;
145 using testing::internal::ShouldRunTestOnShard;
146 using testing::internal::ShouldShard;
147 using testing::internal::ShouldUseColor;
148 using testing::internal::StreamableToString;
149 using testing::internal::String;
150 using testing::internal::TestProperty;
151 using testing::internal::TestResult;
152 using testing::internal::ThreadLocal;
153 using testing::internal::UnitTestImpl;
154 using testing::internal::WideStringToUtf8;
155
156 // This line tests that we can define tests in an unnamed namespace.
157 namespace {
158
159 // Tests GetTypeId.
160
TEST(GetTypeIdTest,ReturnsSameValueForSameType)161 TEST(GetTypeIdTest, ReturnsSameValueForSameType) {
162 EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>());
163 EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>());
164 }
165
166 class SubClassOfTest : public Test {};
167 class AnotherSubClassOfTest : public Test {};
168
TEST(GetTypeIdTest,ReturnsDifferentValuesForDifferentTypes)169 TEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) {
170 EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>());
171 EXPECT_NE(GetTypeId<int>(), GetTypeId<char>());
172 EXPECT_NE(GetTypeId<int>(), GetTestTypeId());
173 EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId());
174 EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId());
175 EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>());
176 }
177
178 // Verifies that GetTestTypeId() returns the same value, no matter it
179 // is called from inside Google Test or outside of it.
TEST(GetTestTypeIdTest,ReturnsTheSameValueInsideOrOutsideOfGoogleTest)180 TEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) {
181 EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId());
182 }
183
184 // Tests FormatTimeInMillisAsSeconds().
185
186 // DISABLED see bug 2398288
TEST(FormatTimeInMillisAsSecondsTest,DISABLED_FormatsZero)187 TEST(FormatTimeInMillisAsSecondsTest, DISABLED_FormatsZero) {
188 EXPECT_STREQ("0", FormatTimeInMillisAsSeconds(0));
189 }
190
191 // DISABLED see bug 2398288
TEST(FormatTimeInMillisAsSecondsTest,DISABLED_FormatsPositiveNumber)192 TEST(FormatTimeInMillisAsSecondsTest, DISABLED_FormatsPositiveNumber) {
193 EXPECT_STREQ("0.003", FormatTimeInMillisAsSeconds(3));
194 EXPECT_STREQ("0.01", FormatTimeInMillisAsSeconds(10));
195 EXPECT_STREQ("0.2", FormatTimeInMillisAsSeconds(200));
196 EXPECT_STREQ("1.2", FormatTimeInMillisAsSeconds(1200));
197 EXPECT_STREQ("3", FormatTimeInMillisAsSeconds(3000));
198 }
199
200 // DISABLED see bug 2398288
TEST(FormatTimeInMillisAsSecondsTest,DISABLED_FormatsNegativeNumber)201 TEST(FormatTimeInMillisAsSecondsTest, DISABLED_FormatsNegativeNumber) {
202 EXPECT_STREQ("-0.003", FormatTimeInMillisAsSeconds(-3));
203 EXPECT_STREQ("-0.01", FormatTimeInMillisAsSeconds(-10));
204 EXPECT_STREQ("-0.2", FormatTimeInMillisAsSeconds(-200));
205 EXPECT_STREQ("-1.2", FormatTimeInMillisAsSeconds(-1200));
206 EXPECT_STREQ("-3", FormatTimeInMillisAsSeconds(-3000));
207 }
208
209 #if !GTEST_OS_SYMBIAN
210 // NULL testing does not work with Symbian compilers.
211
212 // Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null
213 // pointer literal.
TEST(NullLiteralTest,IsTrueForNullLiterals)214 TEST(NullLiteralTest, IsTrueForNullLiterals) {
215 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL));
216 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0));
217 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(1 - 1));
218 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U));
219 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L));
220 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(false));
221 EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(true && false));
222 }
223
224 // Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null
225 // pointer literal.
TEST(NullLiteralTest,IsFalseForNonNullLiterals)226 TEST(NullLiteralTest, IsFalseForNonNullLiterals) {
227 EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1));
228 EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0));
229 EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a'));
230 EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL)));
231 }
232
233 #endif // !GTEST_OS_SYMBIAN
234 //
235 // Tests CodePointToUtf8().
236
237 // Tests that the NUL character L'\0' is encoded correctly.
TEST(CodePointToUtf8Test,CanEncodeNul)238 TEST(CodePointToUtf8Test, CanEncodeNul) {
239 char buffer[32];
240 EXPECT_STREQ("", CodePointToUtf8(L'\0', buffer));
241 }
242
243 // Tests that ASCII characters are encoded correctly.
TEST(CodePointToUtf8Test,CanEncodeAscii)244 TEST(CodePointToUtf8Test, CanEncodeAscii) {
245 char buffer[32];
246 EXPECT_STREQ("a", CodePointToUtf8(L'a', buffer));
247 EXPECT_STREQ("Z", CodePointToUtf8(L'Z', buffer));
248 EXPECT_STREQ("&", CodePointToUtf8(L'&', buffer));
249 EXPECT_STREQ("\x7F", CodePointToUtf8(L'\x7F', buffer));
250 }
251
252 // Tests that Unicode code-points that have 8 to 11 bits are encoded
253 // as 110xxxxx 10xxxxxx.
TEST(CodePointToUtf8Test,CanEncode8To11Bits)254 TEST(CodePointToUtf8Test, CanEncode8To11Bits) {
255 char buffer[32];
256 // 000 1101 0011 => 110-00011 10-010011
257 EXPECT_STREQ("\xC3\x93", CodePointToUtf8(L'\xD3', buffer));
258
259 // 101 0111 0110 => 110-10101 10-110110
260 EXPECT_STREQ("\xD5\xB6", CodePointToUtf8(L'\x576', buffer));
261 }
262
263 // Tests that Unicode code-points that have 12 to 16 bits are encoded
264 // as 1110xxxx 10xxxxxx 10xxxxxx.
TEST(CodePointToUtf8Test,CanEncode12To16Bits)265 TEST(CodePointToUtf8Test, CanEncode12To16Bits) {
266 char buffer[32];
267 // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
268 EXPECT_STREQ("\xE0\xA3\x93", CodePointToUtf8(L'\x8D3', buffer));
269
270 // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
271 EXPECT_STREQ("\xEC\x9D\x8D", CodePointToUtf8(L'\xC74D', buffer));
272 }
273
274 #if !GTEST_WIDE_STRING_USES_UTF16_
275 // Tests in this group require a wchar_t to hold > 16 bits, and thus
276 // are skipped on Windows, Cygwin, and Symbian, where a wchar_t is
277 // 16-bit wide. This code may not compile on those systems.
278
279 // Tests that Unicode code-points that have 17 to 21 bits are encoded
280 // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.
TEST(CodePointToUtf8Test,CanEncode17To21Bits)281 TEST(CodePointToUtf8Test, CanEncode17To21Bits) {
282 char buffer[32];
283 // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
284 EXPECT_STREQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3', buffer));
285
286 // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000
287 EXPECT_STREQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400', buffer));
288
289 // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
290 EXPECT_STREQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634', buffer));
291 }
292
293 // Tests that encoding an invalid code-point generates the expected result.
TEST(CodePointToUtf8Test,CanEncodeInvalidCodePoint)294 TEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) {
295 char buffer[32];
296 EXPECT_STREQ("(Invalid Unicode 0x1234ABCD)",
297 CodePointToUtf8(L'\x1234ABCD', buffer));
298 }
299
300 #endif // !GTEST_WIDE_STRING_USES_UTF16_
301
302 // Tests WideStringToUtf8().
303
304 // Tests that the NUL character L'\0' is encoded correctly.
TEST(WideStringToUtf8Test,CanEncodeNul)305 TEST(WideStringToUtf8Test, CanEncodeNul) {
306 EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str());
307 EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str());
308 }
309
310 #if GTEST_HAS_STD_WSTRING
311 // Tests that ASCII strings are encoded correctly.
TEST(WideStringToUtf8Test,CanEncodeAscii)312 TEST(WideStringToUtf8Test, CanEncodeAscii) {
313 EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str());
314 EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str());
315 EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str());
316 EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str());
317 }
318 #endif // GTEST_HAS_STD_WSTRING
319
320 // Tests that Unicode code-points that have 8 to 11 bits are encoded
321 // as 110xxxxx 10xxxxxx.
TEST(WideStringToUtf8Test,CanEncode8To11Bits)322 TEST(WideStringToUtf8Test, CanEncode8To11Bits) {
323 // 000 1101 0011 => 110-00011 10-010011
324 EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str());
325 EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str());
326
327 // 101 0111 0110 => 110-10101 10-110110
328 EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(L"\x576", 1).c_str());
329 EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(L"\x576", -1).c_str());
330 }
331
332 // Tests that Unicode code-points that have 12 to 16 bits are encoded
333 // as 1110xxxx 10xxxxxx 10xxxxxx.
TEST(WideStringToUtf8Test,CanEncode12To16Bits)334 TEST(WideStringToUtf8Test, CanEncode12To16Bits) {
335 // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
336 EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(L"\x8D3", 1).c_str());
337 EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(L"\x8D3", -1).c_str());
338
339 // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
340 EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(L"\xC74D", 1).c_str());
341 EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(L"\xC74D", -1).c_str());
342 }
343
344 // Tests that the conversion stops when the function encounters \0 character.
TEST(WideStringToUtf8Test,StopsOnNulCharacter)345 TEST(WideStringToUtf8Test, StopsOnNulCharacter) {
346 EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str());
347 }
348
349 // Tests that the conversion stops when the function reaches the limit
350 // specified by the 'length' parameter.
TEST(WideStringToUtf8Test,StopsWhenLengthLimitReached)351 TEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) {
352 EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str());
353 }
354
355
356 #if !GTEST_WIDE_STRING_USES_UTF16_
357 // Tests that Unicode code-points that have 17 to 21 bits are encoded
358 // as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile
359 // on the systems using UTF-16 encoding.
TEST(WideStringToUtf8Test,CanEncode17To21Bits)360 TEST(WideStringToUtf8Test, CanEncode17To21Bits) {
361 // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
362 EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str());
363 EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str());
364
365 // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
366 EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str());
367 EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str());
368 }
369
370 // Tests that encoding an invalid code-point generates the expected result.
TEST(WideStringToUtf8Test,CanEncodeInvalidCodePoint)371 TEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) {
372 EXPECT_STREQ("(Invalid Unicode 0xABCDFF)",
373 WideStringToUtf8(L"\xABCDFF", -1).c_str());
374 }
375 #else // !GTEST_WIDE_STRING_USES_UTF16_
376 // Tests that surrogate pairs are encoded correctly on the systems using
377 // UTF-16 encoding in the wide strings.
TEST(WideStringToUtf8Test,CanEncodeValidUtf16SUrrogatePairs)378 TEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) {
379 EXPECT_STREQ("\xF0\x90\x90\x80",
380 WideStringToUtf8(L"\xD801\xDC00", -1).c_str());
381 }
382
383 // Tests that encoding an invalid UTF-16 surrogate pair
384 // generates the expected result.
TEST(WideStringToUtf8Test,CanEncodeInvalidUtf16SurrogatePair)385 TEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) {
386 // Leading surrogate is at the end of the string.
387 EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(L"\xD800", -1).c_str());
388 // Leading surrogate is not followed by the trailing surrogate.
389 EXPECT_STREQ("\xED\xA0\x80$", WideStringToUtf8(L"\xD800$", -1).c_str());
390 // Trailing surrogate appearas without a leading surrogate.
391 EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(L"\xDC00PQR", -1).c_str());
392 }
393 #endif // !GTEST_WIDE_STRING_USES_UTF16_
394
395 // Tests that codepoint concatenation works correctly.
396 #if GTEST_HAS_STD_WSTRING
397 #if !GTEST_WIDE_STRING_USES_UTF16_
TEST(WideStringToUtf8Test,ConcatenatesCodepointsCorrectly)398 TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
399 EXPECT_STREQ(
400 "\xF4\x88\x98\xB4"
401 "\xEC\x9D\x8D"
402 "\n"
403 "\xD5\xB6"
404 "\xE0\xA3\x93"
405 "\xF4\x88\x98\xB4",
406 WideStringToUtf8(L"\x108634\xC74D\n\x576\x8D3\x108634", -1).c_str());
407 }
408 #else
TEST(WideStringToUtf8Test,ConcatenatesCodepointsCorrectly)409 TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
410 EXPECT_STREQ(
411 "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93",
412 WideStringToUtf8(L"\xC74D\n\x576\x8D3", -1).c_str());
413 }
414 #endif // !GTEST_WIDE_STRING_USES_UTF16_
415 #endif // GTEST_HAS_STD_WSTRING
416
417 // Tests the List template class.
418
419 // Tests List::PushFront().
TEST(ListTest,PushFront)420 TEST(ListTest, PushFront) {
421 List<int> a;
422 ASSERT_EQ(0u, a.size());
423
424 // Calls PushFront() on an empty list.
425 a.PushFront(1);
426 ASSERT_EQ(1u, a.size());
427 EXPECT_EQ(1, a.Head()->element());
428 ASSERT_EQ(a.Head(), a.Last());
429
430 // Calls PushFront() on a singleton list.
431 a.PushFront(2);
432 ASSERT_EQ(2u, a.size());
433 EXPECT_EQ(2, a.Head()->element());
434 EXPECT_EQ(1, a.Last()->element());
435
436 // Calls PushFront() on a list with more than one elements.
437 a.PushFront(3);
438 ASSERT_EQ(3u, a.size());
439 EXPECT_EQ(3, a.Head()->element());
440 EXPECT_EQ(2, a.Head()->next()->element());
441 EXPECT_EQ(1, a.Last()->element());
442 }
443
444 // Tests List::PopFront().
TEST(ListTest,PopFront)445 TEST(ListTest, PopFront) {
446 List<int> a;
447
448 // Popping on an empty list should fail.
449 EXPECT_FALSE(a.PopFront(NULL));
450
451 // Popping again on an empty list should fail, and the result element
452 // shouldn't be overwritten.
453 int element = 1;
454 EXPECT_FALSE(a.PopFront(&element));
455 EXPECT_EQ(1, element);
456
457 a.PushFront(2);
458 a.PushFront(3);
459
460 // PopFront() should pop the element in the front of the list.
461 EXPECT_TRUE(a.PopFront(&element));
462 EXPECT_EQ(3, element);
463
464 // After popping the last element, the list should be empty.
465 EXPECT_TRUE(a.PopFront(NULL));
466 EXPECT_EQ(0u, a.size());
467 }
468
469 // Tests inserting at the beginning using List::InsertAfter().
TEST(ListTest,InsertAfterAtBeginning)470 TEST(ListTest, InsertAfterAtBeginning) {
471 List<int> a;
472 ASSERT_EQ(0u, a.size());
473
474 // Inserts into an empty list.
475 a.InsertAfter(NULL, 1);
476 ASSERT_EQ(1u, a.size());
477 EXPECT_EQ(1, a.Head()->element());
478 ASSERT_EQ(a.Head(), a.Last());
479
480 // Inserts at the beginning of a singleton list.
481 a.InsertAfter(NULL, 2);
482 ASSERT_EQ(2u, a.size());
483 EXPECT_EQ(2, a.Head()->element());
484 EXPECT_EQ(1, a.Last()->element());
485
486 // Inserts at the beginning of a list with more than one elements.
487 a.InsertAfter(NULL, 3);
488 ASSERT_EQ(3u, a.size());
489 EXPECT_EQ(3, a.Head()->element());
490 EXPECT_EQ(2, a.Head()->next()->element());
491 EXPECT_EQ(1, a.Last()->element());
492 }
493
494 // Tests inserting at a location other than the beginning using
495 // List::InsertAfter().
TEST(ListTest,InsertAfterNotAtBeginning)496 TEST(ListTest, InsertAfterNotAtBeginning) {
497 // Prepares a singleton list.
498 List<int> a;
499 a.PushBack(1);
500
501 // Inserts at the end of a singleton list.
502 a.InsertAfter(a.Last(), 2);
503 ASSERT_EQ(2u, a.size());
504 EXPECT_EQ(1, a.Head()->element());
505 EXPECT_EQ(2, a.Last()->element());
506
507 // Inserts at the end of a list with more than one elements.
508 a.InsertAfter(a.Last(), 3);
509 ASSERT_EQ(3u, a.size());
510 EXPECT_EQ(1, a.Head()->element());
511 EXPECT_EQ(2, a.Head()->next()->element());
512 EXPECT_EQ(3, a.Last()->element());
513
514 // Inserts in the middle of a list.
515 a.InsertAfter(a.Head(), 4);
516 ASSERT_EQ(4u, a.size());
517 EXPECT_EQ(1, a.Head()->element());
518 EXPECT_EQ(4, a.Head()->next()->element());
519 EXPECT_EQ(2, a.Head()->next()->next()->element());
520 EXPECT_EQ(3, a.Last()->element());
521 }
522
523
524 // Tests the String class.
525
526 // Tests String's constructors.
TEST(StringTest,Constructors)527 TEST(StringTest, Constructors) {
528 // Default ctor.
529 String s1;
530 // We aren't using EXPECT_EQ(NULL, s1.c_str()) because comparing
531 // pointers with NULL isn't supported on all platforms.
532 EXPECT_TRUE(NULL == s1.c_str());
533
534 // Implicitly constructs from a C-string.
535 String s2 = "Hi";
536 EXPECT_STREQ("Hi", s2.c_str());
537
538 // Constructs from a C-string and a length.
539 String s3("hello", 3);
540 EXPECT_STREQ("hel", s3.c_str());
541
542 // Copy ctor.
543 String s4 = s3;
544 EXPECT_STREQ("hel", s4.c_str());
545 }
546
547 #if GTEST_HAS_STD_STRING
548
TEST(StringTest,ConvertsFromStdString)549 TEST(StringTest, ConvertsFromStdString) {
550 // An empty std::string.
551 const std::string src1("");
552 const String dest1 = src1;
553 EXPECT_STREQ("", dest1.c_str());
554
555 // A normal std::string.
556 const std::string src2("Hi");
557 const String dest2 = src2;
558 EXPECT_STREQ("Hi", dest2.c_str());
559
560 // An std::string with an embedded NUL character.
561 const char src3[] = "Hello\0world.";
562 const String dest3 = std::string(src3, sizeof(src3));
563 EXPECT_STREQ("Hello", dest3.c_str());
564 }
565
TEST(StringTest,ConvertsToStdString)566 TEST(StringTest, ConvertsToStdString) {
567 // An empty String.
568 const String src1("");
569 const std::string dest1 = src1;
570 EXPECT_EQ("", dest1);
571
572 // A normal String.
573 const String src2("Hi");
574 const std::string dest2 = src2;
575 EXPECT_EQ("Hi", dest2);
576 }
577
578 #endif // GTEST_HAS_STD_STRING
579
580 #if GTEST_HAS_GLOBAL_STRING
581
TEST(StringTest,ConvertsFromGlobalString)582 TEST(StringTest, ConvertsFromGlobalString) {
583 // An empty ::string.
584 const ::string src1("");
585 const String dest1 = src1;
586 EXPECT_STREQ("", dest1.c_str());
587
588 // A normal ::string.
589 const ::string src2("Hi");
590 const String dest2 = src2;
591 EXPECT_STREQ("Hi", dest2.c_str());
592
593 // An ::string with an embedded NUL character.
594 const char src3[] = "Hello\0world.";
595 const String dest3 = ::string(src3, sizeof(src3));
596 EXPECT_STREQ("Hello", dest3.c_str());
597 }
598
TEST(StringTest,ConvertsToGlobalString)599 TEST(StringTest, ConvertsToGlobalString) {
600 // An empty String.
601 const String src1("");
602 const ::string dest1 = src1;
603 EXPECT_EQ("", dest1);
604
605 // A normal String.
606 const String src2("Hi");
607 const ::string dest2 = src2;
608 EXPECT_EQ("Hi", dest2);
609 }
610
611 #endif // GTEST_HAS_GLOBAL_STRING
612
613 // Tests String::ShowCString().
TEST(StringTest,ShowCString)614 TEST(StringTest, ShowCString) {
615 EXPECT_STREQ("(null)", String::ShowCString(NULL));
616 EXPECT_STREQ("", String::ShowCString(""));
617 EXPECT_STREQ("foo", String::ShowCString("foo"));
618 }
619
620 // Tests String::ShowCStringQuoted().
TEST(StringTest,ShowCStringQuoted)621 TEST(StringTest, ShowCStringQuoted) {
622 EXPECT_STREQ("(null)",
623 String::ShowCStringQuoted(NULL).c_str());
624 EXPECT_STREQ("\"\"",
625 String::ShowCStringQuoted("").c_str());
626 EXPECT_STREQ("\"foo\"",
627 String::ShowCStringQuoted("foo").c_str());
628 }
629
630 // Tests String::operator==().
TEST(StringTest,Equals)631 TEST(StringTest, Equals) {
632 const String null(NULL);
633 EXPECT_TRUE(null == NULL); // NOLINT
634 EXPECT_FALSE(null == ""); // NOLINT
635 EXPECT_FALSE(null == "bar"); // NOLINT
636
637 const String empty("");
638 EXPECT_FALSE(empty == NULL); // NOLINT
639 EXPECT_TRUE(empty == ""); // NOLINT
640 EXPECT_FALSE(empty == "bar"); // NOLINT
641
642 const String foo("foo");
643 EXPECT_FALSE(foo == NULL); // NOLINT
644 EXPECT_FALSE(foo == ""); // NOLINT
645 EXPECT_FALSE(foo == "bar"); // NOLINT
646 EXPECT_TRUE(foo == "foo"); // NOLINT
647 }
648
649 // Tests String::operator!=().
TEST(StringTest,NotEquals)650 TEST(StringTest, NotEquals) {
651 const String null(NULL);
652 EXPECT_FALSE(null != NULL); // NOLINT
653 EXPECT_TRUE(null != ""); // NOLINT
654 EXPECT_TRUE(null != "bar"); // NOLINT
655
656 const String empty("");
657 EXPECT_TRUE(empty != NULL); // NOLINT
658 EXPECT_FALSE(empty != ""); // NOLINT
659 EXPECT_TRUE(empty != "bar"); // NOLINT
660
661 const String foo("foo");
662 EXPECT_TRUE(foo != NULL); // NOLINT
663 EXPECT_TRUE(foo != ""); // NOLINT
664 EXPECT_TRUE(foo != "bar"); // NOLINT
665 EXPECT_FALSE(foo != "foo"); // NOLINT
666 }
667
668 // Tests String::EndsWith().
TEST(StringTest,EndsWith)669 TEST(StringTest, EndsWith) {
670 EXPECT_TRUE(String("foobar").EndsWith("bar"));
671 EXPECT_TRUE(String("foobar").EndsWith(""));
672 EXPECT_TRUE(String("").EndsWith(""));
673
674 EXPECT_FALSE(String("foobar").EndsWith("foo"));
675 EXPECT_FALSE(String("").EndsWith("foo"));
676 }
677
678 // Tests String::EndsWithCaseInsensitive().
TEST(StringTest,EndsWithCaseInsensitive)679 TEST(StringTest, EndsWithCaseInsensitive) {
680 EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive("BAR"));
681 EXPECT_TRUE(String("foobaR").EndsWithCaseInsensitive("bar"));
682 EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive(""));
683 EXPECT_TRUE(String("").EndsWithCaseInsensitive(""));
684
685 EXPECT_FALSE(String("Foobar").EndsWithCaseInsensitive("foo"));
686 EXPECT_FALSE(String("foobar").EndsWithCaseInsensitive("Foo"));
687 EXPECT_FALSE(String("").EndsWithCaseInsensitive("foo"));
688 }
689
690 // Tests String::CaseInsensitiveWideCStringEquals
TEST(StringTest,CaseInsensitiveWideCStringEquals)691 TEST(StringTest, CaseInsensitiveWideCStringEquals) {
692 EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL));
693 EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(NULL, L""));
694 EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", NULL));
695 EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(NULL, L"foobar"));
696 EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", NULL));
697 EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar"));
698 EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR"));
699 EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar"));
700 }
701
702 // Tests that NULL can be assigned to a String.
TEST(StringTest,CanBeAssignedNULL)703 TEST(StringTest, CanBeAssignedNULL) {
704 const String src(NULL);
705 String dest;
706
707 dest = src;
708 EXPECT_STREQ(NULL, dest.c_str());
709 }
710
711 // Tests that the empty string "" can be assigned to a String.
TEST(StringTest,CanBeAssignedEmpty)712 TEST(StringTest, CanBeAssignedEmpty) {
713 const String src("");
714 String dest;
715
716 dest = src;
717 EXPECT_STREQ("", dest.c_str());
718 }
719
720 // Tests that a non-empty string can be assigned to a String.
TEST(StringTest,CanBeAssignedNonEmpty)721 TEST(StringTest, CanBeAssignedNonEmpty) {
722 const String src("hello");
723 String dest;
724
725 dest = src;
726 EXPECT_STREQ("hello", dest.c_str());
727 }
728
729 // Tests that a String can be assigned to itself.
TEST(StringTest,CanBeAssignedSelf)730 TEST(StringTest, CanBeAssignedSelf) {
731 String dest("hello");
732
733 dest = dest;
734 EXPECT_STREQ("hello", dest.c_str());
735 }
736
737 #if GTEST_OS_WINDOWS
738
739 // Tests String::ShowWideCString().
TEST(StringTest,ShowWideCString)740 TEST(StringTest, ShowWideCString) {
741 EXPECT_STREQ("(null)",
742 String::ShowWideCString(NULL).c_str());
743 EXPECT_STREQ("", String::ShowWideCString(L"").c_str());
744 EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str());
745 }
746
747 // Tests String::ShowWideCStringQuoted().
TEST(StringTest,ShowWideCStringQuoted)748 TEST(StringTest, ShowWideCStringQuoted) {
749 EXPECT_STREQ("(null)",
750 String::ShowWideCStringQuoted(NULL).c_str());
751 EXPECT_STREQ("L\"\"",
752 String::ShowWideCStringQuoted(L"").c_str());
753 EXPECT_STREQ("L\"foo\"",
754 String::ShowWideCStringQuoted(L"foo").c_str());
755 }
756
757 #ifdef _WIN32_WCE
TEST(StringTest,AnsiAndUtf16Null)758 TEST(StringTest, AnsiAndUtf16Null) {
759 EXPECT_EQ(NULL, String::AnsiToUtf16(NULL));
760 EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL));
761 }
762
TEST(StringTest,AnsiAndUtf16ConvertBasic)763 TEST(StringTest, AnsiAndUtf16ConvertBasic) {
764 const char* ansi = String::Utf16ToAnsi(L"str");
765 EXPECT_STREQ("str", ansi);
766 delete [] ansi;
767 const WCHAR* utf16 = String::AnsiToUtf16("str");
768 EXPECT_TRUE(wcsncmp(L"str", utf16, 3) == 0);
769 delete [] utf16;
770 }
771
TEST(StringTest,AnsiAndUtf16ConvertPathChars)772 TEST(StringTest, AnsiAndUtf16ConvertPathChars) {
773 const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?");
774 EXPECT_STREQ(".:\\ \"*?", ansi);
775 delete [] ansi;
776 const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?");
777 EXPECT_TRUE(wcsncmp(L".:\\ \"*?", utf16, 3) == 0);
778 delete [] utf16;
779 }
780 #endif // _WIN32_WCE
781
782 #endif // GTEST_OS_WINDOWS
783
784 // Tests TestProperty construction.
TEST(TestPropertyTest,StringValue)785 TEST(TestPropertyTest, StringValue) {
786 TestProperty property("key", "1");
787 EXPECT_STREQ("key", property.key());
788 EXPECT_STREQ("1", property.value());
789 }
790
791 // Tests TestProperty replacing a value.
TEST(TestPropertyTest,ReplaceStringValue)792 TEST(TestPropertyTest, ReplaceStringValue) {
793 TestProperty property("key", "1");
794 EXPECT_STREQ("1", property.value());
795 property.SetValue("2");
796 EXPECT_STREQ("2", property.value());
797 }
798
799 class ScopedFakeTestPartResultReporterTest : public Test {
800 protected:
801 enum FailureMode {
802 FATAL_FAILURE,
803 NONFATAL_FAILURE
804 };
AddFailure(FailureMode failure)805 static void AddFailure(FailureMode failure) {
806 if (failure == FATAL_FAILURE) {
807 FAIL() << "Expected fatal failure.";
808 } else {
809 ADD_FAILURE() << "Expected non-fatal failure.";
810 }
811 }
812 };
813
814 // Tests that ScopedFakeTestPartResultReporter intercepts test
815 // failures.
TEST_F(ScopedFakeTestPartResultReporterTest,InterceptsTestFailures)816 TEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) {
817 TestPartResultArray results;
818 {
819 ScopedFakeTestPartResultReporter reporter(
820 ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD,
821 &results);
822 AddFailure(NONFATAL_FAILURE);
823 AddFailure(FATAL_FAILURE);
824 }
825
826 EXPECT_EQ(2, results.size());
827 EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
828 EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
829 }
830
TEST_F(ScopedFakeTestPartResultReporterTest,DeprecatedConstructor)831 TEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) {
832 TestPartResultArray results;
833 {
834 // Tests, that the deprecated constructor still works.
835 ScopedFakeTestPartResultReporter reporter(&results);
836 AddFailure(NONFATAL_FAILURE);
837 }
838 EXPECT_EQ(1, results.size());
839 }
840
841 #if GTEST_IS_THREADSAFE && GTEST_HAS_PTHREAD
842
843 class ScopedFakeTestPartResultReporterWithThreadsTest
844 : public ScopedFakeTestPartResultReporterTest {
845 protected:
AddFailureInOtherThread(FailureMode failure)846 static void AddFailureInOtherThread(FailureMode failure) {
847 pthread_t tid;
848 pthread_create(&tid,
849 NULL,
850 ScopedFakeTestPartResultReporterWithThreadsTest::
851 FailureThread,
852 &failure);
853 pthread_join(tid, NULL);
854 }
855 private:
FailureThread(void * attr)856 static void* FailureThread(void* attr) {
857 FailureMode* failure = static_cast<FailureMode*>(attr);
858 AddFailure(*failure);
859 return NULL;
860 }
861 };
862
TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest,InterceptsTestFailuresInAllThreads)863 TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest,
864 InterceptsTestFailuresInAllThreads) {
865 TestPartResultArray results;
866 {
867 ScopedFakeTestPartResultReporter reporter(
868 ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results);
869 AddFailure(NONFATAL_FAILURE);
870 AddFailure(FATAL_FAILURE);
871 AddFailureInOtherThread(NONFATAL_FAILURE);
872 AddFailureInOtherThread(FATAL_FAILURE);
873 }
874
875 EXPECT_EQ(4, results.size());
876 EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
877 EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
878 EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed());
879 EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed());
880 }
881
882 #endif // GTEST_IS_THREADSAFE && GTEST_HAS_PTHREAD
883
884 // Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}.
885
886 typedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest;
887
TEST_F(ExpectFatalFailureTest,CatchesFatalFaliure)888 TEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) {
889 EXPECT_FATAL_FAILURE(AddFailure(FATAL_FAILURE), "Expected fatal failure.");
890 }
891
TEST_F(ExpectFatalFailureTest,CatchesFatalFailureOnAllThreads)892 TEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) {
893 // We have another test below to verify that the macro catches fatal
894 // failures generated on another thread.
895 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailure(FATAL_FAILURE),
896 "Expected fatal failure.");
897 }
898
899 // Tests that EXPECT_FATAL_FAILURE() can be used in a non-void
900 // function even when the statement in it contains ASSERT_*.
901
NonVoidFunction()902 int NonVoidFunction() {
903 EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
904 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
905 return 0;
906 }
907
TEST_F(ExpectFatalFailureTest,CanBeUsedInNonVoidFunction)908 TEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) {
909 NonVoidFunction();
910 }
911
912 // Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the
913 // current function even though 'statement' generates a fatal failure.
914
DoesNotAbortHelper(bool * aborted)915 void DoesNotAbortHelper(bool* aborted) {
916 EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
917 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
918
919 *aborted = false;
920 }
921
TEST_F(ExpectFatalFailureTest,DoesNotAbort)922 TEST_F(ExpectFatalFailureTest, DoesNotAbort) {
923 bool aborted = true;
924 DoesNotAbortHelper(&aborted);
925 EXPECT_FALSE(aborted);
926 }
927
928 // Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a
929 // statement that contains a macro which expands to code containing an
930 // unprotected comma.
931
932 static int global_var = 0;
933 #define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++
934
TEST_F(ExpectFatalFailureTest,AcceptsMacroThatExpandsToUnprotectedComma)935 TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
936 EXPECT_FATAL_FAILURE({
937 GTEST_USE_UNPROTECTED_COMMA_;
938 AddFailure(FATAL_FAILURE);
939 }, "");
940
941 EXPECT_FATAL_FAILURE_ON_ALL_THREADS({
942 GTEST_USE_UNPROTECTED_COMMA_;
943 AddFailure(FATAL_FAILURE);
944 }, "");
945 }
946
947 // Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}.
948
949 typedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest;
950
TEST_F(ExpectNonfatalFailureTest,CatchesNonfatalFailure)951 TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) {
952 EXPECT_NONFATAL_FAILURE(AddFailure(NONFATAL_FAILURE),
953 "Expected non-fatal failure.");
954 }
955
TEST_F(ExpectNonfatalFailureTest,CatchesNonfatalFailureOnAllThreads)956 TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) {
957 // We have another test below to verify that the macro catches
958 // non-fatal failures generated on another thread.
959 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddFailure(NONFATAL_FAILURE),
960 "Expected non-fatal failure.");
961 }
962
963 // Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a
964 // statement that contains a macro which expands to code containing an
965 // unprotected comma.
TEST_F(ExpectNonfatalFailureTest,AcceptsMacroThatExpandsToUnprotectedComma)966 TEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
967 EXPECT_NONFATAL_FAILURE({
968 GTEST_USE_UNPROTECTED_COMMA_;
969 AddFailure(NONFATAL_FAILURE);
970 }, "");
971
972 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({
973 GTEST_USE_UNPROTECTED_COMMA_;
974 AddFailure(NONFATAL_FAILURE);
975 }, "");
976 }
977
978 #if GTEST_IS_THREADSAFE && GTEST_HAS_PTHREAD
979
980 typedef ScopedFakeTestPartResultReporterWithThreadsTest
981 ExpectFailureWithThreadsTest;
982
TEST_F(ExpectFailureWithThreadsTest,ExpectFatalFailureOnAllThreads)983 TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) {
984 EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE),
985 "Expected fatal failure.");
986 }
987
TEST_F(ExpectFailureWithThreadsTest,ExpectNonFatalFailureOnAllThreads)988 TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) {
989 EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(
990 AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure.");
991 }
992
993 #endif // GTEST_IS_THREADSAFE && GTEST_HAS_PTHREAD
994
995 // Tests the TestResult class
996
997 // The test fixture for testing TestResult.
998 class TestResultTest : public Test {
999 protected:
1000 typedef List<TestPartResult> TPRList;
1001
1002 // We make use of 2 TestPartResult objects,
1003 TestPartResult * pr1, * pr2;
1004
1005 // ... and 3 TestResult objects.
1006 TestResult * r0, * r1, * r2;
1007
SetUp()1008 virtual void SetUp() {
1009 // pr1 is for success.
1010 pr1 = new TestPartResult(TPRT_SUCCESS, "foo/bar.cc", 10, "Success!");
1011
1012 // pr2 is for fatal failure.
1013 pr2 = new TestPartResult(TPRT_FATAL_FAILURE, "foo/bar.cc",
1014 -1, // This line number means "unknown"
1015 "Failure!");
1016
1017 // Creates the TestResult objects.
1018 r0 = new TestResult();
1019 r1 = new TestResult();
1020 r2 = new TestResult();
1021
1022 // In order to test TestResult, we need to modify its internal
1023 // state, in particular the TestPartResult list it holds.
1024 // test_part_results() returns a const reference to this list.
1025 // We cast it to a non-const object s.t. it can be modified (yes,
1026 // this is a hack).
1027 TPRList * list1, * list2;
1028 list1 = const_cast<List<TestPartResult> *>(
1029 & r1->test_part_results());
1030 list2 = const_cast<List<TestPartResult> *>(
1031 & r2->test_part_results());
1032
1033 // r0 is an empty TestResult.
1034
1035 // r1 contains a single SUCCESS TestPartResult.
1036 list1->PushBack(*pr1);
1037
1038 // r2 contains a SUCCESS, and a FAILURE.
1039 list2->PushBack(*pr1);
1040 list2->PushBack(*pr2);
1041 }
1042
TearDown()1043 virtual void TearDown() {
1044 delete pr1;
1045 delete pr2;
1046
1047 delete r0;
1048 delete r1;
1049 delete r2;
1050 }
1051 };
1052
1053 // Tests TestResult::test_part_results()
TEST_F(TestResultTest,test_part_results)1054 TEST_F(TestResultTest, test_part_results) {
1055 ASSERT_EQ(0u, r0->test_part_results().size());
1056 ASSERT_EQ(1u, r1->test_part_results().size());
1057 ASSERT_EQ(2u, r2->test_part_results().size());
1058 }
1059
1060 // Tests TestResult::successful_part_count()
TEST_F(TestResultTest,successful_part_count)1061 TEST_F(TestResultTest, successful_part_count) {
1062 ASSERT_EQ(0u, r0->successful_part_count());
1063 ASSERT_EQ(1u, r1->successful_part_count());
1064 ASSERT_EQ(1u, r2->successful_part_count());
1065 }
1066
1067 // Tests TestResult::failed_part_count()
TEST_F(TestResultTest,failed_part_count)1068 TEST_F(TestResultTest, failed_part_count) {
1069 ASSERT_EQ(0u, r0->failed_part_count());
1070 ASSERT_EQ(0u, r1->failed_part_count());
1071 ASSERT_EQ(1u, r2->failed_part_count());
1072 }
1073
1074 // Tests testing::internal::GetFailedPartCount().
TEST_F(TestResultTest,GetFailedPartCount)1075 TEST_F(TestResultTest, GetFailedPartCount) {
1076 ASSERT_EQ(0u, GetFailedPartCount(r0));
1077 ASSERT_EQ(0u, GetFailedPartCount(r1));
1078 ASSERT_EQ(1u, GetFailedPartCount(r2));
1079 }
1080
1081 // Tests TestResult::total_part_count()
TEST_F(TestResultTest,total_part_count)1082 TEST_F(TestResultTest, total_part_count) {
1083 ASSERT_EQ(0u, r0->total_part_count());
1084 ASSERT_EQ(1u, r1->total_part_count());
1085 ASSERT_EQ(2u, r2->total_part_count());
1086 }
1087
1088 // Tests TestResult::Passed()
TEST_F(TestResultTest,Passed)1089 TEST_F(TestResultTest, Passed) {
1090 ASSERT_TRUE(r0->Passed());
1091 ASSERT_TRUE(r1->Passed());
1092 ASSERT_FALSE(r2->Passed());
1093 }
1094
1095 // Tests TestResult::Failed()
TEST_F(TestResultTest,Failed)1096 TEST_F(TestResultTest, Failed) {
1097 ASSERT_FALSE(r0->Failed());
1098 ASSERT_FALSE(r1->Failed());
1099 ASSERT_TRUE(r2->Failed());
1100 }
1101
1102 // Tests TestResult::test_properties() has no properties when none are added.
TEST(TestResultPropertyTest,NoPropertiesFoundWhenNoneAreAdded)1103 TEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) {
1104 TestResult test_result;
1105 ASSERT_EQ(0u, test_result.test_properties().size());
1106 }
1107
1108 // Tests TestResult::test_properties() has the expected property when added.
TEST(TestResultPropertyTest,OnePropertyFoundWhenAdded)1109 TEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) {
1110 TestResult test_result;
1111 TestProperty property("key_1", "1");
1112 test_result.RecordProperty(property);
1113 const List<TestProperty>& properties = test_result.test_properties();
1114 ASSERT_EQ(1u, properties.size());
1115 TestProperty actual_property = properties.Head()->element();
1116 EXPECT_STREQ("key_1", actual_property.key());
1117 EXPECT_STREQ("1", actual_property.value());
1118 }
1119
1120 // Tests TestResult::test_properties() has multiple properties when added.
TEST(TestResultPropertyTest,MultiplePropertiesFoundWhenAdded)1121 TEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) {
1122 TestResult test_result;
1123 TestProperty property_1("key_1", "1");
1124 TestProperty property_2("key_2", "2");
1125 test_result.RecordProperty(property_1);
1126 test_result.RecordProperty(property_2);
1127 const List<TestProperty>& properties = test_result.test_properties();
1128 ASSERT_EQ(2u, properties.size());
1129 TestProperty actual_property_1 = properties.Head()->element();
1130 EXPECT_STREQ("key_1", actual_property_1.key());
1131 EXPECT_STREQ("1", actual_property_1.value());
1132
1133 TestProperty actual_property_2 = properties.Last()->element();
1134 EXPECT_STREQ("key_2", actual_property_2.key());
1135 EXPECT_STREQ("2", actual_property_2.value());
1136 }
1137
1138 // Tests TestResult::test_properties() overrides values for duplicate keys.
TEST(TestResultPropertyTest,OverridesValuesForDuplicateKeys)1139 TEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) {
1140 TestResult test_result;
1141 TestProperty property_1_1("key_1", "1");
1142 TestProperty property_2_1("key_2", "2");
1143 TestProperty property_1_2("key_1", "12");
1144 TestProperty property_2_2("key_2", "22");
1145 test_result.RecordProperty(property_1_1);
1146 test_result.RecordProperty(property_2_1);
1147 test_result.RecordProperty(property_1_2);
1148 test_result.RecordProperty(property_2_2);
1149
1150 const List<TestProperty>& properties = test_result.test_properties();
1151 ASSERT_EQ(2u, properties.size());
1152 TestProperty actual_property_1 = properties.Head()->element();
1153 EXPECT_STREQ("key_1", actual_property_1.key());
1154 EXPECT_STREQ("12", actual_property_1.value());
1155
1156 TestProperty actual_property_2 = properties.Last()->element();
1157 EXPECT_STREQ("key_2", actual_property_2.key());
1158 EXPECT_STREQ("22", actual_property_2.value());
1159 }
1160
1161 // When a property using a reserved key is supplied to this function, it tests
1162 // that a non-fatal failure is added, a fatal failure is not added, and that the
1163 // property is not recorded.
ExpectNonFatalFailureRecordingPropertyWithReservedKey(const char * key)1164 void ExpectNonFatalFailureRecordingPropertyWithReservedKey(const char* key) {
1165 TestResult test_result;
1166 TestProperty property(key, "1");
1167 EXPECT_NONFATAL_FAILURE(test_result.RecordProperty(property), "Reserved key");
1168 ASSERT_TRUE(test_result.test_properties().IsEmpty()) << "Not recorded";
1169 }
1170
1171 // Attempting to recording a property with the Reserved literal "name"
1172 // should add a non-fatal failure and the property should not be recorded.
TEST(TestResultPropertyTest,AddFailureWhenUsingReservedKeyCalledName)1173 TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledName) {
1174 ExpectNonFatalFailureRecordingPropertyWithReservedKey("name");
1175 }
1176
1177 // Attempting to recording a property with the Reserved literal "status"
1178 // should add a non-fatal failure and the property should not be recorded.
TEST(TestResultPropertyTest,AddFailureWhenUsingReservedKeyCalledStatus)1179 TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledStatus) {
1180 ExpectNonFatalFailureRecordingPropertyWithReservedKey("status");
1181 }
1182
1183 // Attempting to recording a property with the Reserved literal "time"
1184 // should add a non-fatal failure and the property should not be recorded.
TEST(TestResultPropertyTest,AddFailureWhenUsingReservedKeyCalledTime)1185 TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledTime) {
1186 ExpectNonFatalFailureRecordingPropertyWithReservedKey("time");
1187 }
1188
1189 // Attempting to recording a property with the Reserved literal "classname"
1190 // should add a non-fatal failure and the property should not be recorded.
TEST(TestResultPropertyTest,AddFailureWhenUsingReservedKeyCalledClassname)1191 TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledClassname) {
1192 ExpectNonFatalFailureRecordingPropertyWithReservedKey("classname");
1193 }
1194
1195 // Tests that GTestFlagSaver works on Windows and Mac.
1196
1197 class GTestFlagSaverTest : public Test {
1198 protected:
1199 // Saves the Google Test flags such that we can restore them later, and
1200 // then sets them to their default values. This will be called
1201 // before the first test in this test case is run.
SetUpTestCase()1202 static void SetUpTestCase() {
1203 saver_ = new GTestFlagSaver;
1204
1205 GTEST_FLAG(also_run_disabled_tests) = false;
1206 GTEST_FLAG(break_on_failure) = false;
1207 GTEST_FLAG(catch_exceptions) = false;
1208 GTEST_FLAG(death_test_use_fork) = false;
1209 GTEST_FLAG(color) = "auto";
1210 GTEST_FLAG(filter) = "";
1211 GTEST_FLAG(list_tests) = false;
1212 GTEST_FLAG(output) = "";
1213 GTEST_FLAG(print_time) = false;
1214 GTEST_FLAG(repeat) = 1;
1215 GTEST_FLAG(throw_on_failure) = false;
1216 }
1217
1218 // Restores the Google Test flags that the tests have modified. This will
1219 // be called after the last test in this test case is run.
TearDownTestCase()1220 static void TearDownTestCase() {
1221 delete saver_;
1222 saver_ = NULL;
1223 }
1224
1225 // Verifies that the Google Test flags have their default values, and then
1226 // modifies each of them.
VerifyAndModifyFlags()1227 void VerifyAndModifyFlags() {
1228 EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests));
1229 EXPECT_FALSE(GTEST_FLAG(break_on_failure));
1230 EXPECT_FALSE(GTEST_FLAG(catch_exceptions));
1231 EXPECT_STREQ("auto", GTEST_FLAG(color).c_str());
1232 EXPECT_FALSE(GTEST_FLAG(death_test_use_fork));
1233 EXPECT_STREQ("", GTEST_FLAG(filter).c_str());
1234 EXPECT_FALSE(GTEST_FLAG(list_tests));
1235 EXPECT_STREQ("", GTEST_FLAG(output).c_str());
1236 EXPECT_FALSE(GTEST_FLAG(print_time));
1237 EXPECT_EQ(1, GTEST_FLAG(repeat));
1238 EXPECT_FALSE(GTEST_FLAG(throw_on_failure));
1239
1240 GTEST_FLAG(also_run_disabled_tests) = true;
1241 GTEST_FLAG(break_on_failure) = true;
1242 GTEST_FLAG(catch_exceptions) = true;
1243 GTEST_FLAG(color) = "no";
1244 GTEST_FLAG(death_test_use_fork) = true;
1245 GTEST_FLAG(filter) = "abc";
1246 GTEST_FLAG(list_tests) = true;
1247 GTEST_FLAG(output) = "xml:foo.xml";
1248 GTEST_FLAG(print_time) = true;
1249 GTEST_FLAG(repeat) = 100;
1250 GTEST_FLAG(throw_on_failure) = true;
1251 }
1252 private:
1253 // For saving Google Test flags during this test case.
1254 static GTestFlagSaver* saver_;
1255 };
1256
1257 GTestFlagSaver* GTestFlagSaverTest::saver_ = NULL;
1258
1259 // Google Test doesn't guarantee the order of tests. The following two
1260 // tests are designed to work regardless of their order.
1261
1262 // Modifies the Google Test flags in the test body.
TEST_F(GTestFlagSaverTest,ModifyGTestFlags)1263 TEST_F(GTestFlagSaverTest, ModifyGTestFlags) {
1264 VerifyAndModifyFlags();
1265 }
1266
1267 // Verifies that the Google Test flags in the body of the previous test were
1268 // restored to their original values.
TEST_F(GTestFlagSaverTest,VerifyGTestFlags)1269 TEST_F(GTestFlagSaverTest, VerifyGTestFlags) {
1270 VerifyAndModifyFlags();
1271 }
1272
1273 // Sets an environment variable with the given name to the given
1274 // value. If the value argument is "", unsets the environment
1275 // variable. The caller must ensure that both arguments are not NULL.
SetEnv(const char * name,const char * value)1276 static void SetEnv(const char* name, const char* value) {
1277 #ifdef _WIN32_WCE
1278 // Environment variables are not supported on Windows CE.
1279 return;
1280 #elif GTEST_OS_WINDOWS // If we are on Windows proper.
1281 _putenv((Message() << name << "=" << value).GetString().c_str());
1282 #else
1283 if (*value == '\0') {
1284 unsetenv(name);
1285 } else {
1286 setenv(name, value, 1);
1287 }
1288 #endif
1289 }
1290
1291 #ifndef _WIN32_WCE
1292 // Environment variables are not supported on Windows CE.
1293
1294 using testing::internal::Int32FromGTestEnv;
1295
1296 // Tests Int32FromGTestEnv().
1297
1298 // Tests that Int32FromGTestEnv() returns the default value when the
1299 // environment variable is not set.
TEST(Int32FromGTestEnvTest,ReturnsDefaultWhenVariableIsNotSet)1300 TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) {
1301 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "");
1302 EXPECT_EQ(10, Int32FromGTestEnv("temp", 10));
1303 }
1304
1305 // Tests that Int32FromGTestEnv() returns the default value when the
1306 // environment variable overflows as an Int32.
TEST(Int32FromGTestEnvTest,ReturnsDefaultWhenValueOverflows)1307 TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) {
1308 printf("(expecting 2 warnings)\n");
1309
1310 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321");
1311 EXPECT_EQ(20, Int32FromGTestEnv("temp", 20));
1312
1313 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321");
1314 EXPECT_EQ(30, Int32FromGTestEnv("temp", 30));
1315 }
1316
1317 // Tests that Int32FromGTestEnv() returns the default value when the
1318 // environment variable does not represent a valid decimal integer.
TEST(Int32FromGTestEnvTest,ReturnsDefaultWhenValueIsInvalid)1319 TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) {
1320 printf("(expecting 2 warnings)\n");
1321
1322 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1");
1323 EXPECT_EQ(40, Int32FromGTestEnv("temp", 40));
1324
1325 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X");
1326 EXPECT_EQ(50, Int32FromGTestEnv("temp", 50));
1327 }
1328
1329 // Tests that Int32FromGTestEnv() parses and returns the value of the
1330 // environment variable when it represents a valid decimal integer in
1331 // the range of an Int32.
TEST(Int32FromGTestEnvTest,ParsesAndReturnsValidValue)1332 TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) {
1333 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123");
1334 EXPECT_EQ(123, Int32FromGTestEnv("temp", 0));
1335
1336 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321");
1337 EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0));
1338 }
1339 #endif // !defined(_WIN32_WCE)
1340
1341 // Tests ParseInt32Flag().
1342
1343 // Tests that ParseInt32Flag() returns false and doesn't change the
1344 // output value when the flag has wrong format
TEST(ParseInt32FlagTest,ReturnsFalseForInvalidFlag)1345 TEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) {
1346 Int32 value = 123;
1347 EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value));
1348 EXPECT_EQ(123, value);
1349
1350 EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value));
1351 EXPECT_EQ(123, value);
1352 }
1353
1354 // Tests that ParseInt32Flag() returns false and doesn't change the
1355 // output value when the flag overflows as an Int32.
TEST(ParseInt32FlagTest,ReturnsDefaultWhenValueOverflows)1356 TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) {
1357 printf("(expecting 2 warnings)\n");
1358
1359 Int32 value = 123;
1360 EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value));
1361 EXPECT_EQ(123, value);
1362
1363 EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value));
1364 EXPECT_EQ(123, value);
1365 }
1366
1367 // Tests that ParseInt32Flag() returns false and doesn't change the
1368 // output value when the flag does not represent a valid decimal
1369 // integer.
TEST(ParseInt32FlagTest,ReturnsDefaultWhenValueIsInvalid)1370 TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) {
1371 printf("(expecting 2 warnings)\n");
1372
1373 Int32 value = 123;
1374 EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value));
1375 EXPECT_EQ(123, value);
1376
1377 EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value));
1378 EXPECT_EQ(123, value);
1379 }
1380
1381 // Tests that ParseInt32Flag() parses the value of the flag and
1382 // returns true when the flag represents a valid decimal integer in
1383 // the range of an Int32.
TEST(ParseInt32FlagTest,ParsesAndReturnsValidValue)1384 TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) {
1385 Int32 value = 123;
1386 EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value));
1387 EXPECT_EQ(456, value);
1388
1389 EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789", "abc", &value));
1390 EXPECT_EQ(-789, value);
1391 }
1392
1393 // Tests that Int32FromEnvOrDie() parses the value of the var or
1394 // returns the correct default.
TEST(Int32FromEnvOrDieTest,ParsesAndReturnsValidValue)1395 TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {
1396 EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
1397 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123");
1398 EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
1399 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123");
1400 EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
1401 }
1402
1403 #if GTEST_HAS_DEATH_TEST
1404
1405 // Tests that Int32FromEnvOrDie() aborts with an error message
1406 // if the variable is not an Int32.
TEST(Int32FromEnvOrDieDeathTest,AbortsOnFailure)1407 TEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) {
1408 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx");
1409 EXPECT_DEATH({Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123);},
1410 ".*");
1411 }
1412
1413 // Tests that Int32FromEnvOrDie() aborts with an error message
1414 // if the variable cannot be represnted by an Int32.
TEST(Int32FromEnvOrDieDeathTest,AbortsOnInt32Overflow)1415 TEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) {
1416 SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234");
1417 EXPECT_DEATH({Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123);},
1418 ".*");
1419 }
1420
1421 #endif // GTEST_HAS_DEATH_TEST
1422
1423
1424 // Tests that ShouldRunTestOnShard() selects all tests
1425 // where there is 1 shard.
TEST(ShouldRunTestOnShardTest,IsPartitionWhenThereIsOneShard)1426 TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) {
1427 EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0));
1428 EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1));
1429 EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2));
1430 EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3));
1431 EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4));
1432 }
1433
1434 class ShouldShardTest : public testing::Test {
1435 protected:
SetUp()1436 virtual void SetUp() {
1437 index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX";
1438 total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL";
1439 }
1440
TearDown()1441 virtual void TearDown() {
1442 SetEnv(index_var_, "");
1443 SetEnv(total_var_, "");
1444 }
1445
1446 const char* index_var_;
1447 const char* total_var_;
1448 };
1449
1450 // Tests that sharding is disabled if neither of the environment variables
1451 // are set.
TEST_F(ShouldShardTest,ReturnsFalseWhenNeitherEnvVarIsSet)1452 TEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) {
1453 SetEnv(index_var_, "");
1454 SetEnv(total_var_, "");
1455
1456 EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
1457 EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
1458 }
1459
1460 // Tests that sharding is not enabled if total_shards == 1.
TEST_F(ShouldShardTest,ReturnsFalseWhenTotalShardIsOne)1461 TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) {
1462 SetEnv(index_var_, "0");
1463 SetEnv(total_var_, "1");
1464 EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
1465 EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
1466 }
1467
1468 // Tests that sharding is enabled if total_shards > 1 and
1469 // we are not in a death test subprocess.
TEST_F(ShouldShardTest,WorksWhenShardEnvVarsAreValid)1470 TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {
1471 SetEnv(index_var_, "4");
1472 SetEnv(total_var_, "22");
1473 EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
1474 EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
1475
1476 SetEnv(index_var_, "8");
1477 SetEnv(total_var_, "9");
1478 EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
1479 EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
1480
1481 SetEnv(index_var_, "0");
1482 SetEnv(total_var_, "9");
1483 EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
1484 EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
1485 }
1486
1487 #if GTEST_HAS_DEATH_TEST
1488
1489 // Tests that we exit in error if the sharding values are not valid.
TEST_F(ShouldShardTest,AbortsWhenShardingEnvVarsAreInvalid)1490 TEST_F(ShouldShardTest, AbortsWhenShardingEnvVarsAreInvalid) {
1491 SetEnv(index_var_, "4");
1492 SetEnv(total_var_, "4");
1493 EXPECT_DEATH({ShouldShard(total_var_, index_var_, false);},
1494 ".*");
1495
1496 SetEnv(index_var_, "4");
1497 SetEnv(total_var_, "-2");
1498 EXPECT_DEATH({ShouldShard(total_var_, index_var_, false);},
1499 ".*");
1500
1501 SetEnv(index_var_, "5");
1502 SetEnv(total_var_, "");
1503 EXPECT_DEATH({ShouldShard(total_var_, index_var_, false);},
1504 ".*");
1505
1506 SetEnv(index_var_, "");
1507 SetEnv(total_var_, "5");
1508 EXPECT_DEATH({ShouldShard(total_var_, index_var_, false);},
1509 ".*");
1510 }
1511
1512 #endif // GTEST_HAS_DEATH_TEST
1513
1514 // Tests that ShouldRunTestOnShard is a partition when 5
1515 // shards are used.
TEST(ShouldRunTestOnShardTest,IsPartitionWhenThereAreFiveShards)1516 TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) {
1517 // Choose an arbitrary number of tests and shards.
1518 const int num_tests = 17;
1519 const int num_shards = 5;
1520
1521 // Check partitioning: each test should be on exactly 1 shard.
1522 for (int test_id = 0; test_id < num_tests; test_id++) {
1523 int prev_selected_shard_index = -1;
1524 for (int shard_index = 0; shard_index < num_shards; shard_index++) {
1525 if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) {
1526 if (prev_selected_shard_index < 0) {
1527 prev_selected_shard_index = shard_index;
1528 } else {
1529 ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and "
1530 << shard_index << " are both selected to run test " << test_id;
1531 }
1532 }
1533 }
1534 }
1535
1536 // Check balance: This is not required by the sharding protocol, but is a
1537 // desirable property for performance.
1538 for (int shard_index = 0; shard_index < num_shards; shard_index++) {
1539 int num_tests_on_shard = 0;
1540 for (int test_id = 0; test_id < num_tests; test_id++) {
1541 num_tests_on_shard +=
1542 ShouldRunTestOnShard(num_shards, shard_index, test_id);
1543 }
1544 EXPECT_GE(num_tests_on_shard, num_tests / num_shards);
1545 }
1546 }
1547
1548 // For the same reason we are not explicitly testing everything in the
1549 // Test class, there are no separate tests for the following classes
1550 // (except for some trivial cases):
1551 //
1552 // TestCase, UnitTest, UnitTestResultPrinter.
1553 //
1554 // Similarly, there are no separate tests for the following macros:
1555 //
1556 // TEST, TEST_F, RUN_ALL_TESTS
1557
TEST(UnitTestTest,CanGetOriginalWorkingDir)1558 TEST(UnitTestTest, CanGetOriginalWorkingDir) {
1559 ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL);
1560 EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), "");
1561 }
1562
1563 // This group of tests is for predicate assertions (ASSERT_PRED*, etc)
1564 // of various arities. They do not attempt to be exhaustive. Rather,
1565 // view them as smoke tests that can be easily reviewed and verified.
1566 // A more complete set of tests for predicate assertions can be found
1567 // in gtest_pred_impl_unittest.cc.
1568
1569 // First, some predicates and predicate-formatters needed by the tests.
1570
1571 // Returns true iff the argument is an even number.
IsEven(int n)1572 bool IsEven(int n) {
1573 return (n % 2) == 0;
1574 }
1575
1576 // A functor that returns true iff the argument is an even number.
1577 struct IsEvenFunctor {
operator ()__anon56bc081a0111::IsEvenFunctor1578 bool operator()(int n) { return IsEven(n); }
1579 };
1580
1581 // A predicate-formatter function that asserts the argument is an even
1582 // number.
AssertIsEven(const char * expr,int n)1583 AssertionResult AssertIsEven(const char* expr, int n) {
1584 if (IsEven(n)) {
1585 return AssertionSuccess();
1586 }
1587
1588 Message msg;
1589 msg << expr << " evaluates to " << n << ", which is not even.";
1590 return AssertionFailure(msg);
1591 }
1592
1593 // A predicate-formatter functor that asserts the argument is an even
1594 // number.
1595 struct AssertIsEvenFunctor {
operator ()__anon56bc081a0111::AssertIsEvenFunctor1596 AssertionResult operator()(const char* expr, int n) {
1597 return AssertIsEven(expr, n);
1598 }
1599 };
1600
1601 // Returns true iff the sum of the arguments is an even number.
SumIsEven2(int n1,int n2)1602 bool SumIsEven2(int n1, int n2) {
1603 return IsEven(n1 + n2);
1604 }
1605
1606 // A functor that returns true iff the sum of the arguments is an even
1607 // number.
1608 struct SumIsEven3Functor {
operator ()__anon56bc081a0111::SumIsEven3Functor1609 bool operator()(int n1, int n2, int n3) {
1610 return IsEven(n1 + n2 + n3);
1611 }
1612 };
1613
1614 // A predicate-formatter function that asserts the sum of the
1615 // 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)1616 AssertionResult AssertSumIsEven4(
1617 const char* e1, const char* e2, const char* e3, const char* e4,
1618 int n1, int n2, int n3, int n4) {
1619 const int sum = n1 + n2 + n3 + n4;
1620 if (IsEven(sum)) {
1621 return AssertionSuccess();
1622 }
1623
1624 Message msg;
1625 msg << e1 << " + " << e2 << " + " << e3 << " + " << e4
1626 << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4
1627 << ") evaluates to " << sum << ", which is not even.";
1628 return AssertionFailure(msg);
1629 }
1630
1631 // A predicate-formatter functor that asserts the sum of the arguments
1632 // is an even number.
1633 struct AssertSumIsEven5Functor {
operator ()__anon56bc081a0111::AssertSumIsEven5Functor1634 AssertionResult operator()(
1635 const char* e1, const char* e2, const char* e3, const char* e4,
1636 const char* e5, int n1, int n2, int n3, int n4, int n5) {
1637 const int sum = n1 + n2 + n3 + n4 + n5;
1638 if (IsEven(sum)) {
1639 return AssertionSuccess();
1640 }
1641
1642 Message msg;
1643 msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
1644 << " ("
1645 << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5
1646 << ") evaluates to " << sum << ", which is not even.";
1647 return AssertionFailure(msg);
1648 }
1649 };
1650
1651
1652 // Tests unary predicate assertions.
1653
1654 // Tests unary predicate assertions that don't use a custom formatter.
TEST(Pred1Test,WithoutFormat)1655 TEST(Pred1Test, WithoutFormat) {
1656 // Success cases.
1657 EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!";
1658 ASSERT_PRED1(IsEven, 4);
1659
1660 // Failure cases.
1661 EXPECT_NONFATAL_FAILURE({ // NOLINT
1662 EXPECT_PRED1(IsEven, 5) << "This failure is expected.";
1663 }, "This failure is expected.");
1664 EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5),
1665 "evaluates to false");
1666 }
1667
1668 // Tests unary predicate assertions that use a custom formatter.
TEST(Pred1Test,WithFormat)1669 TEST(Pred1Test, WithFormat) {
1670 // Success cases.
1671 EXPECT_PRED_FORMAT1(AssertIsEven, 2);
1672 ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4)
1673 << "This failure is UNEXPECTED!";
1674
1675 // Failure cases.
1676 const int n = 5;
1677 EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n),
1678 "n evaluates to 5, which is not even.");
1679 EXPECT_FATAL_FAILURE({ // NOLINT
1680 ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected.";
1681 }, "This failure is expected.");
1682 }
1683
1684 // Tests that unary predicate assertions evaluates their arguments
1685 // exactly once.
TEST(Pred1Test,SingleEvaluationOnFailure)1686 TEST(Pred1Test, SingleEvaluationOnFailure) {
1687 // A success case.
1688 static int n = 0;
1689 EXPECT_PRED1(IsEven, n++);
1690 EXPECT_EQ(1, n) << "The argument is not evaluated exactly once.";
1691
1692 // A failure case.
1693 EXPECT_FATAL_FAILURE({ // NOLINT
1694 ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++)
1695 << "This failure is expected.";
1696 }, "This failure is expected.");
1697 EXPECT_EQ(2, n) << "The argument is not evaluated exactly once.";
1698 }
1699
1700
1701 // Tests predicate assertions whose arity is >= 2.
1702
1703 // Tests predicate assertions that don't use a custom formatter.
TEST(PredTest,WithoutFormat)1704 TEST(PredTest, WithoutFormat) {
1705 // Success cases.
1706 ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!";
1707 EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8);
1708
1709 // Failure cases.
1710 const int n1 = 1;
1711 const int n2 = 2;
1712 EXPECT_NONFATAL_FAILURE({ // NOLINT
1713 EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected.";
1714 }, "This failure is expected.");
1715 EXPECT_FATAL_FAILURE({ // NOLINT
1716 ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4);
1717 }, "evaluates to false");
1718 }
1719
1720 // Tests predicate assertions that use a custom formatter.
TEST(PredTest,WithFormat)1721 TEST(PredTest, WithFormat) {
1722 // Success cases.
1723 ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) <<
1724 "This failure is UNEXPECTED!";
1725 EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10);
1726
1727 // Failure cases.
1728 const int n1 = 1;
1729 const int n2 = 2;
1730 const int n3 = 4;
1731 const int n4 = 6;
1732 EXPECT_NONFATAL_FAILURE({ // NOLINT
1733 EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4);
1734 }, "evaluates to 13, which is not even.");
1735 EXPECT_FATAL_FAILURE({ // NOLINT
1736 ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8)
1737 << "This failure is expected.";
1738 }, "This failure is expected.");
1739 }
1740
1741 // Tests that predicate assertions evaluates their arguments
1742 // exactly once.
TEST(PredTest,SingleEvaluationOnFailure)1743 TEST(PredTest, SingleEvaluationOnFailure) {
1744 // A success case.
1745 int n1 = 0;
1746 int n2 = 0;
1747 EXPECT_PRED2(SumIsEven2, n1++, n2++);
1748 EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
1749 EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
1750
1751 // Another success case.
1752 n1 = n2 = 0;
1753 int n3 = 0;
1754 int n4 = 0;
1755 int n5 = 0;
1756 ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(),
1757 n1++, n2++, n3++, n4++, n5++)
1758 << "This failure is UNEXPECTED!";
1759 EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
1760 EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
1761 EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
1762 EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
1763 EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once.";
1764
1765 // A failure case.
1766 n1 = n2 = n3 = 0;
1767 EXPECT_NONFATAL_FAILURE({ // NOLINT
1768 EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++)
1769 << "This failure is expected.";
1770 }, "This failure is expected.");
1771 EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
1772 EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
1773 EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
1774
1775 // Another failure case.
1776 n1 = n2 = n3 = n4 = 0;
1777 EXPECT_NONFATAL_FAILURE({ // NOLINT
1778 EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++);
1779 }, "evaluates to 1, which is not even.");
1780 EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
1781 EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
1782 EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
1783 EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
1784 }
1785
1786
1787 // Some helper functions for testing using overloaded/template
1788 // functions with ASSERT_PREDn and EXPECT_PREDn.
1789
IsPositive(int n)1790 bool IsPositive(int n) {
1791 return n > 0;
1792 }
1793
IsPositive(double x)1794 bool IsPositive(double x) {
1795 return x > 0;
1796 }
1797
1798 template <typename T>
IsNegative(T x)1799 bool IsNegative(T x) {
1800 return x < 0;
1801 }
1802
1803 template <typename T1, typename T2>
GreaterThan(T1 x1,T2 x2)1804 bool GreaterThan(T1 x1, T2 x2) {
1805 return x1 > x2;
1806 }
1807
1808 // Tests that overloaded functions can be used in *_PRED* as long as
1809 // their types are explicitly specified.
TEST(PredicateAssertionTest,AcceptsOverloadedFunction)1810 TEST(PredicateAssertionTest, AcceptsOverloadedFunction) {
1811 EXPECT_PRED1(static_cast<bool (*)(int)>(IsPositive), 5); // NOLINT
1812 ASSERT_PRED1(static_cast<bool (*)(double)>(IsPositive), 6.0); // NOLINT
1813 }
1814
1815 // Tests that template functions can be used in *_PRED* as long as
1816 // their types are explicitly specified.
TEST(PredicateAssertionTest,AcceptsTemplateFunction)1817 TEST(PredicateAssertionTest, AcceptsTemplateFunction) {
1818 EXPECT_PRED1(IsNegative<int>, -5);
1819 // Makes sure that we can handle templates with more than one
1820 // parameter.
1821 ASSERT_PRED2((GreaterThan<int, int>), 5, 0);
1822 }
1823
1824
1825 // Some helper functions for testing using overloaded/template
1826 // functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn.
1827
IsPositiveFormat(const char *,int n)1828 AssertionResult IsPositiveFormat(const char* /* expr */, int n) {
1829 return n > 0 ? AssertionSuccess() :
1830 AssertionFailure(Message() << "Failure");
1831 }
1832
IsPositiveFormat(const char *,double x)1833 AssertionResult IsPositiveFormat(const char* /* expr */, double x) {
1834 return x > 0 ? AssertionSuccess() :
1835 AssertionFailure(Message() << "Failure");
1836 }
1837
1838 template <typename T>
IsNegativeFormat(const char *,T x)1839 AssertionResult IsNegativeFormat(const char* /* expr */, T x) {
1840 return x < 0 ? AssertionSuccess() :
1841 AssertionFailure(Message() << "Failure");
1842 }
1843
1844 template <typename T1, typename T2>
EqualsFormat(const char *,const char *,const T1 & x1,const T2 & x2)1845 AssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */,
1846 const T1& x1, const T2& x2) {
1847 return x1 == x2 ? AssertionSuccess() :
1848 AssertionFailure(Message() << "Failure");
1849 }
1850
1851 // Tests that overloaded functions can be used in *_PRED_FORMAT*
1852 // without explicitly specifying their types.
TEST(PredicateFormatAssertionTest,AcceptsOverloadedFunction)1853 TEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) {
1854 EXPECT_PRED_FORMAT1(IsPositiveFormat, 5);
1855 ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0);
1856 }
1857
1858 // Tests that template functions can be used in *_PRED_FORMAT* without
1859 // explicitly specifying their types.
TEST(PredicateFormatAssertionTest,AcceptsTemplateFunction)1860 TEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) {
1861 EXPECT_PRED_FORMAT1(IsNegativeFormat, -5);
1862 ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3);
1863 }
1864
1865
1866 // Tests string assertions.
1867
1868 // Tests ASSERT_STREQ with non-NULL arguments.
TEST(StringAssertionTest,ASSERT_STREQ)1869 TEST(StringAssertionTest, ASSERT_STREQ) {
1870 const char * const p1 = "good";
1871 ASSERT_STREQ(p1, p1);
1872
1873 // Let p2 have the same content as p1, but be at a different address.
1874 const char p2[] = "good";
1875 ASSERT_STREQ(p1, p2);
1876
1877 EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"),
1878 "Expected: \"bad\"");
1879 }
1880
1881 // Tests ASSERT_STREQ with NULL arguments.
TEST(StringAssertionTest,ASSERT_STREQ_Null)1882 TEST(StringAssertionTest, ASSERT_STREQ_Null) {
1883 ASSERT_STREQ(static_cast<const char *>(NULL), NULL);
1884 EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"),
1885 "non-null");
1886 }
1887
1888 // Tests ASSERT_STREQ with NULL arguments.
TEST(StringAssertionTest,ASSERT_STREQ_Null2)1889 TEST(StringAssertionTest, ASSERT_STREQ_Null2) {
1890 EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL),
1891 "non-null");
1892 }
1893
1894 // Tests ASSERT_STRNE.
TEST(StringAssertionTest,ASSERT_STRNE)1895 TEST(StringAssertionTest, ASSERT_STRNE) {
1896 ASSERT_STRNE("hi", "Hi");
1897 ASSERT_STRNE("Hi", NULL);
1898 ASSERT_STRNE(NULL, "Hi");
1899 ASSERT_STRNE("", NULL);
1900 ASSERT_STRNE(NULL, "");
1901 ASSERT_STRNE("", "Hi");
1902 ASSERT_STRNE("Hi", "");
1903 EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"),
1904 "\"Hi\" vs \"Hi\"");
1905 }
1906
1907 // Tests ASSERT_STRCASEEQ.
TEST(StringAssertionTest,ASSERT_STRCASEEQ)1908 TEST(StringAssertionTest, ASSERT_STRCASEEQ) {
1909 ASSERT_STRCASEEQ("hi", "Hi");
1910 ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL);
1911
1912 ASSERT_STRCASEEQ("", "");
1913 EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"),
1914 "(ignoring case)");
1915 }
1916
1917 // Tests ASSERT_STRCASENE.
TEST(StringAssertionTest,ASSERT_STRCASENE)1918 TEST(StringAssertionTest, ASSERT_STRCASENE) {
1919 ASSERT_STRCASENE("hi1", "Hi2");
1920 ASSERT_STRCASENE("Hi", NULL);
1921 ASSERT_STRCASENE(NULL, "Hi");
1922 ASSERT_STRCASENE("", NULL);
1923 ASSERT_STRCASENE(NULL, "");
1924 ASSERT_STRCASENE("", "Hi");
1925 ASSERT_STRCASENE("Hi", "");
1926 EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"),
1927 "(ignoring case)");
1928 }
1929
1930 #if GTEST_HAS_STD_WSTRING
1931 // Tests *_STREQ on wide strings.
TEST(StringAssertionTest,STREQ_Wide)1932 TEST(StringAssertionTest, STREQ_Wide) {
1933 // NULL strings.
1934 ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL);
1935
1936 // Empty strings.
1937 ASSERT_STREQ(L"", L"");
1938
1939 // Non-null vs NULL.
1940 EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL),
1941 "non-null");
1942
1943 // Equal strings.
1944 EXPECT_STREQ(L"Hi", L"Hi");
1945
1946 // Unequal strings.
1947 EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"),
1948 "Abc");
1949
1950 // Strings containing wide characters.
1951 EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"),
1952 "abc");
1953 }
1954 #endif // GTEST_HAS_STD_WSTRING
1955
1956 // Tests *_STRNE on wide strings.
TEST(StringAssertionTest,STRNE_Wide)1957 TEST(StringAssertionTest, STRNE_Wide) {
1958 // NULL strings.
1959 EXPECT_NONFATAL_FAILURE({ // NOLINT
1960 EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL);
1961 }, "");
1962
1963 // Empty strings.
1964 EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""),
1965 "L\"\"");
1966
1967 // Non-null vs NULL.
1968 ASSERT_STRNE(L"non-null", NULL);
1969
1970 // Equal strings.
1971 EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"),
1972 "L\"Hi\"");
1973
1974 // Unequal strings.
1975 EXPECT_STRNE(L"abc", L"Abc");
1976
1977 // Strings containing wide characters.
1978 EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"),
1979 "abc");
1980 }
1981
1982 // Tests for ::testing::IsSubstring().
1983
1984 // Tests that IsSubstring() returns the correct result when the input
1985 // argument type is const char*.
TEST(IsSubstringTest,ReturnsCorrectResultForCString)1986 TEST(IsSubstringTest, ReturnsCorrectResultForCString) {
1987 EXPECT_FALSE(IsSubstring("", "", NULL, "a"));
1988 EXPECT_FALSE(IsSubstring("", "", "b", NULL));
1989 EXPECT_FALSE(IsSubstring("", "", "needle", "haystack"));
1990
1991 EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL));
1992 EXPECT_TRUE(IsSubstring("", "", "needle", "two needles"));
1993 }
1994
1995 #if GTEST_HAS_STD_WSTRING
1996 // Tests that IsSubstring() returns the correct result when the input
1997 // argument type is const wchar_t*.
TEST(IsSubstringTest,ReturnsCorrectResultForWideCString)1998 TEST(IsSubstringTest, ReturnsCorrectResultForWideCString) {
1999 EXPECT_FALSE(IsSubstring("", "", NULL, L"a"));
2000 EXPECT_FALSE(IsSubstring("", "", L"b", NULL));
2001 EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack"));
2002
2003 EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL));
2004 EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles"));
2005 }
2006 #endif // GTEST_HAS_STD_WSTRING
2007
2008 // Tests that IsSubstring() generates the correct message when the input
2009 // argument type is const char*.
TEST(IsSubstringTest,GeneratesCorrectMessageForCString)2010 TEST(IsSubstringTest, GeneratesCorrectMessageForCString) {
2011 EXPECT_STREQ("Value of: needle_expr\n"
2012 " Actual: \"needle\"\n"
2013 "Expected: a substring of haystack_expr\n"
2014 "Which is: \"haystack\"",
2015 IsSubstring("needle_expr", "haystack_expr",
2016 "needle", "haystack").failure_message());
2017 }
2018
2019 #if GTEST_HAS_STD_STRING
2020
2021 // Tests that IsSubstring returns the correct result when the input
2022 // argument type is ::std::string.
TEST(IsSubstringTest,ReturnsCorrectResultsForStdString)2023 TEST(IsSubstringTest, ReturnsCorrectResultsForStdString) {
2024 EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob"));
2025 EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world")));
2026 }
2027
2028 #endif // GTEST_HAS_STD_STRING
2029
2030
2031 #if GTEST_HAS_STD_WSTRING
2032 // Tests that IsSubstring returns the correct result when the input
2033 // argument type is ::std::wstring.
TEST(IsSubstringTest,ReturnsCorrectResultForStdWstring)2034 TEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) {
2035 EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
2036 EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack")));
2037 }
2038
2039 // Tests that IsSubstring() generates the correct message when the input
2040 // argument type is ::std::wstring.
TEST(IsSubstringTest,GeneratesCorrectMessageForWstring)2041 TEST(IsSubstringTest, GeneratesCorrectMessageForWstring) {
2042 EXPECT_STREQ("Value of: needle_expr\n"
2043 " Actual: L\"needle\"\n"
2044 "Expected: a substring of haystack_expr\n"
2045 "Which is: L\"haystack\"",
2046 IsSubstring(
2047 "needle_expr", "haystack_expr",
2048 ::std::wstring(L"needle"), L"haystack").failure_message());
2049 }
2050
2051 #endif // GTEST_HAS_STD_WSTRING
2052
2053 // Tests for ::testing::IsNotSubstring().
2054
2055 // Tests that IsNotSubstring() returns the correct result when the input
2056 // argument type is const char*.
TEST(IsNotSubstringTest,ReturnsCorrectResultForCString)2057 TEST(IsNotSubstringTest, ReturnsCorrectResultForCString) {
2058 EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack"));
2059 EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles"));
2060 }
2061
2062 #if GTEST_HAS_STD_WSTRING
2063 // Tests that IsNotSubstring() returns the correct result when the input
2064 // argument type is const wchar_t*.
TEST(IsNotSubstringTest,ReturnsCorrectResultForWideCString)2065 TEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) {
2066 EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack"));
2067 EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles"));
2068 }
2069
2070 // Tests that IsNotSubstring() generates the correct message when the input
2071 // argument type is const wchar_t*.
TEST(IsNotSubstringTest,GeneratesCorrectMessageForWideCString)2072 TEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) {
2073 EXPECT_STREQ("Value of: needle_expr\n"
2074 " Actual: L\"needle\"\n"
2075 "Expected: not a substring of haystack_expr\n"
2076 "Which is: L\"two needles\"",
2077 IsNotSubstring(
2078 "needle_expr", "haystack_expr",
2079 L"needle", L"two needles").failure_message());
2080 }
2081 #endif // GTEST_HAS_STD_WSTRING
2082
2083 #if GTEST_HAS_STD_STRING
2084
2085 // Tests that IsNotSubstring returns the correct result when the input
2086 // argument type is ::std::string.
TEST(IsNotSubstringTest,ReturnsCorrectResultsForStdString)2087 TEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) {
2088 EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob"));
2089 EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world")));
2090 }
2091
2092 // Tests that IsNotSubstring() generates the correct message when the input
2093 // argument type is ::std::string.
TEST(IsNotSubstringTest,GeneratesCorrectMessageForStdString)2094 TEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) {
2095 EXPECT_STREQ("Value of: needle_expr\n"
2096 " Actual: \"needle\"\n"
2097 "Expected: not a substring of haystack_expr\n"
2098 "Which is: \"two needles\"",
2099 IsNotSubstring(
2100 "needle_expr", "haystack_expr",
2101 ::std::string("needle"), "two needles").failure_message());
2102 }
2103
2104 #endif // GTEST_HAS_STD_STRING
2105
2106 #if GTEST_HAS_STD_WSTRING
2107
2108 // Tests that IsNotSubstring returns the correct result when the input
2109 // argument type is ::std::wstring.
TEST(IsNotSubstringTest,ReturnsCorrectResultForStdWstring)2110 TEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) {
2111 EXPECT_FALSE(
2112 IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
2113 EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack")));
2114 }
2115
2116 #endif // GTEST_HAS_STD_WSTRING
2117
2118 // Tests floating-point assertions.
2119
2120 template <typename RawType>
2121 class FloatingPointTest : public Test {
2122 protected:
2123 typedef typename testing::internal::FloatingPoint<RawType> Floating;
2124 typedef typename Floating::Bits Bits;
2125
SetUp()2126 virtual void SetUp() {
2127 const size_t max_ulps = Floating::kMaxUlps;
2128
2129 // The bits that represent 0.0.
2130 const Bits zero_bits = Floating(0).bits();
2131
2132 // Makes some numbers close to 0.0.
2133 close_to_positive_zero_ = Floating::ReinterpretBits(zero_bits + max_ulps/2);
2134 close_to_negative_zero_ = -Floating::ReinterpretBits(
2135 zero_bits + max_ulps - max_ulps/2);
2136 further_from_negative_zero_ = -Floating::ReinterpretBits(
2137 zero_bits + max_ulps + 1 - max_ulps/2);
2138
2139 // The bits that represent 1.0.
2140 const Bits one_bits = Floating(1).bits();
2141
2142 // Makes some numbers close to 1.0.
2143 close_to_one_ = Floating::ReinterpretBits(one_bits + max_ulps);
2144 further_from_one_ = Floating::ReinterpretBits(one_bits + max_ulps + 1);
2145
2146 // +infinity.
2147 infinity_ = Floating::Infinity();
2148
2149 // The bits that represent +infinity.
2150 const Bits infinity_bits = Floating(infinity_).bits();
2151
2152 // Makes some numbers close to infinity.
2153 close_to_infinity_ = Floating::ReinterpretBits(infinity_bits - max_ulps);
2154 further_from_infinity_ = Floating::ReinterpretBits(
2155 infinity_bits - max_ulps - 1);
2156
2157 // Makes some NAN's.
2158 nan1_ = Floating::ReinterpretBits(Floating::kExponentBitMask | 1);
2159 nan2_ = Floating::ReinterpretBits(Floating::kExponentBitMask | 200);
2160 }
2161
TestSize()2162 void TestSize() {
2163 EXPECT_EQ(sizeof(RawType), sizeof(Bits));
2164 }
2165
2166 // Pre-calculated numbers to be used by the tests.
2167
2168 static RawType close_to_positive_zero_;
2169 static RawType close_to_negative_zero_;
2170 static RawType further_from_negative_zero_;
2171
2172 static RawType close_to_one_;
2173 static RawType further_from_one_;
2174
2175 static RawType infinity_;
2176 static RawType close_to_infinity_;
2177 static RawType further_from_infinity_;
2178
2179 static RawType nan1_;
2180 static RawType nan2_;
2181 };
2182
2183 template <typename RawType>
2184 RawType FloatingPointTest<RawType>::close_to_positive_zero_;
2185
2186 template <typename RawType>
2187 RawType FloatingPointTest<RawType>::close_to_negative_zero_;
2188
2189 template <typename RawType>
2190 RawType FloatingPointTest<RawType>::further_from_negative_zero_;
2191
2192 template <typename RawType>
2193 RawType FloatingPointTest<RawType>::close_to_one_;
2194
2195 template <typename RawType>
2196 RawType FloatingPointTest<RawType>::further_from_one_;
2197
2198 template <typename RawType>
2199 RawType FloatingPointTest<RawType>::infinity_;
2200
2201 template <typename RawType>
2202 RawType FloatingPointTest<RawType>::close_to_infinity_;
2203
2204 template <typename RawType>
2205 RawType FloatingPointTest<RawType>::further_from_infinity_;
2206
2207 template <typename RawType>
2208 RawType FloatingPointTest<RawType>::nan1_;
2209
2210 template <typename RawType>
2211 RawType FloatingPointTest<RawType>::nan2_;
2212
2213 // Instantiates FloatingPointTest for testing *_FLOAT_EQ.
2214 typedef FloatingPointTest<float> FloatTest;
2215
2216 // Tests that the size of Float::Bits matches the size of float.
TEST_F(FloatTest,Size)2217 TEST_F(FloatTest, Size) {
2218 TestSize();
2219 }
2220
2221 // Tests comparing with +0 and -0.
TEST_F(FloatTest,Zeros)2222 TEST_F(FloatTest, Zeros) {
2223 EXPECT_FLOAT_EQ(0.0, -0.0);
2224 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0),
2225 "1.0");
2226 EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5),
2227 "1.5");
2228 }
2229
2230 // Tests comparing numbers close to 0.
2231 //
2232 // This ensures that *_FLOAT_EQ handles the sign correctly and no
2233 // overflow occurs when comparing numbers whose absolute value is very
2234 // small.
TEST_F(FloatTest,AlmostZeros)2235 TEST_F(FloatTest, AlmostZeros) {
2236 EXPECT_FLOAT_EQ(0.0, close_to_positive_zero_);
2237 EXPECT_FLOAT_EQ(-0.0, close_to_negative_zero_);
2238 EXPECT_FLOAT_EQ(close_to_positive_zero_, close_to_negative_zero_);
2239
2240 EXPECT_FATAL_FAILURE({ // NOLINT
2241 ASSERT_FLOAT_EQ(close_to_positive_zero_, further_from_negative_zero_);
2242 }, "further_from_negative_zero_");
2243 }
2244
2245 // Tests comparing numbers close to each other.
TEST_F(FloatTest,SmallDiff)2246 TEST_F(FloatTest, SmallDiff) {
2247 EXPECT_FLOAT_EQ(1.0, close_to_one_);
2248 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, further_from_one_),
2249 "further_from_one_");
2250 }
2251
2252 // Tests comparing numbers far apart.
TEST_F(FloatTest,LargeDiff)2253 TEST_F(FloatTest, LargeDiff) {
2254 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0),
2255 "3.0");
2256 }
2257
2258 // Tests comparing with infinity.
2259 //
2260 // This ensures that no overflow occurs when comparing numbers whose
2261 // absolute value is very large.
TEST_F(FloatTest,Infinity)2262 TEST_F(FloatTest, Infinity) {
2263 EXPECT_FLOAT_EQ(infinity_, close_to_infinity_);
2264 EXPECT_FLOAT_EQ(-infinity_, -close_to_infinity_);
2265 #if !GTEST_OS_SYMBIAN
2266 // Nokia's STLport crashes if we try to output infinity or NaN.
2267 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(infinity_, -infinity_),
2268 "-infinity_");
2269
2270 // This is interesting as the representations of infinity_ and nan1_
2271 // are only 1 DLP apart.
2272 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(infinity_, nan1_),
2273 "nan1_");
2274 #endif // !GTEST_OS_SYMBIAN
2275 }
2276
2277 // Tests that comparing with NAN always returns false.
TEST_F(FloatTest,NaN)2278 TEST_F(FloatTest, NaN) {
2279 #if !GTEST_OS_SYMBIAN
2280 // Nokia's STLport crashes if we try to output infinity or NaN.
2281 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(nan1_, nan1_),
2282 "nan1_");
2283 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(nan1_, nan2_),
2284 "nan2_");
2285 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, nan1_),
2286 "nan1_");
2287
2288 EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(nan1_, infinity_),
2289 "infinity_");
2290 #endif // !GTEST_OS_SYMBIAN
2291 }
2292
2293 // Tests that *_FLOAT_EQ are reflexive.
TEST_F(FloatTest,Reflexive)2294 TEST_F(FloatTest, Reflexive) {
2295 EXPECT_FLOAT_EQ(0.0, 0.0);
2296 EXPECT_FLOAT_EQ(1.0, 1.0);
2297 ASSERT_FLOAT_EQ(infinity_, infinity_);
2298 }
2299
2300 // Tests that *_FLOAT_EQ are commutative.
TEST_F(FloatTest,Commutative)2301 TEST_F(FloatTest, Commutative) {
2302 // We already tested EXPECT_FLOAT_EQ(1.0, close_to_one_).
2303 EXPECT_FLOAT_EQ(close_to_one_, 1.0);
2304
2305 // We already tested EXPECT_FLOAT_EQ(1.0, further_from_one_).
2306 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(further_from_one_, 1.0),
2307 "1.0");
2308 }
2309
2310 // DISABLED see bug 2398288
2311 // Tests EXPECT_NEAR.
TEST_F(FloatTest,DISABLED_EXPECT_NEAR)2312 TEST_F(FloatTest, DISABLED_EXPECT_NEAR) {
2313 EXPECT_NEAR(-1.0f, -1.1f, 0.2f);
2314 EXPECT_NEAR(2.0f, 3.0f, 1.0f);
2315 EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.2f, 0.1f), // NOLINT
2316 "The difference between 1.0f and 1.2f is 0.2, "
2317 "which exceeds 0.1f");
2318 // To work around a bug in gcc 2.95.0, there is intentionally no
2319 // space after the first comma in the previous line.
2320 }
2321
2322 // DISABLED see bug 2398288
2323 // Tests ASSERT_NEAR.
TEST_F(FloatTest,DISABLED_ASSERT_NEAR)2324 TEST_F(FloatTest, DISABLED_ASSERT_NEAR) {
2325 ASSERT_NEAR(-1.0f, -1.1f, 0.2f);
2326 ASSERT_NEAR(2.0f, 3.0f, 1.0f);
2327 EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.2f, 0.1f), // NOLINT
2328 "The difference between 1.0f and 1.2f is 0.2, "
2329 "which exceeds 0.1f");
2330 // To work around a bug in gcc 2.95.0, there is intentionally no
2331 // space after the first comma in the previous line.
2332 }
2333
2334 // Tests the cases where FloatLE() should succeed.
TEST_F(FloatTest,FloatLESucceeds)2335 TEST_F(FloatTest, FloatLESucceeds) {
2336 EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f); // When val1 < val2,
2337 ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f); // val1 == val2,
2338
2339 // or when val1 is greater than, but almost equals to, val2.
2340 EXPECT_PRED_FORMAT2(FloatLE, close_to_positive_zero_, 0.0f);
2341 }
2342
2343 // Tests the cases where FloatLE() should fail.
TEST_F(FloatTest,FloatLEFails)2344 TEST_F(FloatTest, FloatLEFails) {
2345 // When val1 is greater than val2 by a large margin,
2346 EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f),
2347 "(2.0f) <= (1.0f)");
2348
2349 // or by a small yet non-negligible margin,
2350 EXPECT_NONFATAL_FAILURE({ // NOLINT
2351 EXPECT_PRED_FORMAT2(FloatLE, further_from_one_, 1.0f);
2352 }, "(further_from_one_) <= (1.0f)");
2353
2354 #if !GTEST_OS_SYMBIAN
2355 // Nokia's STLport crashes if we try to output infinity or NaN.
2356 // or when either val1 or val2 is NaN.
2357 EXPECT_NONFATAL_FAILURE({ // NOLINT
2358 EXPECT_PRED_FORMAT2(FloatLE, nan1_, infinity_);
2359 }, "(nan1_) <= (infinity_)");
2360 EXPECT_NONFATAL_FAILURE({ // NOLINT
2361 EXPECT_PRED_FORMAT2(FloatLE, -infinity_, nan1_);
2362 }, "(-infinity_) <= (nan1_)");
2363
2364 EXPECT_FATAL_FAILURE({ // NOLINT
2365 ASSERT_PRED_FORMAT2(FloatLE, nan1_, nan1_);
2366 }, "(nan1_) <= (nan1_)");
2367 #endif // !GTEST_OS_SYMBIAN
2368 }
2369
2370 // Instantiates FloatingPointTest for testing *_DOUBLE_EQ.
2371 typedef FloatingPointTest<double> DoubleTest;
2372
2373 // Tests that the size of Double::Bits matches the size of double.
TEST_F(DoubleTest,Size)2374 TEST_F(DoubleTest, Size) {
2375 TestSize();
2376 }
2377
2378 // Tests comparing with +0 and -0.
TEST_F(DoubleTest,Zeros)2379 TEST_F(DoubleTest, Zeros) {
2380 EXPECT_DOUBLE_EQ(0.0, -0.0);
2381 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0),
2382 "1.0");
2383 EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0),
2384 "1.0");
2385 }
2386
2387 // Tests comparing numbers close to 0.
2388 //
2389 // This ensures that *_DOUBLE_EQ handles the sign correctly and no
2390 // overflow occurs when comparing numbers whose absolute value is very
2391 // small.
TEST_F(DoubleTest,AlmostZeros)2392 TEST_F(DoubleTest, AlmostZeros) {
2393 EXPECT_DOUBLE_EQ(0.0, close_to_positive_zero_);
2394 EXPECT_DOUBLE_EQ(-0.0, close_to_negative_zero_);
2395 EXPECT_DOUBLE_EQ(close_to_positive_zero_, close_to_negative_zero_);
2396
2397 EXPECT_FATAL_FAILURE({ // NOLINT
2398 ASSERT_DOUBLE_EQ(close_to_positive_zero_, further_from_negative_zero_);
2399 }, "further_from_negative_zero_");
2400 }
2401
2402 // Tests comparing numbers close to each other.
TEST_F(DoubleTest,SmallDiff)2403 TEST_F(DoubleTest, SmallDiff) {
2404 EXPECT_DOUBLE_EQ(1.0, close_to_one_);
2405 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, further_from_one_),
2406 "further_from_one_");
2407 }
2408
2409 // Tests comparing numbers far apart.
TEST_F(DoubleTest,LargeDiff)2410 TEST_F(DoubleTest, LargeDiff) {
2411 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0),
2412 "3.0");
2413 }
2414
2415 // Tests comparing with infinity.
2416 //
2417 // This ensures that no overflow occurs when comparing numbers whose
2418 // absolute value is very large.
TEST_F(DoubleTest,Infinity)2419 TEST_F(DoubleTest, Infinity) {
2420 EXPECT_DOUBLE_EQ(infinity_, close_to_infinity_);
2421 EXPECT_DOUBLE_EQ(-infinity_, -close_to_infinity_);
2422 #if !GTEST_OS_SYMBIAN
2423 // Nokia's STLport crashes if we try to output infinity or NaN.
2424 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(infinity_, -infinity_),
2425 "-infinity_");
2426
2427 // This is interesting as the representations of infinity_ and nan1_
2428 // are only 1 DLP apart.
2429 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(infinity_, nan1_),
2430 "nan1_");
2431 #endif // !GTEST_OS_SYMBIAN
2432 }
2433
2434 // Tests that comparing with NAN always returns false.
TEST_F(DoubleTest,NaN)2435 TEST_F(DoubleTest, NaN) {
2436 #if !GTEST_OS_SYMBIAN
2437 // Nokia's STLport crashes if we try to output infinity or NaN.
2438 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(nan1_, nan1_),
2439 "nan1_");
2440 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(nan1_, nan2_), "nan2_");
2441 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, nan1_), "nan1_");
2442 EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(nan1_, infinity_), "infinity_");
2443 #endif // !GTEST_OS_SYMBIAN
2444 }
2445
2446 // Tests that *_DOUBLE_EQ are reflexive.
TEST_F(DoubleTest,Reflexive)2447 TEST_F(DoubleTest, Reflexive) {
2448 EXPECT_DOUBLE_EQ(0.0, 0.0);
2449 EXPECT_DOUBLE_EQ(1.0, 1.0);
2450 #if !GTEST_OS_SYMBIAN
2451 // Nokia's STLport crashes if we try to output infinity or NaN.
2452 ASSERT_DOUBLE_EQ(infinity_, infinity_);
2453 #endif // !GTEST_OS_SYMBIAN
2454 }
2455
2456 // Tests that *_DOUBLE_EQ are commutative.
TEST_F(DoubleTest,Commutative)2457 TEST_F(DoubleTest, Commutative) {
2458 // We already tested EXPECT_DOUBLE_EQ(1.0, close_to_one_).
2459 EXPECT_DOUBLE_EQ(close_to_one_, 1.0);
2460
2461 // We already tested EXPECT_DOUBLE_EQ(1.0, further_from_one_).
2462 EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(further_from_one_, 1.0), "1.0");
2463 }
2464
2465 // DISABLED see bug 2398288
2466 // Tests EXPECT_NEAR.
TEST_F(DoubleTest,DISABLED_EXPECT_NEAR)2467 TEST_F(DoubleTest, DISABLED_EXPECT_NEAR) {
2468 EXPECT_NEAR(-1.0, -1.1, 0.2);
2469 EXPECT_NEAR(2.0, 3.0, 1.0);
2470 EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.2, 0.1), // NOLINT
2471 "The difference between 1.0 and 1.2 is 0.2, "
2472 "which exceeds 0.1");
2473 // To work around a bug in gcc 2.95.0, there is intentionally no
2474 // space after the first comma in the previous statement.
2475 }
2476
2477 // DISABLED see bug 2398288
2478 // Tests ASSERT_NEAR.
TEST_F(DoubleTest,DISABLED_ASSERT_NEAR)2479 TEST_F(DoubleTest, DISABLED_ASSERT_NEAR) {
2480 ASSERT_NEAR(-1.0, -1.1, 0.2);
2481 ASSERT_NEAR(2.0, 3.0, 1.0);
2482 EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.2, 0.1), // NOLINT
2483 "The difference between 1.0 and 1.2 is 0.2, "
2484 "which exceeds 0.1");
2485 // To work around a bug in gcc 2.95.0, there is intentionally no
2486 // space after the first comma in the previous statement.
2487 }
2488
2489 // Tests the cases where DoubleLE() should succeed.
TEST_F(DoubleTest,DoubleLESucceeds)2490 TEST_F(DoubleTest, DoubleLESucceeds) {
2491 EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0); // When val1 < val2,
2492 ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0); // val1 == val2,
2493
2494 // or when val1 is greater than, but almost equals to, val2.
2495 EXPECT_PRED_FORMAT2(DoubleLE, close_to_positive_zero_, 0.0);
2496 }
2497
2498 // Tests the cases where DoubleLE() should fail.
TEST_F(DoubleTest,DoubleLEFails)2499 TEST_F(DoubleTest, DoubleLEFails) {
2500 // When val1 is greater than val2 by a large margin,
2501 EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0),
2502 "(2.0) <= (1.0)");
2503
2504 // or by a small yet non-negligible margin,
2505 EXPECT_NONFATAL_FAILURE({ // NOLINT
2506 EXPECT_PRED_FORMAT2(DoubleLE, further_from_one_, 1.0);
2507 }, "(further_from_one_) <= (1.0)");
2508
2509 #if !GTEST_OS_SYMBIAN
2510 // Nokia's STLport crashes if we try to output infinity or NaN.
2511 // or when either val1 or val2 is NaN.
2512 EXPECT_NONFATAL_FAILURE({ // NOLINT
2513 EXPECT_PRED_FORMAT2(DoubleLE, nan1_, infinity_);
2514 }, "(nan1_) <= (infinity_)");
2515 EXPECT_NONFATAL_FAILURE({ // NOLINT
2516 EXPECT_PRED_FORMAT2(DoubleLE, -infinity_, nan1_);
2517 }, " (-infinity_) <= (nan1_)");
2518 EXPECT_FATAL_FAILURE({ // NOLINT
2519 ASSERT_PRED_FORMAT2(DoubleLE, nan1_, nan1_);
2520 }, "(nan1_) <= (nan1_)");
2521 #endif // !GTEST_OS_SYMBIAN
2522 }
2523
2524
2525 // Verifies that a test or test case whose name starts with DISABLED_ is
2526 // not run.
2527
2528 // A test whose name starts with DISABLED_.
2529 // Should not run.
TEST(DisabledTest,DISABLED_TestShouldNotRun)2530 TEST(DisabledTest, DISABLED_TestShouldNotRun) {
2531 FAIL() << "Unexpected failure: Disabled test should not be run.";
2532 }
2533
2534 // A test whose name does not start with DISABLED_.
2535 // Should run.
TEST(DisabledTest,NotDISABLED_TestShouldRun)2536 TEST(DisabledTest, NotDISABLED_TestShouldRun) {
2537 EXPECT_EQ(1, 1);
2538 }
2539
2540 // A test case whose name starts with DISABLED_.
2541 // Should not run.
TEST(DISABLED_TestCase,TestShouldNotRun)2542 TEST(DISABLED_TestCase, TestShouldNotRun) {
2543 FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
2544 }
2545
2546 // A test case and test whose names start with DISABLED_.
2547 // Should not run.
TEST(DISABLED_TestCase,DISABLED_TestShouldNotRun)2548 TEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) {
2549 FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
2550 }
2551
2552 // Check that when all tests in a test case are disabled, SetupTestCase() and
2553 // TearDownTestCase() are not called.
2554 class DisabledTestsTest : public Test {
2555 protected:
SetUpTestCase()2556 static void SetUpTestCase() {
2557 FAIL() << "Unexpected failure: All tests disabled in test case. "
2558 "SetupTestCase() should not be called.";
2559 }
2560
TearDownTestCase()2561 static void TearDownTestCase() {
2562 FAIL() << "Unexpected failure: All tests disabled in test case. "
2563 "TearDownTestCase() should not be called.";
2564 }
2565 };
2566
TEST_F(DisabledTestsTest,DISABLED_TestShouldNotRun_1)2567 TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) {
2568 FAIL() << "Unexpected failure: Disabled test should not be run.";
2569 }
2570
TEST_F(DisabledTestsTest,DISABLED_TestShouldNotRun_2)2571 TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) {
2572 FAIL() << "Unexpected failure: Disabled test should not be run.";
2573 }
2574
2575 // Tests that disabled typed tests aren't run.
2576
2577 #if GTEST_HAS_TYPED_TEST
2578
2579 template <typename T>
2580 class TypedTest : public Test {
2581 };
2582
2583 typedef testing::Types<int, double> NumericTypes;
2584 TYPED_TEST_CASE(TypedTest, NumericTypes);
2585
TYPED_TEST(TypedTest,DISABLED_ShouldNotRun)2586 TYPED_TEST(TypedTest, DISABLED_ShouldNotRun) {
2587 FAIL() << "Unexpected failure: Disabled typed test should not run.";
2588 }
2589
2590 template <typename T>
2591 class DISABLED_TypedTest : public Test {
2592 };
2593
2594 TYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes);
2595
TYPED_TEST(DISABLED_TypedTest,ShouldNotRun)2596 TYPED_TEST(DISABLED_TypedTest, ShouldNotRun) {
2597 FAIL() << "Unexpected failure: Disabled typed test should not run.";
2598 }
2599
2600 #endif // GTEST_HAS_TYPED_TEST
2601
2602 // Tests that disabled type-parameterized tests aren't run.
2603
2604 #if GTEST_HAS_TYPED_TEST_P
2605
2606 template <typename T>
2607 class TypedTestP : public Test {
2608 };
2609
2610 TYPED_TEST_CASE_P(TypedTestP);
2611
TYPED_TEST_P(TypedTestP,DISABLED_ShouldNotRun)2612 TYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) {
2613 FAIL() << "Unexpected failure: "
2614 << "Disabled type-parameterized test should not run.";
2615 }
2616
2617 REGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun);
2618
2619 INSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes);
2620
2621 template <typename T>
2622 class DISABLED_TypedTestP : public Test {
2623 };
2624
2625 TYPED_TEST_CASE_P(DISABLED_TypedTestP);
2626
TYPED_TEST_P(DISABLED_TypedTestP,ShouldNotRun)2627 TYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) {
2628 FAIL() << "Unexpected failure: "
2629 << "Disabled type-parameterized test should not run.";
2630 }
2631
2632 REGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun);
2633
2634 INSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes);
2635
2636 #endif // GTEST_HAS_TYPED_TEST_P
2637
2638 // Tests that assertion macros evaluate their arguments exactly once.
2639
2640 class SingleEvaluationTest : public Test {
2641 protected:
SingleEvaluationTest()2642 SingleEvaluationTest() {
2643 p1_ = s1_;
2644 p2_ = s2_;
2645 a_ = 0;
2646 b_ = 0;
2647 }
2648
2649 // This helper function is needed by the FailedASSERT_STREQ test
2650 // below.
CompareAndIncrementCharPtrs()2651 static void CompareAndIncrementCharPtrs() {
2652 ASSERT_STREQ(p1_++, p2_++);
2653 }
2654
2655 // This helper function is needed by the FailedASSERT_NE test below.
CompareAndIncrementInts()2656 static void CompareAndIncrementInts() {
2657 ASSERT_NE(a_++, b_++);
2658 }
2659
2660 static const char* const s1_;
2661 static const char* const s2_;
2662 static const char* p1_;
2663 static const char* p2_;
2664
2665 static int a_;
2666 static int b_;
2667 };
2668
2669 const char* const SingleEvaluationTest::s1_ = "01234";
2670 const char* const SingleEvaluationTest::s2_ = "abcde";
2671 const char* SingleEvaluationTest::p1_;
2672 const char* SingleEvaluationTest::p2_;
2673 int SingleEvaluationTest::a_;
2674 int SingleEvaluationTest::b_;
2675
2676 // Tests that when ASSERT_STREQ fails, it evaluates its arguments
2677 // exactly once.
TEST_F(SingleEvaluationTest,FailedASSERT_STREQ)2678 TEST_F(SingleEvaluationTest, FailedASSERT_STREQ) {
2679 EXPECT_FATAL_FAILURE(CompareAndIncrementCharPtrs(),
2680 "p2_++");
2681 EXPECT_EQ(s1_ + 1, p1_);
2682 EXPECT_EQ(s2_ + 1, p2_);
2683 }
2684
2685 // Tests that string assertion arguments are evaluated exactly once.
TEST_F(SingleEvaluationTest,ASSERT_STR)2686 TEST_F(SingleEvaluationTest, ASSERT_STR) {
2687 // successful EXPECT_STRNE
2688 EXPECT_STRNE(p1_++, p2_++);
2689 EXPECT_EQ(s1_ + 1, p1_);
2690 EXPECT_EQ(s2_ + 1, p2_);
2691
2692 // failed EXPECT_STRCASEEQ
2693 EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++),
2694 "ignoring case");
2695 EXPECT_EQ(s1_ + 2, p1_);
2696 EXPECT_EQ(s2_ + 2, p2_);
2697 }
2698
2699 // Tests that when ASSERT_NE fails, it evaluates its arguments exactly
2700 // once.
TEST_F(SingleEvaluationTest,FailedASSERT_NE)2701 TEST_F(SingleEvaluationTest, FailedASSERT_NE) {
2702 EXPECT_FATAL_FAILURE(CompareAndIncrementInts(), "(a_++) != (b_++)");
2703 EXPECT_EQ(1, a_);
2704 EXPECT_EQ(1, b_);
2705 }
2706
2707 // Tests that assertion arguments are evaluated exactly once.
TEST_F(SingleEvaluationTest,OtherCases)2708 TEST_F(SingleEvaluationTest, OtherCases) {
2709 // successful EXPECT_TRUE
2710 EXPECT_TRUE(0 == a_++); // NOLINT
2711 EXPECT_EQ(1, a_);
2712
2713 // failed EXPECT_TRUE
2714 EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++");
2715 EXPECT_EQ(2, a_);
2716
2717 // successful EXPECT_GT
2718 EXPECT_GT(a_++, b_++);
2719 EXPECT_EQ(3, a_);
2720 EXPECT_EQ(1, b_);
2721
2722 // failed EXPECT_LT
2723 EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)");
2724 EXPECT_EQ(4, a_);
2725 EXPECT_EQ(2, b_);
2726
2727 // successful ASSERT_TRUE
2728 ASSERT_TRUE(0 < a_++); // NOLINT
2729 EXPECT_EQ(5, a_);
2730
2731 // successful ASSERT_GT
2732 ASSERT_GT(a_++, b_++);
2733 EXPECT_EQ(6, a_);
2734 EXPECT_EQ(3, b_);
2735 }
2736
2737 #if GTEST_HAS_EXCEPTIONS
2738
ThrowAnInteger()2739 void ThrowAnInteger() {
2740 throw 1;
2741 }
2742
2743 // Tests that assertion arguments are evaluated exactly once.
TEST_F(SingleEvaluationTest,ExceptionTests)2744 TEST_F(SingleEvaluationTest, ExceptionTests) {
2745 // successful EXPECT_THROW
2746 EXPECT_THROW({ // NOLINT
2747 a_++;
2748 ThrowAnInteger();
2749 }, int);
2750 EXPECT_EQ(1, a_);
2751
2752 // failed EXPECT_THROW, throws different
2753 EXPECT_NONFATAL_FAILURE(EXPECT_THROW({ // NOLINT
2754 a_++;
2755 ThrowAnInteger();
2756 }, bool), "throws a different type");
2757 EXPECT_EQ(2, a_);
2758
2759 // failed EXPECT_THROW, throws nothing
2760 EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing");
2761 EXPECT_EQ(3, a_);
2762
2763 // successful EXPECT_NO_THROW
2764 EXPECT_NO_THROW(a_++);
2765 EXPECT_EQ(4, a_);
2766
2767 // failed EXPECT_NO_THROW
2768 EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({ // NOLINT
2769 a_++;
2770 ThrowAnInteger();
2771 }), "it throws");
2772 EXPECT_EQ(5, a_);
2773
2774 // successful EXPECT_ANY_THROW
2775 EXPECT_ANY_THROW({ // NOLINT
2776 a_++;
2777 ThrowAnInteger();
2778 });
2779 EXPECT_EQ(6, a_);
2780
2781 // failed EXPECT_ANY_THROW
2782 EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't");
2783 EXPECT_EQ(7, a_);
2784 }
2785
2786 #endif // GTEST_HAS_EXCEPTIONS
2787
2788 // Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE.
2789 class NoFatalFailureTest : public Test {
2790 protected:
Succeeds()2791 void Succeeds() {}
FailsNonFatal()2792 void FailsNonFatal() {
2793 ADD_FAILURE() << "some non-fatal failure";
2794 }
Fails()2795 void Fails() {
2796 FAIL() << "some fatal failure";
2797 }
2798
DoAssertNoFatalFailureOnFails()2799 void DoAssertNoFatalFailureOnFails() {
2800 ASSERT_NO_FATAL_FAILURE(Fails());
2801 ADD_FAILURE() << "shold not reach here.";
2802 }
2803
DoExpectNoFatalFailureOnFails()2804 void DoExpectNoFatalFailureOnFails() {
2805 EXPECT_NO_FATAL_FAILURE(Fails());
2806 ADD_FAILURE() << "other failure";
2807 }
2808 };
2809
TEST_F(NoFatalFailureTest,NoFailure)2810 TEST_F(NoFatalFailureTest, NoFailure) {
2811 EXPECT_NO_FATAL_FAILURE(Succeeds());
2812 ASSERT_NO_FATAL_FAILURE(Succeeds());
2813 }
2814
TEST_F(NoFatalFailureTest,NonFatalIsNoFailure)2815 TEST_F(NoFatalFailureTest, NonFatalIsNoFailure) {
2816 EXPECT_NONFATAL_FAILURE(
2817 EXPECT_NO_FATAL_FAILURE(FailsNonFatal()),
2818 "some non-fatal failure");
2819 EXPECT_NONFATAL_FAILURE(
2820 ASSERT_NO_FATAL_FAILURE(FailsNonFatal()),
2821 "some non-fatal failure");
2822 }
2823
TEST_F(NoFatalFailureTest,AssertNoFatalFailureOnFatalFailure)2824 TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) {
2825 TestPartResultArray gtest_failures;
2826 {
2827 ScopedFakeTestPartResultReporter gtest_reporter(>est_failures);
2828 DoAssertNoFatalFailureOnFails();
2829 }
2830 ASSERT_EQ(2, gtest_failures.size());
2831 EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
2832 gtest_failures.GetTestPartResult(0).type());
2833 EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
2834 gtest_failures.GetTestPartResult(1).type());
2835 EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
2836 gtest_failures.GetTestPartResult(0).message());
2837 EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
2838 gtest_failures.GetTestPartResult(1).message());
2839 }
2840
TEST_F(NoFatalFailureTest,ExpectNoFatalFailureOnFatalFailure)2841 TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) {
2842 TestPartResultArray gtest_failures;
2843 {
2844 ScopedFakeTestPartResultReporter gtest_reporter(>est_failures);
2845 DoExpectNoFatalFailureOnFails();
2846 }
2847 ASSERT_EQ(3, gtest_failures.size());
2848 EXPECT_EQ(testing::TPRT_FATAL_FAILURE,
2849 gtest_failures.GetTestPartResult(0).type());
2850 EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
2851 gtest_failures.GetTestPartResult(1).type());
2852 EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
2853 gtest_failures.GetTestPartResult(2).type());
2854 EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
2855 gtest_failures.GetTestPartResult(0).message());
2856 EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
2857 gtest_failures.GetTestPartResult(1).message());
2858 EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure",
2859 gtest_failures.GetTestPartResult(2).message());
2860 }
2861
TEST_F(NoFatalFailureTest,MessageIsStreamable)2862 TEST_F(NoFatalFailureTest, MessageIsStreamable) {
2863 TestPartResultArray gtest_failures;
2864 {
2865 ScopedFakeTestPartResultReporter gtest_reporter(>est_failures);
2866 EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message";
2867 }
2868 ASSERT_EQ(2, gtest_failures.size());
2869 EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
2870 gtest_failures.GetTestPartResult(0).type());
2871 EXPECT_EQ(testing::TPRT_NONFATAL_FAILURE,
2872 gtest_failures.GetTestPartResult(1).type());
2873 EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo",
2874 gtest_failures.GetTestPartResult(0).message());
2875 EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message",
2876 gtest_failures.GetTestPartResult(1).message());
2877 }
2878
2879 // Tests non-string assertions.
2880
2881 // Tests EqFailure(), used for implementing *EQ* assertions.
TEST(AssertionTest,EqFailure)2882 TEST(AssertionTest, EqFailure) {
2883 const String foo_val("5"), bar_val("6");
2884 const String msg1(
2885 EqFailure("foo", "bar", foo_val, bar_val, false)
2886 .failure_message());
2887 EXPECT_STREQ(
2888 "Value of: bar\n"
2889 " Actual: 6\n"
2890 "Expected: foo\n"
2891 "Which is: 5",
2892 msg1.c_str());
2893
2894 const String msg2(
2895 EqFailure("foo", "6", foo_val, bar_val, false)
2896 .failure_message());
2897 EXPECT_STREQ(
2898 "Value of: 6\n"
2899 "Expected: foo\n"
2900 "Which is: 5",
2901 msg2.c_str());
2902
2903 const String msg3(
2904 EqFailure("5", "bar", foo_val, bar_val, false)
2905 .failure_message());
2906 EXPECT_STREQ(
2907 "Value of: bar\n"
2908 " Actual: 6\n"
2909 "Expected: 5",
2910 msg3.c_str());
2911
2912 const String msg4(
2913 EqFailure("5", "6", foo_val, bar_val, false).failure_message());
2914 EXPECT_STREQ(
2915 "Value of: 6\n"
2916 "Expected: 5",
2917 msg4.c_str());
2918
2919 const String msg5(
2920 EqFailure("foo", "bar",
2921 String("\"x\""), String("\"y\""),
2922 true).failure_message());
2923 EXPECT_STREQ(
2924 "Value of: bar\n"
2925 " Actual: \"y\"\n"
2926 "Expected: foo (ignoring case)\n"
2927 "Which is: \"x\"",
2928 msg5.c_str());
2929 }
2930
2931 // Tests AppendUserMessage(), used for implementing the *EQ* macros.
TEST(AssertionTest,AppendUserMessage)2932 TEST(AssertionTest, AppendUserMessage) {
2933 const String foo("foo");
2934
2935 Message msg;
2936 EXPECT_STREQ("foo",
2937 AppendUserMessage(foo, msg).c_str());
2938
2939 msg << "bar";
2940 EXPECT_STREQ("foo\nbar",
2941 AppendUserMessage(foo, msg).c_str());
2942 }
2943
2944 // Tests ASSERT_TRUE.
TEST(AssertionTest,ASSERT_TRUE)2945 TEST(AssertionTest, ASSERT_TRUE) {
2946 ASSERT_TRUE(2 > 1); // NOLINT
2947 EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1),
2948 "2 < 1");
2949 }
2950
2951 // Tests ASSERT_FALSE.
TEST(AssertionTest,ASSERT_FALSE)2952 TEST(AssertionTest, ASSERT_FALSE) {
2953 ASSERT_FALSE(2 < 1); // NOLINT
2954 EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1),
2955 "Value of: 2 > 1\n"
2956 " Actual: true\n"
2957 "Expected: false");
2958 }
2959
2960 // Tests using ASSERT_EQ on double values. The purpose is to make
2961 // sure that the specialization we did for integer and anonymous enums
2962 // isn't used for double arguments.
TEST(ExpectTest,ASSERT_EQ_Double)2963 TEST(ExpectTest, ASSERT_EQ_Double) {
2964 // A success.
2965 ASSERT_EQ(5.6, 5.6);
2966
2967 // A failure.
2968 EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2),
2969 "5.1");
2970 }
2971
2972 // Tests ASSERT_EQ.
TEST(AssertionTest,ASSERT_EQ)2973 TEST(AssertionTest, ASSERT_EQ) {
2974 ASSERT_EQ(5, 2 + 3);
2975 EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3),
2976 "Value of: 2*3\n"
2977 " Actual: 6\n"
2978 "Expected: 5");
2979 }
2980
2981 // Tests ASSERT_EQ(NULL, pointer).
2982 #if !GTEST_OS_SYMBIAN
2983 // The NULL-detection template magic fails to compile with
2984 // the Nokia compiler and crashes the ARM compiler, hence
2985 // not testing on Symbian.
TEST(AssertionTest,ASSERT_EQ_NULL)2986 TEST(AssertionTest, ASSERT_EQ_NULL) {
2987 // A success.
2988 const char* p = NULL;
2989 ASSERT_EQ(NULL, p);
2990
2991 // A failure.
2992 static int n = 0;
2993 EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n),
2994 "Value of: &n\n");
2995 }
2996 #endif // !GTEST_OS_SYMBIAN
2997
2998 // Tests ASSERT_EQ(0, non_pointer). Since the literal 0 can be
2999 // treated as a null pointer by the compiler, we need to make sure
3000 // that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as
3001 // ASSERT_EQ(static_cast<void*>(NULL), non_pointer).
TEST(ExpectTest,ASSERT_EQ_0)3002 TEST(ExpectTest, ASSERT_EQ_0) {
3003 int n = 0;
3004
3005 // A success.
3006 ASSERT_EQ(0, n);
3007
3008 // A failure.
3009 EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6),
3010 "Expected: 0");
3011 }
3012
3013 // Tests ASSERT_NE.
TEST(AssertionTest,ASSERT_NE)3014 TEST(AssertionTest, ASSERT_NE) {
3015 ASSERT_NE(6, 7);
3016 EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'),
3017 "Expected: ('a') != ('a'), "
3018 "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
3019 }
3020
3021 // Tests ASSERT_LE.
TEST(AssertionTest,ASSERT_LE)3022 TEST(AssertionTest, ASSERT_LE) {
3023 ASSERT_LE(2, 3);
3024 ASSERT_LE(2, 2);
3025 EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0),
3026 "Expected: (2) <= (0), actual: 2 vs 0");
3027 }
3028
3029 // Tests ASSERT_LT.
TEST(AssertionTest,ASSERT_LT)3030 TEST(AssertionTest, ASSERT_LT) {
3031 ASSERT_LT(2, 3);
3032 EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2),
3033 "Expected: (2) < (2), actual: 2 vs 2");
3034 }
3035
3036 // Tests ASSERT_GE.
TEST(AssertionTest,ASSERT_GE)3037 TEST(AssertionTest, ASSERT_GE) {
3038 ASSERT_GE(2, 1);
3039 ASSERT_GE(2, 2);
3040 EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3),
3041 "Expected: (2) >= (3), actual: 2 vs 3");
3042 }
3043
3044 // Tests ASSERT_GT.
TEST(AssertionTest,ASSERT_GT)3045 TEST(AssertionTest, ASSERT_GT) {
3046 ASSERT_GT(2, 1);
3047 EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2),
3048 "Expected: (2) > (2), actual: 2 vs 2");
3049 }
3050
3051 #if GTEST_HAS_EXCEPTIONS
3052
ThrowNothing()3053 void ThrowNothing() {}
3054
3055
3056 // Tests ASSERT_THROW.
TEST(AssertionTest,ASSERT_THROW)3057 TEST(AssertionTest, ASSERT_THROW) {
3058 ASSERT_THROW(ThrowAnInteger(), int);
3059 EXPECT_FATAL_FAILURE(
3060 ASSERT_THROW(ThrowAnInteger(), bool),
3061 "Expected: ThrowAnInteger() throws an exception of type bool.\n"
3062 " Actual: it throws a different type.");
3063 EXPECT_FATAL_FAILURE(
3064 ASSERT_THROW(ThrowNothing(), bool),
3065 "Expected: ThrowNothing() throws an exception of type bool.\n"
3066 " Actual: it throws nothing.");
3067 }
3068
3069 // Tests ASSERT_NO_THROW.
TEST(AssertionTest,ASSERT_NO_THROW)3070 TEST(AssertionTest, ASSERT_NO_THROW) {
3071 ASSERT_NO_THROW(ThrowNothing());
3072 EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()),
3073 "Expected: ThrowAnInteger() doesn't throw an exception."
3074 "\n Actual: it throws.");
3075 }
3076
3077 // Tests ASSERT_ANY_THROW.
TEST(AssertionTest,ASSERT_ANY_THROW)3078 TEST(AssertionTest, ASSERT_ANY_THROW) {
3079 ASSERT_ANY_THROW(ThrowAnInteger());
3080 EXPECT_FATAL_FAILURE(
3081 ASSERT_ANY_THROW(ThrowNothing()),
3082 "Expected: ThrowNothing() throws an exception.\n"
3083 " Actual: it doesn't.");
3084 }
3085
3086 #endif // GTEST_HAS_EXCEPTIONS
3087
3088 // Makes sure we deal with the precedence of <<. This test should
3089 // compile.
TEST(AssertionTest,AssertPrecedence)3090 TEST(AssertionTest, AssertPrecedence) {
3091 ASSERT_EQ(1 < 2, true);
3092 ASSERT_EQ(true && false, false);
3093 }
3094
3095 // A subroutine used by the following test.
TestEq1(int x)3096 void TestEq1(int x) {
3097 ASSERT_EQ(1, x);
3098 }
3099
3100 // Tests calling a test subroutine that's not part of a fixture.
TEST(AssertionTest,NonFixtureSubroutine)3101 TEST(AssertionTest, NonFixtureSubroutine) {
3102 EXPECT_FATAL_FAILURE(TestEq1(2),
3103 "Value of: x");
3104 }
3105
3106 // An uncopyable class.
3107 class Uncopyable {
3108 public:
Uncopyable(int value)3109 explicit Uncopyable(int value) : value_(value) {}
3110
value() const3111 int value() const { return value_; }
operator ==(const Uncopyable & rhs) const3112 bool operator==(const Uncopyable& rhs) const {
3113 return value() == rhs.value();
3114 }
3115 private:
3116 // This constructor deliberately has no implementation, as we don't
3117 // want this class to be copyable.
3118 Uncopyable(const Uncopyable&); // NOLINT
3119
3120 int value_;
3121 };
3122
operator <<(::std::ostream & os,const Uncopyable & value)3123 ::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) {
3124 return os << value.value();
3125 }
3126
3127
IsPositiveUncopyable(const Uncopyable & x)3128 bool IsPositiveUncopyable(const Uncopyable& x) {
3129 return x.value() > 0;
3130 }
3131
3132 // A subroutine used by the following test.
TestAssertNonPositive()3133 void TestAssertNonPositive() {
3134 Uncopyable y(-1);
3135 ASSERT_PRED1(IsPositiveUncopyable, y);
3136 }
3137 // A subroutine used by the following test.
TestAssertEqualsUncopyable()3138 void TestAssertEqualsUncopyable() {
3139 Uncopyable x(5);
3140 Uncopyable y(-1);
3141 ASSERT_EQ(x, y);
3142 }
3143
3144 // Tests that uncopyable objects can be used in assertions.
TEST(AssertionTest,AssertWorksWithUncopyableObject)3145 TEST(AssertionTest, AssertWorksWithUncopyableObject) {
3146 Uncopyable x(5);
3147 ASSERT_PRED1(IsPositiveUncopyable, x);
3148 ASSERT_EQ(x, x);
3149 EXPECT_FATAL_FAILURE(TestAssertNonPositive(),
3150 "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
3151 EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(),
3152 "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5");
3153 }
3154
3155 // Tests that uncopyable objects can be used in expects.
TEST(AssertionTest,ExpectWorksWithUncopyableObject)3156 TEST(AssertionTest, ExpectWorksWithUncopyableObject) {
3157 Uncopyable x(5);
3158 EXPECT_PRED1(IsPositiveUncopyable, x);
3159 Uncopyable y(-1);
3160 EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y),
3161 "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
3162 EXPECT_EQ(x, x);
3163 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y),
3164 "Value of: y\n Actual: -1\nExpected: x\nWhich is: 5");
3165 }
3166
3167
3168 // The version of gcc used in XCode 2.2 has a bug and doesn't allow
3169 // anonymous enums in assertions. Therefore the following test is
3170 // done only on Linux and Windows.
3171 #if GTEST_OS_LINUX || GTEST_OS_WINDOWS
3172
3173 // Tests using assertions with anonymous enums.
3174 enum {
3175 CASE_A = -1,
3176 #if GTEST_OS_LINUX
3177 // We want to test the case where the size of the anonymous enum is
3178 // larger than sizeof(int), to make sure our implementation of the
3179 // assertions doesn't truncate the enums. However, MSVC
3180 // (incorrectly) doesn't allow an enum value to exceed the range of
3181 // an int, so this has to be conditionally compiled.
3182 //
3183 // On Linux, CASE_B and CASE_A have the same value when truncated to
3184 // int size. We want to test whether this will confuse the
3185 // assertions.
3186 CASE_B = testing::internal::kMaxBiggestInt,
3187 #else
3188 CASE_B = INT_MAX,
3189 #endif // GTEST_OS_LINUX
3190 };
3191
TEST(AssertionTest,AnonymousEnum)3192 TEST(AssertionTest, AnonymousEnum) {
3193 #if GTEST_OS_LINUX
3194 EXPECT_EQ(static_cast<int>(CASE_A), static_cast<int>(CASE_B));
3195 #endif // GTEST_OS_LINUX
3196
3197 EXPECT_EQ(CASE_A, CASE_A);
3198 EXPECT_NE(CASE_A, CASE_B);
3199 EXPECT_LT(CASE_A, CASE_B);
3200 EXPECT_LE(CASE_A, CASE_B);
3201 EXPECT_GT(CASE_B, CASE_A);
3202 EXPECT_GE(CASE_A, CASE_A);
3203 EXPECT_NONFATAL_FAILURE(EXPECT_GE(CASE_A, CASE_B),
3204 "(CASE_A) >= (CASE_B)");
3205
3206 ASSERT_EQ(CASE_A, CASE_A);
3207 ASSERT_NE(CASE_A, CASE_B);
3208 ASSERT_LT(CASE_A, CASE_B);
3209 ASSERT_LE(CASE_A, CASE_B);
3210 ASSERT_GT(CASE_B, CASE_A);
3211 ASSERT_GE(CASE_A, CASE_A);
3212 EXPECT_FATAL_FAILURE(ASSERT_EQ(CASE_A, CASE_B),
3213 "Value of: CASE_B");
3214 }
3215
3216 #endif // GTEST_OS_LINUX || GTEST_OS_WINDOWS
3217
3218 #if GTEST_OS_WINDOWS
3219
UnexpectedHRESULTFailure()3220 static HRESULT UnexpectedHRESULTFailure() {
3221 return E_UNEXPECTED;
3222 }
3223
OkHRESULTSuccess()3224 static HRESULT OkHRESULTSuccess() {
3225 return S_OK;
3226 }
3227
FalseHRESULTSuccess()3228 static HRESULT FalseHRESULTSuccess() {
3229 return S_FALSE;
3230 }
3231
3232 // HRESULT assertion tests test both zero and non-zero
3233 // success codes as well as failure message for each.
3234 //
3235 // Windows CE doesn't support message texts.
TEST(HRESULTAssertionTest,EXPECT_HRESULT_SUCCEEDED)3236 TEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) {
3237 EXPECT_HRESULT_SUCCEEDED(S_OK);
3238 EXPECT_HRESULT_SUCCEEDED(S_FALSE);
3239
3240 EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
3241 "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
3242 " Actual: 0x8000FFFF");
3243 }
3244
TEST(HRESULTAssertionTest,ASSERT_HRESULT_SUCCEEDED)3245 TEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) {
3246 ASSERT_HRESULT_SUCCEEDED(S_OK);
3247 ASSERT_HRESULT_SUCCEEDED(S_FALSE);
3248
3249 EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
3250 "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
3251 " Actual: 0x8000FFFF");
3252 }
3253
TEST(HRESULTAssertionTest,EXPECT_HRESULT_FAILED)3254 TEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) {
3255 EXPECT_HRESULT_FAILED(E_UNEXPECTED);
3256
3257 EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()),
3258 "Expected: (OkHRESULTSuccess()) fails.\n"
3259 " Actual: 0x00000000");
3260 EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()),
3261 "Expected: (FalseHRESULTSuccess()) fails.\n"
3262 " Actual: 0x00000001");
3263 }
3264
TEST(HRESULTAssertionTest,ASSERT_HRESULT_FAILED)3265 TEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) {
3266 ASSERT_HRESULT_FAILED(E_UNEXPECTED);
3267
3268 EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()),
3269 "Expected: (OkHRESULTSuccess()) fails.\n"
3270 " Actual: 0x00000000");
3271 EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()),
3272 "Expected: (FalseHRESULTSuccess()) fails.\n"
3273 " Actual: 0x00000001");
3274 }
3275
3276 // Tests that streaming to the HRESULT macros works.
TEST(HRESULTAssertionTest,Streaming)3277 TEST(HRESULTAssertionTest, Streaming) {
3278 EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
3279 ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
3280 EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
3281 ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
3282
3283 EXPECT_NONFATAL_FAILURE(
3284 EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
3285 "expected failure");
3286
3287 EXPECT_FATAL_FAILURE(
3288 ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
3289 "expected failure");
3290
3291 EXPECT_NONFATAL_FAILURE(
3292 EXPECT_HRESULT_FAILED(S_OK) << "expected failure",
3293 "expected failure");
3294
3295 EXPECT_FATAL_FAILURE(
3296 ASSERT_HRESULT_FAILED(S_OK) << "expected failure",
3297 "expected failure");
3298 }
3299
3300 #endif // GTEST_OS_WINDOWS
3301
3302 // Tests that the assertion macros behave like single statements.
TEST(AssertionSyntaxTest,BasicAssertionsBehavesLikeSingleStatement)3303 TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) {
3304 if (false)
3305 ASSERT_TRUE(false) << "This should never be executed; "
3306 "It's a compilation test only.";
3307
3308 if (true)
3309 EXPECT_FALSE(false);
3310 else
3311 ;
3312
3313 if (false)
3314 ASSERT_LT(1, 3);
3315
3316 if (false)
3317 ;
3318 else
3319 EXPECT_GT(3, 2) << "";
3320 }
3321
3322 #if GTEST_HAS_EXCEPTIONS
3323 // Tests that the compiler will not complain about unreachable code in the
3324 // EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros.
TEST(ExpectThrowTest,DoesNotGenerateUnreachableCodeWarning)3325 TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) {
3326 int n = 0;
3327
3328 EXPECT_THROW(throw 1, int);
3329 EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), "");
3330 EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), "");
3331 EXPECT_NO_THROW(n++);
3332 EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), "");
3333 EXPECT_ANY_THROW(throw 1);
3334 EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), "");
3335 }
3336
TEST(AssertionSyntaxTest,ExceptionAssertionsBehavesLikeSingleStatement)3337 TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {
3338 if (false)
3339 EXPECT_THROW(ThrowNothing(), bool);
3340
3341 if (true)
3342 EXPECT_THROW(ThrowAnInteger(), int);
3343 else
3344 ;
3345
3346 if (false)
3347 EXPECT_NO_THROW(ThrowAnInteger());
3348
3349 if (true)
3350 EXPECT_NO_THROW(ThrowNothing());
3351 else
3352 ;
3353
3354 if (false)
3355 EXPECT_ANY_THROW(ThrowNothing());
3356
3357 if (true)
3358 EXPECT_ANY_THROW(ThrowAnInteger());
3359 else
3360 ;
3361 }
3362 #endif // GTEST_HAS_EXCEPTIONS
3363
TEST(AssertionSyntaxTest,NoFatalFailureAssertionsBehavesLikeSingleStatement)3364 TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) {
3365 if (false)
3366 EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. "
3367 << "It's a compilation test only.";
3368 else
3369 ;
3370
3371 if (false)
3372 ASSERT_NO_FATAL_FAILURE(FAIL()) << "";
3373 else
3374 ;
3375
3376 if (true)
3377 EXPECT_NO_FATAL_FAILURE(SUCCEED());
3378 else
3379 ;
3380
3381 if (false)
3382 ;
3383 else
3384 ASSERT_NO_FATAL_FAILURE(SUCCEED());
3385 }
3386
3387 // Tests that the assertion macros work well with switch statements.
TEST(AssertionSyntaxTest,WorksWithSwitch)3388 TEST(AssertionSyntaxTest, WorksWithSwitch) {
3389 switch (0) {
3390 case 1:
3391 break;
3392 default:
3393 ASSERT_TRUE(true);
3394 }
3395
3396 switch (0)
3397 case 0:
3398 EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case";
3399
3400 // Binary assertions are implemented using a different code path
3401 // than the Boolean assertions. Hence we test them separately.
3402 switch (0) {
3403 case 1:
3404 default:
3405 ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler";
3406 }
3407
3408 switch (0)
3409 case 0:
3410 EXPECT_NE(1, 2);
3411 }
3412
3413 #if GTEST_HAS_EXCEPTIONS
3414
ThrowAString()3415 void ThrowAString() {
3416 throw "String";
3417 }
3418
3419 // Test that the exception assertion macros compile and work with const
3420 // type qualifier.
TEST(AssertionSyntaxTest,WorksWithConst)3421 TEST(AssertionSyntaxTest, WorksWithConst) {
3422 ASSERT_THROW(ThrowAString(), const char*);
3423
3424 EXPECT_THROW(ThrowAString(), const char*);
3425 }
3426
3427 #endif // GTEST_HAS_EXCEPTIONS
3428
3429 } // namespace
3430
3431 // Returns the number of successful parts in the current test.
GetSuccessfulPartCount()3432 static size_t GetSuccessfulPartCount() {
3433 return UnitTest::GetInstance()->impl()->current_test_result()->
3434 successful_part_count();
3435 }
3436
3437 namespace testing {
3438
3439 // Tests that Google Test tracks SUCCEED*.
TEST(SuccessfulAssertionTest,SUCCEED)3440 TEST(SuccessfulAssertionTest, SUCCEED) {
3441 SUCCEED();
3442 SUCCEED() << "OK";
3443 EXPECT_EQ(2u, GetSuccessfulPartCount());
3444 }
3445
3446 // Tests that Google Test doesn't track successful EXPECT_*.
TEST(SuccessfulAssertionTest,EXPECT)3447 TEST(SuccessfulAssertionTest, EXPECT) {
3448 EXPECT_TRUE(true);
3449 EXPECT_EQ(0u, GetSuccessfulPartCount());
3450 }
3451
3452 // Tests that Google Test doesn't track successful EXPECT_STR*.
TEST(SuccessfulAssertionTest,EXPECT_STR)3453 TEST(SuccessfulAssertionTest, EXPECT_STR) {
3454 EXPECT_STREQ("", "");
3455 EXPECT_EQ(0u, GetSuccessfulPartCount());
3456 }
3457
3458 // Tests that Google Test doesn't track successful ASSERT_*.
TEST(SuccessfulAssertionTest,ASSERT)3459 TEST(SuccessfulAssertionTest, ASSERT) {
3460 ASSERT_TRUE(true);
3461 EXPECT_EQ(0u, GetSuccessfulPartCount());
3462 }
3463
3464 // Tests that Google Test doesn't track successful ASSERT_STR*.
TEST(SuccessfulAssertionTest,ASSERT_STR)3465 TEST(SuccessfulAssertionTest, ASSERT_STR) {
3466 ASSERT_STREQ("", "");
3467 EXPECT_EQ(0u, GetSuccessfulPartCount());
3468 }
3469
3470 } // namespace testing
3471
3472 namespace {
3473
3474 // Tests EXPECT_TRUE.
TEST(ExpectTest,EXPECT_TRUE)3475 TEST(ExpectTest, EXPECT_TRUE) {
3476 EXPECT_TRUE(2 > 1); // NOLINT
3477 EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1),
3478 "Value of: 2 < 1\n"
3479 " Actual: false\n"
3480 "Expected: true");
3481 EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3),
3482 "2 > 3");
3483 }
3484
3485 // Tests EXPECT_FALSE.
TEST(ExpectTest,EXPECT_FALSE)3486 TEST(ExpectTest, EXPECT_FALSE) {
3487 EXPECT_FALSE(2 < 1); // NOLINT
3488 EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1),
3489 "Value of: 2 > 1\n"
3490 " Actual: true\n"
3491 "Expected: false");
3492 EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3),
3493 "2 < 3");
3494 }
3495
3496 // Tests EXPECT_EQ.
TEST(ExpectTest,EXPECT_EQ)3497 TEST(ExpectTest, EXPECT_EQ) {
3498 EXPECT_EQ(5, 2 + 3);
3499 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3),
3500 "Value of: 2*3\n"
3501 " Actual: 6\n"
3502 "Expected: 5");
3503 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3),
3504 "2 - 3");
3505 }
3506
3507 // Tests using EXPECT_EQ on double values. The purpose is to make
3508 // sure that the specialization we did for integer and anonymous enums
3509 // isn't used for double arguments.
TEST(ExpectTest,EXPECT_EQ_Double)3510 TEST(ExpectTest, EXPECT_EQ_Double) {
3511 // A success.
3512 EXPECT_EQ(5.6, 5.6);
3513
3514 // A failure.
3515 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2),
3516 "5.1");
3517 }
3518
3519 #if !GTEST_OS_SYMBIAN
3520 // Tests EXPECT_EQ(NULL, pointer).
TEST(ExpectTest,EXPECT_EQ_NULL)3521 TEST(ExpectTest, EXPECT_EQ_NULL) {
3522 // A success.
3523 const char* p = NULL;
3524 EXPECT_EQ(NULL, p);
3525
3526 // A failure.
3527 int n = 0;
3528 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n),
3529 "Value of: &n\n");
3530 }
3531 #endif // !GTEST_OS_SYMBIAN
3532
3533 // Tests EXPECT_EQ(0, non_pointer). Since the literal 0 can be
3534 // treated as a null pointer by the compiler, we need to make sure
3535 // that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as
3536 // EXPECT_EQ(static_cast<void*>(NULL), non_pointer).
TEST(ExpectTest,EXPECT_EQ_0)3537 TEST(ExpectTest, EXPECT_EQ_0) {
3538 int n = 0;
3539
3540 // A success.
3541 EXPECT_EQ(0, n);
3542
3543 // A failure.
3544 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6),
3545 "Expected: 0");
3546 }
3547
3548 // Tests EXPECT_NE.
TEST(ExpectTest,EXPECT_NE)3549 TEST(ExpectTest, EXPECT_NE) {
3550 EXPECT_NE(6, 7);
3551
3552 EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'),
3553 "Expected: ('a') != ('a'), "
3554 "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
3555 EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2),
3556 "2");
3557 char* const p0 = NULL;
3558 EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0),
3559 "p0");
3560 // Only way to get the Nokia compiler to compile the cast
3561 // is to have a separate void* variable first. Putting
3562 // the two casts on the same line doesn't work, neither does
3563 // a direct C-style to char*.
3564 void* pv1 = (void*)0x1234; // NOLINT
3565 char* const p1 = reinterpret_cast<char*>(pv1);
3566 EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1),
3567 "p1");
3568 }
3569
3570 // Tests EXPECT_LE.
TEST(ExpectTest,EXPECT_LE)3571 TEST(ExpectTest, EXPECT_LE) {
3572 EXPECT_LE(2, 3);
3573 EXPECT_LE(2, 2);
3574 EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0),
3575 "Expected: (2) <= (0), actual: 2 vs 0");
3576 EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9),
3577 "(1.1) <= (0.9)");
3578 }
3579
3580 // Tests EXPECT_LT.
TEST(ExpectTest,EXPECT_LT)3581 TEST(ExpectTest, EXPECT_LT) {
3582 EXPECT_LT(2, 3);
3583 EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2),
3584 "Expected: (2) < (2), actual: 2 vs 2");
3585 EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1),
3586 "(2) < (1)");
3587 }
3588
3589 // Tests EXPECT_GE.
TEST(ExpectTest,EXPECT_GE)3590 TEST(ExpectTest, EXPECT_GE) {
3591 EXPECT_GE(2, 1);
3592 EXPECT_GE(2, 2);
3593 EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3),
3594 "Expected: (2) >= (3), actual: 2 vs 3");
3595 EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1),
3596 "(0.9) >= (1.1)");
3597 }
3598
3599 // Tests EXPECT_GT.
TEST(ExpectTest,EXPECT_GT)3600 TEST(ExpectTest, EXPECT_GT) {
3601 EXPECT_GT(2, 1);
3602 EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2),
3603 "Expected: (2) > (2), actual: 2 vs 2");
3604 EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3),
3605 "(2) > (3)");
3606 }
3607
3608 #if GTEST_HAS_EXCEPTIONS
3609
3610 // Tests EXPECT_THROW.
TEST(ExpectTest,EXPECT_THROW)3611 TEST(ExpectTest, EXPECT_THROW) {
3612 EXPECT_THROW(ThrowAnInteger(), int);
3613 EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool),
3614 "Expected: ThrowAnInteger() throws an exception of "
3615 "type bool.\n Actual: it throws a different type.");
3616 EXPECT_NONFATAL_FAILURE(
3617 EXPECT_THROW(ThrowNothing(), bool),
3618 "Expected: ThrowNothing() throws an exception of type bool.\n"
3619 " Actual: it throws nothing.");
3620 }
3621
3622 // Tests EXPECT_NO_THROW.
TEST(ExpectTest,EXPECT_NO_THROW)3623 TEST(ExpectTest, EXPECT_NO_THROW) {
3624 EXPECT_NO_THROW(ThrowNothing());
3625 EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()),
3626 "Expected: ThrowAnInteger() doesn't throw an "
3627 "exception.\n Actual: it throws.");
3628 }
3629
3630 // Tests EXPECT_ANY_THROW.
TEST(ExpectTest,EXPECT_ANY_THROW)3631 TEST(ExpectTest, EXPECT_ANY_THROW) {
3632 EXPECT_ANY_THROW(ThrowAnInteger());
3633 EXPECT_NONFATAL_FAILURE(
3634 EXPECT_ANY_THROW(ThrowNothing()),
3635 "Expected: ThrowNothing() throws an exception.\n"
3636 " Actual: it doesn't.");
3637 }
3638
3639 #endif // GTEST_HAS_EXCEPTIONS
3640
3641 // Make sure we deal with the precedence of <<.
TEST(ExpectTest,ExpectPrecedence)3642 TEST(ExpectTest, ExpectPrecedence) {
3643 EXPECT_EQ(1 < 2, true);
3644 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false),
3645 "Value of: true && false");
3646 }
3647
3648
3649 // Tests the StreamableToString() function.
3650
3651 // Tests using StreamableToString() on a scalar.
TEST(StreamableToStringTest,Scalar)3652 TEST(StreamableToStringTest, Scalar) {
3653 EXPECT_STREQ("5", StreamableToString(5).c_str());
3654 }
3655
3656 // Tests using StreamableToString() on a non-char pointer.
TEST(StreamableToStringTest,Pointer)3657 TEST(StreamableToStringTest, Pointer) {
3658 int n = 0;
3659 int* p = &n;
3660 EXPECT_STRNE("(null)", StreamableToString(p).c_str());
3661 }
3662
3663 // Tests using StreamableToString() on a NULL non-char pointer.
TEST(StreamableToStringTest,NullPointer)3664 TEST(StreamableToStringTest, NullPointer) {
3665 int* p = NULL;
3666 EXPECT_STREQ("(null)", StreamableToString(p).c_str());
3667 }
3668
3669 // Tests using StreamableToString() on a C string.
TEST(StreamableToStringTest,CString)3670 TEST(StreamableToStringTest, CString) {
3671 EXPECT_STREQ("Foo", StreamableToString("Foo").c_str());
3672 }
3673
3674 // Tests using StreamableToString() on a NULL C string.
TEST(StreamableToStringTest,NullCString)3675 TEST(StreamableToStringTest, NullCString) {
3676 char* p = NULL;
3677 EXPECT_STREQ("(null)", StreamableToString(p).c_str());
3678 }
3679
3680 // Tests using streamable values as assertion messages.
3681
3682 #if GTEST_HAS_STD_STRING
3683 // Tests using std::string as an assertion message.
TEST(StreamableTest,string)3684 TEST(StreamableTest, string) {
3685 static const std::string str(
3686 "This failure message is a std::string, and is expected.");
3687 EXPECT_FATAL_FAILURE(FAIL() << str,
3688 str.c_str());
3689 }
3690
3691 // Tests that we can output strings containing embedded NULs.
3692 // Limited to Linux because we can only do this with std::string's.
TEST(StreamableTest,stringWithEmbeddedNUL)3693 TEST(StreamableTest, stringWithEmbeddedNUL) {
3694 static const char char_array_with_nul[] =
3695 "Here's a NUL\0 and some more string";
3696 static const std::string string_with_nul(char_array_with_nul,
3697 sizeof(char_array_with_nul)
3698 - 1); // drops the trailing NUL
3699 EXPECT_FATAL_FAILURE(FAIL() << string_with_nul,
3700 "Here's a NUL\\0 and some more string");
3701 }
3702
3703 #endif // GTEST_HAS_STD_STRING
3704
3705 // Tests that we can output a NUL char.
TEST(StreamableTest,NULChar)3706 TEST(StreamableTest, NULChar) {
3707 EXPECT_FATAL_FAILURE({ // NOLINT
3708 FAIL() << "A NUL" << '\0' << " and some more string";
3709 }, "A NUL\\0 and some more string");
3710 }
3711
3712 // Tests using int as an assertion message.
TEST(StreamableTest,int)3713 TEST(StreamableTest, int) {
3714 EXPECT_FATAL_FAILURE(FAIL() << 900913,
3715 "900913");
3716 }
3717
3718 // Tests using NULL char pointer as an assertion message.
3719 //
3720 // In MSVC, streaming a NULL char * causes access violation. Google Test
3721 // implemented a workaround (substituting "(null)" for NULL). This
3722 // tests whether the workaround works.
TEST(StreamableTest,NullCharPtr)3723 TEST(StreamableTest, NullCharPtr) {
3724 EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL),
3725 "(null)");
3726 }
3727
3728 // Tests that basic IO manipulators (endl, ends, and flush) can be
3729 // streamed to testing::Message.
TEST(StreamableTest,BasicIoManip)3730 TEST(StreamableTest, BasicIoManip) {
3731 EXPECT_FATAL_FAILURE({ // NOLINT
3732 FAIL() << "Line 1." << std::endl
3733 << "A NUL char " << std::ends << std::flush << " in line 2.";
3734 }, "Line 1.\nA NUL char \\0 in line 2.");
3735 }
3736
3737 // Tests the macros that haven't been covered so far.
3738
AddFailureHelper(bool * aborted)3739 void AddFailureHelper(bool* aborted) {
3740 *aborted = true;
3741 ADD_FAILURE() << "Failure";
3742 *aborted = false;
3743 }
3744
3745 // Tests ADD_FAILURE.
TEST(MacroTest,ADD_FAILURE)3746 TEST(MacroTest, ADD_FAILURE) {
3747 bool aborted = true;
3748 EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted),
3749 "Failure");
3750 EXPECT_FALSE(aborted);
3751 }
3752
3753 // Tests FAIL.
TEST(MacroTest,FAIL)3754 TEST(MacroTest, FAIL) {
3755 EXPECT_FATAL_FAILURE(FAIL(),
3756 "Failed");
3757 EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.",
3758 "Intentional failure.");
3759 }
3760
3761 // Tests SUCCEED
TEST(MacroTest,SUCCEED)3762 TEST(MacroTest, SUCCEED) {
3763 SUCCEED();
3764 SUCCEED() << "Explicit success.";
3765 }
3766
3767
3768 // Tests for EXPECT_EQ() and ASSERT_EQ().
3769 //
3770 // These tests fail *intentionally*, s.t. the failure messages can be
3771 // generated and tested.
3772 //
3773 // We have different tests for different argument types.
3774
3775 // Tests using bool values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,Bool)3776 TEST(EqAssertionTest, Bool) {
3777 EXPECT_EQ(true, true);
3778 EXPECT_FATAL_FAILURE(ASSERT_EQ(false, true),
3779 "Value of: true");
3780 }
3781
3782 // Tests using int values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,Int)3783 TEST(EqAssertionTest, Int) {
3784 ASSERT_EQ(32, 32);
3785 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33),
3786 "33");
3787 }
3788
3789 // Tests using time_t values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,Time_T)3790 TEST(EqAssertionTest, Time_T) {
3791 EXPECT_EQ(static_cast<time_t>(0),
3792 static_cast<time_t>(0));
3793 EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0),
3794 static_cast<time_t>(1234)),
3795 "1234");
3796 }
3797
3798 // Tests using char values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,Char)3799 TEST(EqAssertionTest, Char) {
3800 ASSERT_EQ('z', 'z');
3801 const char ch = 'b';
3802 EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch),
3803 "ch");
3804 EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch),
3805 "ch");
3806 }
3807
3808 #if GTEST_HAS_STD_WSTRING
3809 // Tests using wchar_t values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,WideChar)3810 TEST(EqAssertionTest, WideChar) {
3811 EXPECT_EQ(L'b', L'b');
3812
3813 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'),
3814 "Value of: L'x'\n"
3815 " Actual: L'x' (120, 0x78)\n"
3816 "Expected: L'\0'\n"
3817 "Which is: L'\0' (0, 0x0)");
3818
3819 static wchar_t wchar;
3820 wchar = L'b';
3821 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar),
3822 "wchar");
3823 wchar = L'\x8119';
3824 EXPECT_FATAL_FAILURE(ASSERT_EQ(L'\x8120', wchar),
3825 "Value of: wchar");
3826 }
3827 #endif // GTEST_HAS_STD_WSTRING
3828
3829 #if GTEST_HAS_STD_STRING
3830 // Tests using ::std::string values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,StdString)3831 TEST(EqAssertionTest, StdString) {
3832 // Compares a const char* to an std::string that has identical
3833 // content.
3834 ASSERT_EQ("Test", ::std::string("Test"));
3835
3836 // Compares two identical std::strings.
3837 static const ::std::string str1("A * in the middle");
3838 static const ::std::string str2(str1);
3839 EXPECT_EQ(str1, str2);
3840
3841 // Compares a const char* to an std::string that has different
3842 // content
3843 EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")),
3844 "::std::string(\"test\")");
3845
3846 // Compares an std::string to a char* that has different content.
3847 char* const p1 = const_cast<char*>("foo");
3848 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1),
3849 "p1");
3850
3851 // Compares two std::strings that have different contents, one of
3852 // which having a NUL character in the middle. This should fail.
3853 static ::std::string str3(str1);
3854 str3.at(2) = '\0';
3855 EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3),
3856 "Value of: str3\n"
3857 " Actual: \"A \\0 in the middle\"");
3858 }
3859
3860 #endif // GTEST_HAS_STD_STRING
3861
3862 #if GTEST_HAS_STD_WSTRING
3863
3864 // Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,StdWideString)3865 TEST(EqAssertionTest, StdWideString) {
3866 // Compares an std::wstring to a const wchar_t* that has identical
3867 // content.
3868 EXPECT_EQ(::std::wstring(L"Test\x8119"), L"Test\x8119");
3869
3870 // Compares two identical std::wstrings.
3871 const ::std::wstring wstr1(L"A * in the middle");
3872 const ::std::wstring wstr2(wstr1);
3873 ASSERT_EQ(wstr1, wstr2);
3874
3875 // Compares an std::wstring to a const wchar_t* that has different
3876 // content.
3877 EXPECT_NONFATAL_FAILURE({ // NOLINT
3878 EXPECT_EQ(::std::wstring(L"Test\x8119"), L"Test\x8120");
3879 }, "L\"Test\\x8120\"");
3880
3881 // Compares two std::wstrings that have different contents, one of
3882 // which having a NUL character in the middle.
3883 ::std::wstring wstr3(wstr1);
3884 wstr3.at(2) = L'\0';
3885 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3),
3886 "wstr3");
3887
3888 // Compares a wchar_t* to an std::wstring that has different
3889 // content.
3890 EXPECT_FATAL_FAILURE({ // NOLINT
3891 ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar"));
3892 }, "");
3893 }
3894
3895 #endif // GTEST_HAS_STD_WSTRING
3896
3897 #if GTEST_HAS_GLOBAL_STRING
3898 // Tests using ::string values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,GlobalString)3899 TEST(EqAssertionTest, GlobalString) {
3900 // Compares a const char* to a ::string that has identical content.
3901 EXPECT_EQ("Test", ::string("Test"));
3902
3903 // Compares two identical ::strings.
3904 const ::string str1("A * in the middle");
3905 const ::string str2(str1);
3906 ASSERT_EQ(str1, str2);
3907
3908 // Compares a ::string to a const char* that has different content.
3909 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"),
3910 "test");
3911
3912 // Compares two ::strings that have different contents, one of which
3913 // having a NUL character in the middle.
3914 ::string str3(str1);
3915 str3.at(2) = '\0';
3916 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3),
3917 "str3");
3918
3919 // Compares a ::string to a char* that has different content.
3920 EXPECT_FATAL_FAILURE({ // NOLINT
3921 ASSERT_EQ(::string("bar"), const_cast<char*>("foo"));
3922 }, "");
3923 }
3924
3925 #endif // GTEST_HAS_GLOBAL_STRING
3926
3927 #if GTEST_HAS_GLOBAL_WSTRING
3928
3929 // Tests using ::wstring values in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,GlobalWideString)3930 TEST(EqAssertionTest, GlobalWideString) {
3931 // Compares a const wchar_t* to a ::wstring that has identical content.
3932 ASSERT_EQ(L"Test\x8119", ::wstring(L"Test\x8119"));
3933
3934 // Compares two identical ::wstrings.
3935 static const ::wstring wstr1(L"A * in the middle");
3936 static const ::wstring wstr2(wstr1);
3937 EXPECT_EQ(wstr1, wstr2);
3938
3939 // Compares a const wchar_t* to a ::wstring that has different
3940 // content.
3941 EXPECT_NONFATAL_FAILURE({ // NOLINT
3942 EXPECT_EQ(L"Test\x8120", ::wstring(L"Test\x8119"));
3943 }, "Test\\x8119");
3944
3945 // Compares a wchar_t* to a ::wstring that has different content.
3946 wchar_t* const p1 = const_cast<wchar_t*>(L"foo");
3947 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")),
3948 "bar");
3949
3950 // Compares two ::wstrings that have different contents, one of which
3951 // having a NUL character in the middle.
3952 static ::wstring wstr3;
3953 wstr3 = wstr1;
3954 wstr3.at(2) = L'\0';
3955 EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3),
3956 "wstr3");
3957 }
3958
3959 #endif // GTEST_HAS_GLOBAL_WSTRING
3960
3961 // Tests using char pointers in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,CharPointer)3962 TEST(EqAssertionTest, CharPointer) {
3963 char* const p0 = NULL;
3964 // Only way to get the Nokia compiler to compile the cast
3965 // is to have a separate void* variable first. Putting
3966 // the two casts on the same line doesn't work, neither does
3967 // a direct C-style to char*.
3968 void* pv1 = (void*)0x1234; // NOLINT
3969 void* pv2 = (void*)0xABC0; // NOLINT
3970 char* const p1 = reinterpret_cast<char*>(pv1);
3971 char* const p2 = reinterpret_cast<char*>(pv2);
3972 ASSERT_EQ(p1, p1);
3973
3974 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
3975 "Value of: p2");
3976 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
3977 "p2");
3978 EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234),
3979 reinterpret_cast<char*>(0xABC0)),
3980 "ABC0");
3981 }
3982
3983 // Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,WideCharPointer)3984 TEST(EqAssertionTest, WideCharPointer) {
3985 wchar_t* const p0 = NULL;
3986 // Only way to get the Nokia compiler to compile the cast
3987 // is to have a separate void* variable first. Putting
3988 // the two casts on the same line doesn't work, neither does
3989 // a direct C-style to char*.
3990 void* pv1 = (void*)0x1234; // NOLINT
3991 void* pv2 = (void*)0xABC0; // NOLINT
3992 wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1);
3993 wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2);
3994 EXPECT_EQ(p0, p0);
3995
3996 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
3997 "Value of: p2");
3998 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
3999 "p2");
4000 void* pv3 = (void*)0x1234; // NOLINT
4001 void* pv4 = (void*)0xABC0; // NOLINT
4002 const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3);
4003 const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4);
4004 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4),
4005 "p4");
4006 }
4007
4008 // Tests using other types of pointers in {EXPECT|ASSERT}_EQ.
TEST(EqAssertionTest,OtherPointer)4009 TEST(EqAssertionTest, OtherPointer) {
4010 ASSERT_EQ(static_cast<const int*>(NULL),
4011 static_cast<const int*>(NULL));
4012 EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL),
4013 reinterpret_cast<const int*>(0x1234)),
4014 "0x1234");
4015 }
4016
4017 // Tests the FRIEND_TEST macro.
4018
4019 // This class has a private member we want to test. We will test it
4020 // both in a TEST and in a TEST_F.
4021 class Foo {
4022 public:
Foo()4023 Foo() {}
4024
4025 private:
Bar() const4026 int Bar() const { return 1; }
4027
4028 // Declares the friend tests that can access the private member
4029 // Bar().
4030 FRIEND_TEST(FRIEND_TEST_Test, TEST);
4031 FRIEND_TEST(FRIEND_TEST_Test2, TEST_F);
4032 };
4033
4034 // Tests that the FRIEND_TEST declaration allows a TEST to access a
4035 // class's private members. This should compile.
TEST(FRIEND_TEST_Test,TEST)4036 TEST(FRIEND_TEST_Test, TEST) {
4037 ASSERT_EQ(1, Foo().Bar());
4038 }
4039
4040 // The fixture needed to test using FRIEND_TEST with TEST_F.
4041 class FRIEND_TEST_Test2 : public Test {
4042 protected:
4043 Foo foo;
4044 };
4045
4046 // Tests that the FRIEND_TEST declaration allows a TEST_F to access a
4047 // class's private members. This should compile.
TEST_F(FRIEND_TEST_Test2,TEST_F)4048 TEST_F(FRIEND_TEST_Test2, TEST_F) {
4049 ASSERT_EQ(1, foo.Bar());
4050 }
4051
4052 // Tests the life cycle of Test objects.
4053
4054 // The test fixture for testing the life cycle of Test objects.
4055 //
4056 // This class counts the number of live test objects that uses this
4057 // fixture.
4058 class TestLifeCycleTest : public Test {
4059 protected:
4060 // Constructor. Increments the number of test objects that uses
4061 // this fixture.
TestLifeCycleTest()4062 TestLifeCycleTest() { count_++; }
4063
4064 // Destructor. Decrements the number of test objects that uses this
4065 // fixture.
~TestLifeCycleTest()4066 ~TestLifeCycleTest() { count_--; }
4067
4068 // Returns the number of live test objects that uses this fixture.
count() const4069 int count() const { return count_; }
4070
4071 private:
4072 static int count_;
4073 };
4074
4075 int TestLifeCycleTest::count_ = 0;
4076
4077 // Tests the life cycle of test objects.
TEST_F(TestLifeCycleTest,Test1)4078 TEST_F(TestLifeCycleTest, Test1) {
4079 // There should be only one test object in this test case that's
4080 // currently alive.
4081 ASSERT_EQ(1, count());
4082 }
4083
4084 // Tests the life cycle of test objects.
TEST_F(TestLifeCycleTest,Test2)4085 TEST_F(TestLifeCycleTest, Test2) {
4086 // After Test1 is done and Test2 is started, there should still be
4087 // only one live test object, as the object for Test1 should've been
4088 // deleted.
4089 ASSERT_EQ(1, count());
4090 }
4091
4092 } // namespace
4093
4094 // Tests streaming a user type whose definition and operator << are
4095 // both in the global namespace.
4096 class Base {
4097 public:
Base(int x)4098 explicit Base(int x) : x_(x) {}
x() const4099 int x() const { return x_; }
4100 private:
4101 int x_;
4102 };
operator <<(std::ostream & os,const Base & val)4103 std::ostream& operator<<(std::ostream& os,
4104 const Base& val) {
4105 return os << val.x();
4106 }
operator <<(std::ostream & os,const Base * pointer)4107 std::ostream& operator<<(std::ostream& os,
4108 const Base* pointer) {
4109 return os << "(" << pointer->x() << ")";
4110 }
4111
TEST(MessageTest,CanStreamUserTypeInGlobalNameSpace)4112 TEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) {
4113 Message msg;
4114 Base a(1);
4115
4116 msg << a << &a; // Uses ::operator<<.
4117 EXPECT_STREQ("1(1)", msg.GetString().c_str());
4118 }
4119
4120 // Tests streaming a user type whose definition and operator<< are
4121 // both in an unnamed namespace.
4122 namespace {
4123 class MyTypeInUnnamedNameSpace : public Base {
4124 public:
MyTypeInUnnamedNameSpace(int x)4125 explicit MyTypeInUnnamedNameSpace(int x): Base(x) {}
4126 };
operator <<(std::ostream & os,const MyTypeInUnnamedNameSpace & val)4127 std::ostream& operator<<(std::ostream& os,
4128 const MyTypeInUnnamedNameSpace& val) {
4129 return os << val.x();
4130 }
operator <<(std::ostream & os,const MyTypeInUnnamedNameSpace * pointer)4131 std::ostream& operator<<(std::ostream& os,
4132 const MyTypeInUnnamedNameSpace* pointer) {
4133 return os << "(" << pointer->x() << ")";
4134 }
4135 } // namespace
4136
TEST(MessageTest,CanStreamUserTypeInUnnamedNameSpace)4137 TEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) {
4138 Message msg;
4139 MyTypeInUnnamedNameSpace a(1);
4140
4141 msg << a << &a; // Uses <unnamed_namespace>::operator<<.
4142 EXPECT_STREQ("1(1)", msg.GetString().c_str());
4143 }
4144
4145 // Tests streaming a user type whose definition and operator<< are
4146 // both in a user namespace.
4147 namespace namespace1 {
4148 class MyTypeInNameSpace1 : public Base {
4149 public:
MyTypeInNameSpace1(int x)4150 explicit MyTypeInNameSpace1(int x): Base(x) {}
4151 };
operator <<(std::ostream & os,const MyTypeInNameSpace1 & val)4152 std::ostream& operator<<(std::ostream& os,
4153 const MyTypeInNameSpace1& val) {
4154 return os << val.x();
4155 }
operator <<(std::ostream & os,const MyTypeInNameSpace1 * pointer)4156 std::ostream& operator<<(std::ostream& os,
4157 const MyTypeInNameSpace1* pointer) {
4158 return os << "(" << pointer->x() << ")";
4159 }
4160 } // namespace namespace1
4161
TEST(MessageTest,CanStreamUserTypeInUserNameSpace)4162 TEST(MessageTest, CanStreamUserTypeInUserNameSpace) {
4163 Message msg;
4164 namespace1::MyTypeInNameSpace1 a(1);
4165
4166 msg << a << &a; // Uses namespace1::operator<<.
4167 EXPECT_STREQ("1(1)", msg.GetString().c_str());
4168 }
4169
4170 // Tests streaming a user type whose definition is in a user namespace
4171 // but whose operator<< is in the global namespace.
4172 namespace namespace2 {
4173 class MyTypeInNameSpace2 : public ::Base {
4174 public:
MyTypeInNameSpace2(int x)4175 explicit MyTypeInNameSpace2(int x): Base(x) {}
4176 };
4177 } // namespace namespace2
operator <<(std::ostream & os,const namespace2::MyTypeInNameSpace2 & val)4178 std::ostream& operator<<(std::ostream& os,
4179 const namespace2::MyTypeInNameSpace2& val) {
4180 return os << val.x();
4181 }
operator <<(std::ostream & os,const namespace2::MyTypeInNameSpace2 * pointer)4182 std::ostream& operator<<(std::ostream& os,
4183 const namespace2::MyTypeInNameSpace2* pointer) {
4184 return os << "(" << pointer->x() << ")";
4185 }
4186
TEST(MessageTest,CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal)4187 TEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) {
4188 Message msg;
4189 namespace2::MyTypeInNameSpace2 a(1);
4190
4191 msg << a << &a; // Uses ::operator<<.
4192 EXPECT_STREQ("1(1)", msg.GetString().c_str());
4193 }
4194
4195 // Tests streaming NULL pointers to testing::Message.
TEST(MessageTest,NullPointers)4196 TEST(MessageTest, NullPointers) {
4197 Message msg;
4198 char* const p1 = NULL;
4199 unsigned char* const p2 = NULL;
4200 int* p3 = NULL;
4201 double* p4 = NULL;
4202 bool* p5 = NULL;
4203 Message* p6 = NULL;
4204
4205 msg << p1 << p2 << p3 << p4 << p5 << p6;
4206 ASSERT_STREQ("(null)(null)(null)(null)(null)(null)",
4207 msg.GetString().c_str());
4208 }
4209
4210 #if GTEST_HAS_STD_WSTRING
4211 // Tests streaming wide strings to testing::Message.
TEST(MessageTest,WideStrings)4212 TEST(MessageTest, WideStrings) {
4213 // Streams a NULL of type const wchar_t*.
4214 const wchar_t* const_wstr = NULL;
4215 EXPECT_STREQ("(null)",
4216 (Message() << const_wstr).GetString().c_str());
4217
4218 // Streams a NULL of type wchar_t*.
4219 wchar_t* wstr = NULL;
4220 EXPECT_STREQ("(null)",
4221 (Message() << wstr).GetString().c_str());
4222
4223 // Streams a non-NULL of type const wchar_t*.
4224 const_wstr = L"abc\x8119";
4225 EXPECT_STREQ("abc\xe8\x84\x99",
4226 (Message() << const_wstr).GetString().c_str());
4227
4228 // Streams a non-NULL of type wchar_t*.
4229 wstr = const_cast<wchar_t*>(const_wstr);
4230 EXPECT_STREQ("abc\xe8\x84\x99",
4231 (Message() << wstr).GetString().c_str());
4232 }
4233 #endif // GTEST_HAS_STD_WSTRING
4234
4235 // This line tests that we can define tests in the testing namespace.
4236 namespace testing {
4237
4238 // Tests the TestInfo class.
4239
4240 class TestInfoTest : public Test {
4241 protected:
GetTestInfo(const char * test_name)4242 static TestInfo * GetTestInfo(const char* test_name) {
4243 return UnitTest::GetInstance()->impl()->
4244 GetTestCase("TestInfoTest", "", NULL, NULL)->
4245 GetTestInfo(test_name);
4246 }
4247
GetTestResult(const TestInfo * test_info)4248 static const TestResult* GetTestResult(
4249 const TestInfo* test_info) {
4250 return test_info->result();
4251 }
4252 };
4253
4254 // Tests TestInfo::test_case_name() and TestInfo::name().
TEST_F(TestInfoTest,Names)4255 TEST_F(TestInfoTest, Names) {
4256 TestInfo * const test_info = GetTestInfo("Names");
4257
4258 ASSERT_STREQ("TestInfoTest", test_info->test_case_name());
4259 ASSERT_STREQ("Names", test_info->name());
4260 }
4261
4262 // Tests TestInfo::result().
TEST_F(TestInfoTest,result)4263 TEST_F(TestInfoTest, result) {
4264 TestInfo * const test_info = GetTestInfo("result");
4265
4266 // Initially, there is no TestPartResult for this test.
4267 ASSERT_EQ(0u, GetTestResult(test_info)->total_part_count());
4268
4269 // After the previous assertion, there is still none.
4270 ASSERT_EQ(0u, GetTestResult(test_info)->total_part_count());
4271 }
4272
4273 // Tests setting up and tearing down a test case.
4274
4275 class SetUpTestCaseTest : public Test {
4276 protected:
4277 // This will be called once before the first test in this test case
4278 // is run.
SetUpTestCase()4279 static void SetUpTestCase() {
4280 printf("Setting up the test case . . .\n");
4281
4282 // Initializes some shared resource. In this simple example, we
4283 // just create a C string. More complex stuff can be done if
4284 // desired.
4285 shared_resource_ = "123";
4286
4287 // Increments the number of test cases that have been set up.
4288 counter_++;
4289
4290 // SetUpTestCase() should be called only once.
4291 EXPECT_EQ(1, counter_);
4292 }
4293
4294 // This will be called once after the last test in this test case is
4295 // run.
TearDownTestCase()4296 static void TearDownTestCase() {
4297 printf("Tearing down the test case . . .\n");
4298
4299 // Decrements the number of test cases that have been set up.
4300 counter_--;
4301
4302 // TearDownTestCase() should be called only once.
4303 EXPECT_EQ(0, counter_);
4304
4305 // Cleans up the shared resource.
4306 shared_resource_ = NULL;
4307 }
4308
4309 // This will be called before each test in this test case.
SetUp()4310 virtual void SetUp() {
4311 // SetUpTestCase() should be called only once, so counter_ should
4312 // always be 1.
4313 EXPECT_EQ(1, counter_);
4314 }
4315
4316 // Number of test cases that have been set up.
4317 static int counter_;
4318
4319 // Some resource to be shared by all tests in this test case.
4320 static const char* shared_resource_;
4321 };
4322
4323 int SetUpTestCaseTest::counter_ = 0;
4324 const char* SetUpTestCaseTest::shared_resource_ = NULL;
4325
4326 // A test that uses the shared resource.
TEST_F(SetUpTestCaseTest,Test1)4327 TEST_F(SetUpTestCaseTest, Test1) {
4328 EXPECT_STRNE(NULL, shared_resource_);
4329 }
4330
4331 // Another test that uses the shared resource.
TEST_F(SetUpTestCaseTest,Test2)4332 TEST_F(SetUpTestCaseTest, Test2) {
4333 EXPECT_STREQ("123", shared_resource_);
4334 }
4335
4336 // The InitGoogleTestTest test case tests testing::InitGoogleTest().
4337
4338 // The Flags struct stores a copy of all Google Test flags.
4339 struct Flags {
4340 // Constructs a Flags struct where each flag has its default value.
Flagstesting::Flags4341 Flags() : also_run_disabled_tests(false),
4342 break_on_failure(false),
4343 catch_exceptions(false),
4344 death_test_use_fork(false),
4345 filter(""),
4346 list_tests(false),
4347 output(""),
4348 print_time(false),
4349 repeat(1),
4350 throw_on_failure(false) {}
4351
4352 // Factory methods.
4353
4354 // Creates a Flags struct where the gtest_also_run_disabled_tests flag has
4355 // the given value.
AlsoRunDisabledTeststesting::Flags4356 static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) {
4357 Flags flags;
4358 flags.also_run_disabled_tests = also_run_disabled_tests;
4359 return flags;
4360 }
4361
4362 // Creates a Flags struct where the gtest_break_on_failure flag has
4363 // the given value.
BreakOnFailuretesting::Flags4364 static Flags BreakOnFailure(bool break_on_failure) {
4365 Flags flags;
4366 flags.break_on_failure = break_on_failure;
4367 return flags;
4368 }
4369
4370 // Creates a Flags struct where the gtest_catch_exceptions flag has
4371 // the given value.
CatchExceptionstesting::Flags4372 static Flags CatchExceptions(bool catch_exceptions) {
4373 Flags flags;
4374 flags.catch_exceptions = catch_exceptions;
4375 return flags;
4376 }
4377
4378 // Creates a Flags struct where the gtest_death_test_use_fork flag has
4379 // the given value.
DeathTestUseForktesting::Flags4380 static Flags DeathTestUseFork(bool death_test_use_fork) {
4381 Flags flags;
4382 flags.death_test_use_fork = death_test_use_fork;
4383 return flags;
4384 }
4385
4386 // Creates a Flags struct where the gtest_filter flag has the given
4387 // value.
Filtertesting::Flags4388 static Flags Filter(const char* filter) {
4389 Flags flags;
4390 flags.filter = filter;
4391 return flags;
4392 }
4393
4394 // Creates a Flags struct where the gtest_list_tests flag has the
4395 // given value.
ListTeststesting::Flags4396 static Flags ListTests(bool list_tests) {
4397 Flags flags;
4398 flags.list_tests = list_tests;
4399 return flags;
4400 }
4401
4402 // Creates a Flags struct where the gtest_output flag has the given
4403 // value.
Outputtesting::Flags4404 static Flags Output(const char* output) {
4405 Flags flags;
4406 flags.output = output;
4407 return flags;
4408 }
4409
4410 // Creates a Flags struct where the gtest_print_time flag has the given
4411 // value.
PrintTimetesting::Flags4412 static Flags PrintTime(bool print_time) {
4413 Flags flags;
4414 flags.print_time = print_time;
4415 return flags;
4416 }
4417
4418 // Creates a Flags struct where the gtest_repeat flag has the given
4419 // value.
Repeattesting::Flags4420 static Flags Repeat(Int32 repeat) {
4421 Flags flags;
4422 flags.repeat = repeat;
4423 return flags;
4424 }
4425
4426 // Creates a Flags struct where the gtest_throw_on_failure flag has
4427 // the given value.
ThrowOnFailuretesting::Flags4428 static Flags ThrowOnFailure(bool throw_on_failure) {
4429 Flags flags;
4430 flags.throw_on_failure = throw_on_failure;
4431 return flags;
4432 }
4433
4434 // These fields store the flag values.
4435 bool also_run_disabled_tests;
4436 bool break_on_failure;
4437 bool catch_exceptions;
4438 bool death_test_use_fork;
4439 const char* filter;
4440 bool list_tests;
4441 const char* output;
4442 bool print_time;
4443 Int32 repeat;
4444 bool throw_on_failure;
4445 };
4446
4447 // Fixture for testing InitGoogleTest().
4448 class InitGoogleTestTest : public Test {
4449 protected:
4450 // Clears the flags before each test.
SetUp()4451 virtual void SetUp() {
4452 GTEST_FLAG(also_run_disabled_tests) = false;
4453 GTEST_FLAG(break_on_failure) = false;
4454 GTEST_FLAG(catch_exceptions) = false;
4455 GTEST_FLAG(death_test_use_fork) = false;
4456 GTEST_FLAG(filter) = "";
4457 GTEST_FLAG(list_tests) = false;
4458 GTEST_FLAG(output) = "";
4459 GTEST_FLAG(print_time) = false;
4460 GTEST_FLAG(repeat) = 1;
4461 GTEST_FLAG(throw_on_failure) = false;
4462 }
4463
4464 // Asserts that two narrow or wide string arrays are equal.
4465 template <typename CharType>
AssertStringArrayEq(size_t size1,CharType ** array1,size_t size2,CharType ** array2)4466 static void AssertStringArrayEq(size_t size1, CharType** array1,
4467 size_t size2, CharType** array2) {
4468 ASSERT_EQ(size1, size2) << " Array sizes different.";
4469
4470 for (size_t i = 0; i != size1; i++) {
4471 ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i;
4472 }
4473 }
4474
4475 // Verifies that the flag values match the expected values.
CheckFlags(const Flags & expected)4476 static void CheckFlags(const Flags& expected) {
4477 EXPECT_EQ(expected.also_run_disabled_tests,
4478 GTEST_FLAG(also_run_disabled_tests));
4479 EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure));
4480 EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions));
4481 EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork));
4482 EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str());
4483 EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests));
4484 EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str());
4485 EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time));
4486 EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat));
4487 EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure));
4488 }
4489
4490 // Parses a command line (specified by argc1 and argv1), then
4491 // verifies that the flag values are expected and that the
4492 // recognized flags are removed from the command line.
4493 template <typename CharType>
TestParsingFlags(int argc1,const CharType ** argv1,int argc2,const CharType ** argv2,const Flags & expected)4494 static void TestParsingFlags(int argc1, const CharType** argv1,
4495 int argc2, const CharType** argv2,
4496 const Flags& expected) {
4497 // Parses the command line.
4498 internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1));
4499
4500 // Verifies the flag values.
4501 CheckFlags(expected);
4502
4503 // Verifies that the recognized flags are removed from the command
4504 // line.
4505 AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2);
4506 }
4507
4508 // This macro wraps TestParsingFlags s.t. the user doesn't need
4509 // to specify the array sizes.
4510 #define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected) \
4511 TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \
4512 sizeof(argv2)/sizeof(*argv2) - 1, argv2, expected)
4513 };
4514
4515 // Tests parsing an empty command line.
TEST_F(InitGoogleTestTest,Empty)4516 TEST_F(InitGoogleTestTest, Empty) {
4517 const char* argv[] = {
4518 NULL
4519 };
4520
4521 const char* argv2[] = {
4522 NULL
4523 };
4524
4525 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags());
4526 }
4527
4528 // Tests parsing a command line that has no flag.
TEST_F(InitGoogleTestTest,NoFlag)4529 TEST_F(InitGoogleTestTest, NoFlag) {
4530 const char* argv[] = {
4531 "foo.exe",
4532 NULL
4533 };
4534
4535 const char* argv2[] = {
4536 "foo.exe",
4537 NULL
4538 };
4539
4540 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags());
4541 }
4542
4543 // Tests parsing a bad --gtest_filter flag.
TEST_F(InitGoogleTestTest,FilterBad)4544 TEST_F(InitGoogleTestTest, FilterBad) {
4545 const char* argv[] = {
4546 "foo.exe",
4547 "--gtest_filter",
4548 NULL
4549 };
4550
4551 const char* argv2[] = {
4552 "foo.exe",
4553 "--gtest_filter",
4554 NULL
4555 };
4556
4557 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""));
4558 }
4559
4560 // Tests parsing an empty --gtest_filter flag.
TEST_F(InitGoogleTestTest,FilterEmpty)4561 TEST_F(InitGoogleTestTest, FilterEmpty) {
4562 const char* argv[] = {
4563 "foo.exe",
4564 "--gtest_filter=",
4565 NULL
4566 };
4567
4568 const char* argv2[] = {
4569 "foo.exe",
4570 NULL
4571 };
4572
4573 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""));
4574 }
4575
4576 // Tests parsing a non-empty --gtest_filter flag.
TEST_F(InitGoogleTestTest,FilterNonEmpty)4577 TEST_F(InitGoogleTestTest, FilterNonEmpty) {
4578 const char* argv[] = {
4579 "foo.exe",
4580 "--gtest_filter=abc",
4581 NULL
4582 };
4583
4584 const char* argv2[] = {
4585 "foo.exe",
4586 NULL
4587 };
4588
4589 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"));
4590 }
4591
4592 // Tests parsing --gtest_break_on_failure.
TEST_F(InitGoogleTestTest,BreakOnFailureNoDef)4593 TEST_F(InitGoogleTestTest, BreakOnFailureNoDef) {
4594 const char* argv[] = {
4595 "foo.exe",
4596 "--gtest_break_on_failure",
4597 NULL
4598 };
4599
4600 const char* argv2[] = {
4601 "foo.exe",
4602 NULL
4603 };
4604
4605 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true));
4606 }
4607
4608 // Tests parsing --gtest_break_on_failure=0.
TEST_F(InitGoogleTestTest,BreakOnFailureFalse_0)4609 TEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) {
4610 const char* argv[] = {
4611 "foo.exe",
4612 "--gtest_break_on_failure=0",
4613 NULL
4614 };
4615
4616 const char* argv2[] = {
4617 "foo.exe",
4618 NULL
4619 };
4620
4621 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false));
4622 }
4623
4624 // Tests parsing --gtest_break_on_failure=f.
TEST_F(InitGoogleTestTest,BreakOnFailureFalse_f)4625 TEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) {
4626 const char* argv[] = {
4627 "foo.exe",
4628 "--gtest_break_on_failure=f",
4629 NULL
4630 };
4631
4632 const char* argv2[] = {
4633 "foo.exe",
4634 NULL
4635 };
4636
4637 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false));
4638 }
4639
4640 // Tests parsing --gtest_break_on_failure=F.
TEST_F(InitGoogleTestTest,BreakOnFailureFalse_F)4641 TEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) {
4642 const char* argv[] = {
4643 "foo.exe",
4644 "--gtest_break_on_failure=F",
4645 NULL
4646 };
4647
4648 const char* argv2[] = {
4649 "foo.exe",
4650 NULL
4651 };
4652
4653 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false));
4654 }
4655
4656 // Tests parsing a --gtest_break_on_failure flag that has a "true"
4657 // definition.
TEST_F(InitGoogleTestTest,BreakOnFailureTrue)4658 TEST_F(InitGoogleTestTest, BreakOnFailureTrue) {
4659 const char* argv[] = {
4660 "foo.exe",
4661 "--gtest_break_on_failure=1",
4662 NULL
4663 };
4664
4665 const char* argv2[] = {
4666 "foo.exe",
4667 NULL
4668 };
4669
4670 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true));
4671 }
4672
4673 // Tests parsing --gtest_catch_exceptions.
TEST_F(InitGoogleTestTest,CatchExceptions)4674 TEST_F(InitGoogleTestTest, CatchExceptions) {
4675 const char* argv[] = {
4676 "foo.exe",
4677 "--gtest_catch_exceptions",
4678 NULL
4679 };
4680
4681 const char* argv2[] = {
4682 "foo.exe",
4683 NULL
4684 };
4685
4686 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true));
4687 }
4688
4689 // Tests parsing --gtest_death_test_use_fork.
TEST_F(InitGoogleTestTest,DeathTestUseFork)4690 TEST_F(InitGoogleTestTest, DeathTestUseFork) {
4691 const char* argv[] = {
4692 "foo.exe",
4693 "--gtest_death_test_use_fork",
4694 NULL
4695 };
4696
4697 const char* argv2[] = {
4698 "foo.exe",
4699 NULL
4700 };
4701
4702 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true));
4703 }
4704
4705 // Tests having the same flag twice with different values. The
4706 // expected behavior is that the one coming last takes precedence.
TEST_F(InitGoogleTestTest,DuplicatedFlags)4707 TEST_F(InitGoogleTestTest, DuplicatedFlags) {
4708 const char* argv[] = {
4709 "foo.exe",
4710 "--gtest_filter=a",
4711 "--gtest_filter=b",
4712 NULL
4713 };
4714
4715 const char* argv2[] = {
4716 "foo.exe",
4717 NULL
4718 };
4719
4720 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"));
4721 }
4722
4723 // Tests having an unrecognized flag on the command line.
TEST_F(InitGoogleTestTest,UnrecognizedFlag)4724 TEST_F(InitGoogleTestTest, UnrecognizedFlag) {
4725 const char* argv[] = {
4726 "foo.exe",
4727 "--gtest_break_on_failure",
4728 "bar", // Unrecognized by Google Test.
4729 "--gtest_filter=b",
4730 NULL
4731 };
4732
4733 const char* argv2[] = {
4734 "foo.exe",
4735 "bar",
4736 NULL
4737 };
4738
4739 Flags flags;
4740 flags.break_on_failure = true;
4741 flags.filter = "b";
4742 GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags);
4743 }
4744
4745 // Tests having a --gtest_list_tests flag
TEST_F(InitGoogleTestTest,ListTestsFlag)4746 TEST_F(InitGoogleTestTest, ListTestsFlag) {
4747 const char* argv[] = {
4748 "foo.exe",
4749 "--gtest_list_tests",
4750 NULL
4751 };
4752
4753 const char* argv2[] = {
4754 "foo.exe",
4755 NULL
4756 };
4757
4758 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true));
4759 }
4760
4761 // Tests having a --gtest_list_tests flag with a "true" value
TEST_F(InitGoogleTestTest,ListTestsTrue)4762 TEST_F(InitGoogleTestTest, ListTestsTrue) {
4763 const char* argv[] = {
4764 "foo.exe",
4765 "--gtest_list_tests=1",
4766 NULL
4767 };
4768
4769 const char* argv2[] = {
4770 "foo.exe",
4771 NULL
4772 };
4773
4774 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true));
4775 }
4776
4777 // Tests having a --gtest_list_tests flag with a "false" value
TEST_F(InitGoogleTestTest,ListTestsFalse)4778 TEST_F(InitGoogleTestTest, ListTestsFalse) {
4779 const char* argv[] = {
4780 "foo.exe",
4781 "--gtest_list_tests=0",
4782 NULL
4783 };
4784
4785 const char* argv2[] = {
4786 "foo.exe",
4787 NULL
4788 };
4789
4790 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false));
4791 }
4792
4793 // Tests parsing --gtest_list_tests=f.
TEST_F(InitGoogleTestTest,ListTestsFalse_f)4794 TEST_F(InitGoogleTestTest, ListTestsFalse_f) {
4795 const char* argv[] = {
4796 "foo.exe",
4797 "--gtest_list_tests=f",
4798 NULL
4799 };
4800
4801 const char* argv2[] = {
4802 "foo.exe",
4803 NULL
4804 };
4805
4806 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false));
4807 }
4808
4809 // Tests parsing --gtest_break_on_failure=F.
TEST_F(InitGoogleTestTest,ListTestsFalse_F)4810 TEST_F(InitGoogleTestTest, ListTestsFalse_F) {
4811 const char* argv[] = {
4812 "foo.exe",
4813 "--gtest_list_tests=F",
4814 NULL
4815 };
4816
4817 const char* argv2[] = {
4818 "foo.exe",
4819 NULL
4820 };
4821
4822 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false));
4823 }
4824
4825 // Tests parsing --gtest_output (invalid).
TEST_F(InitGoogleTestTest,OutputEmpty)4826 TEST_F(InitGoogleTestTest, OutputEmpty) {
4827 const char* argv[] = {
4828 "foo.exe",
4829 "--gtest_output",
4830 NULL
4831 };
4832
4833 const char* argv2[] = {
4834 "foo.exe",
4835 "--gtest_output",
4836 NULL
4837 };
4838
4839 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags());
4840 }
4841
4842 // Tests parsing --gtest_output=xml
TEST_F(InitGoogleTestTest,OutputXml)4843 TEST_F(InitGoogleTestTest, OutputXml) {
4844 const char* argv[] = {
4845 "foo.exe",
4846 "--gtest_output=xml",
4847 NULL
4848 };
4849
4850 const char* argv2[] = {
4851 "foo.exe",
4852 NULL
4853 };
4854
4855 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"));
4856 }
4857
4858 // Tests parsing --gtest_output=xml:file
TEST_F(InitGoogleTestTest,OutputXmlFile)4859 TEST_F(InitGoogleTestTest, OutputXmlFile) {
4860 const char* argv[] = {
4861 "foo.exe",
4862 "--gtest_output=xml:file",
4863 NULL
4864 };
4865
4866 const char* argv2[] = {
4867 "foo.exe",
4868 NULL
4869 };
4870
4871 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"));
4872 }
4873
4874 // Tests parsing --gtest_output=xml:directory/path/
TEST_F(InitGoogleTestTest,OutputXmlDirectory)4875 TEST_F(InitGoogleTestTest, OutputXmlDirectory) {
4876 const char* argv[] = {
4877 "foo.exe",
4878 "--gtest_output=xml:directory/path/",
4879 NULL
4880 };
4881
4882 const char* argv2[] = {
4883 "foo.exe",
4884 NULL
4885 };
4886
4887 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:directory/path/"));
4888 }
4889
4890 // Tests having a --gtest_print_time flag
TEST_F(InitGoogleTestTest,PrintTimeFlag)4891 TEST_F(InitGoogleTestTest, PrintTimeFlag) {
4892 const char* argv[] = {
4893 "foo.exe",
4894 "--gtest_print_time",
4895 NULL
4896 };
4897
4898 const char* argv2[] = {
4899 "foo.exe",
4900 NULL
4901 };
4902
4903 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true));
4904 }
4905
4906 // Tests having a --gtest_print_time flag with a "true" value
TEST_F(InitGoogleTestTest,PrintTimeTrue)4907 TEST_F(InitGoogleTestTest, PrintTimeTrue) {
4908 const char* argv[] = {
4909 "foo.exe",
4910 "--gtest_print_time=1",
4911 NULL
4912 };
4913
4914 const char* argv2[] = {
4915 "foo.exe",
4916 NULL
4917 };
4918
4919 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true));
4920 }
4921
4922 // Tests having a --gtest_print_time flag with a "false" value
TEST_F(InitGoogleTestTest,PrintTimeFalse)4923 TEST_F(InitGoogleTestTest, PrintTimeFalse) {
4924 const char* argv[] = {
4925 "foo.exe",
4926 "--gtest_print_time=0",
4927 NULL
4928 };
4929
4930 const char* argv2[] = {
4931 "foo.exe",
4932 NULL
4933 };
4934
4935 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false));
4936 }
4937
4938 // Tests parsing --gtest_print_time=f.
TEST_F(InitGoogleTestTest,PrintTimeFalse_f)4939 TEST_F(InitGoogleTestTest, PrintTimeFalse_f) {
4940 const char* argv[] = {
4941 "foo.exe",
4942 "--gtest_print_time=f",
4943 NULL
4944 };
4945
4946 const char* argv2[] = {
4947 "foo.exe",
4948 NULL
4949 };
4950
4951 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false));
4952 }
4953
4954 // Tests parsing --gtest_print_time=F.
TEST_F(InitGoogleTestTest,PrintTimeFalse_F)4955 TEST_F(InitGoogleTestTest, PrintTimeFalse_F) {
4956 const char* argv[] = {
4957 "foo.exe",
4958 "--gtest_print_time=F",
4959 NULL
4960 };
4961
4962 const char* argv2[] = {
4963 "foo.exe",
4964 NULL
4965 };
4966
4967 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false));
4968 }
4969
4970 // Tests parsing --gtest_repeat=number
TEST_F(InitGoogleTestTest,Repeat)4971 TEST_F(InitGoogleTestTest, Repeat) {
4972 const char* argv[] = {
4973 "foo.exe",
4974 "--gtest_repeat=1000",
4975 NULL
4976 };
4977
4978 const char* argv2[] = {
4979 "foo.exe",
4980 NULL
4981 };
4982
4983 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000));
4984 }
4985
4986 // Tests having a --gtest_also_run_disabled_tests flag
TEST_F(InitGoogleTestTest,AlsoRunDisabledTestsFlag)4987 TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) {
4988 const char* argv[] = {
4989 "foo.exe",
4990 "--gtest_also_run_disabled_tests",
4991 NULL
4992 };
4993
4994 const char* argv2[] = {
4995 "foo.exe",
4996 NULL
4997 };
4998
4999 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(true));
5000 }
5001
5002 // Tests having a --gtest_also_run_disabled_tests flag with a "true" value
TEST_F(InitGoogleTestTest,AlsoRunDisabledTestsTrue)5003 TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) {
5004 const char* argv[] = {
5005 "foo.exe",
5006 "--gtest_also_run_disabled_tests=1",
5007 NULL
5008 };
5009
5010 const char* argv2[] = {
5011 "foo.exe",
5012 NULL
5013 };
5014
5015 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(true));
5016 }
5017
5018 // Tests having a --gtest_also_run_disabled_tests flag with a "false" value
TEST_F(InitGoogleTestTest,AlsoRunDisabledTestsFalse)5019 TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) {
5020 const char* argv[] = {
5021 "foo.exe",
5022 "--gtest_also_run_disabled_tests=0",
5023 NULL
5024 };
5025
5026 const char* argv2[] = {
5027 "foo.exe",
5028 NULL
5029 };
5030
5031 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::AlsoRunDisabledTests(false));
5032 }
5033
5034
5035 // Tests parsing --gtest_throw_on_failure.
TEST_F(InitGoogleTestTest,ThrowOnFailureNoDef)5036 TEST_F(InitGoogleTestTest, ThrowOnFailureNoDef) {
5037 const char* argv[] = {
5038 "foo.exe",
5039 "--gtest_throw_on_failure",
5040 NULL
5041 };
5042
5043 const char* argv2[] = {
5044 "foo.exe",
5045 NULL
5046 };
5047
5048 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true));
5049 }
5050
5051 // Tests parsing --gtest_throw_on_failure=0.
TEST_F(InitGoogleTestTest,ThrowOnFailureFalse_0)5052 TEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) {
5053 const char* argv[] = {
5054 "foo.exe",
5055 "--gtest_throw_on_failure=0",
5056 NULL
5057 };
5058
5059 const char* argv2[] = {
5060 "foo.exe",
5061 NULL
5062 };
5063
5064 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false));
5065 }
5066
5067 // Tests parsing a --gtest_throw_on_failure flag that has a "true"
5068 // definition.
TEST_F(InitGoogleTestTest,ThrowOnFailureTrue)5069 TEST_F(InitGoogleTestTest, ThrowOnFailureTrue) {
5070 const char* argv[] = {
5071 "foo.exe",
5072 "--gtest_throw_on_failure=1",
5073 NULL
5074 };
5075
5076 const char* argv2[] = {
5077 "foo.exe",
5078 NULL
5079 };
5080
5081 GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true));
5082 }
5083
5084 #if GTEST_OS_WINDOWS
5085 // Tests parsing wide strings.
TEST_F(InitGoogleTestTest,WideStrings)5086 TEST_F(InitGoogleTestTest, WideStrings) {
5087 const wchar_t* argv[] = {
5088 L"foo.exe",
5089 L"--gtest_filter=Foo*",
5090 L"--gtest_list_tests=1",
5091 L"--gtest_break_on_failure",
5092 L"--non_gtest_flag",
5093 NULL
5094 };
5095
5096 const wchar_t* argv2[] = {
5097 L"foo.exe",
5098 L"--non_gtest_flag",
5099 NULL
5100 };
5101
5102 Flags expected_flags;
5103 expected_flags.break_on_failure = true;
5104 expected_flags.filter = "Foo*";
5105 expected_flags.list_tests = true;
5106
5107 GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags);
5108 }
5109 #endif // GTEST_OS_WINDOWS
5110
5111 // Tests current_test_info() in UnitTest.
5112 class CurrentTestInfoTest : public Test {
5113 protected:
5114 // Tests that current_test_info() returns NULL before the first test in
5115 // the test case is run.
SetUpTestCase()5116 static void SetUpTestCase() {
5117 // There should be no tests running at this point.
5118 const TestInfo* test_info =
5119 UnitTest::GetInstance()->current_test_info();
5120 EXPECT_EQ(NULL, test_info)
5121 << "There should be no tests running at this point.";
5122 }
5123
5124 // Tests that current_test_info() returns NULL after the last test in
5125 // the test case has run.
TearDownTestCase()5126 static void TearDownTestCase() {
5127 const TestInfo* test_info =
5128 UnitTest::GetInstance()->current_test_info();
5129 EXPECT_EQ(NULL, test_info)
5130 << "There should be no tests running at this point.";
5131 }
5132 };
5133
5134 // Tests that current_test_info() returns TestInfo for currently running
5135 // test by checking the expected test name against the actual one.
TEST_F(CurrentTestInfoTest,WorksForFirstTestInATestCase)5136 TEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) {
5137 const TestInfo* test_info =
5138 UnitTest::GetInstance()->current_test_info();
5139 ASSERT_TRUE(NULL != test_info)
5140 << "There is a test running so we should have a valid TestInfo.";
5141 EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
5142 << "Expected the name of the currently running test case.";
5143 EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name())
5144 << "Expected the name of the currently running test.";
5145 }
5146
5147 // Tests that current_test_info() returns TestInfo for currently running
5148 // test by checking the expected test name against the actual one. We
5149 // use this test to see that the TestInfo object actually changed from
5150 // the previous invocation.
TEST_F(CurrentTestInfoTest,WorksForSecondTestInATestCase)5151 TEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) {
5152 const TestInfo* test_info =
5153 UnitTest::GetInstance()->current_test_info();
5154 ASSERT_TRUE(NULL != test_info)
5155 << "There is a test running so we should have a valid TestInfo.";
5156 EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
5157 << "Expected the name of the currently running test case.";
5158 EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name())
5159 << "Expected the name of the currently running test.";
5160 }
5161
5162 } // namespace testing
5163
5164 // These two lines test that we can define tests in a namespace that
5165 // has the name "testing" and is nested in another namespace.
5166 namespace my_namespace {
5167 namespace testing {
5168
5169 // Makes sure that TEST knows to use ::testing::Test instead of
5170 // ::my_namespace::testing::Test.
5171 class Test {};
5172
5173 // Makes sure that an assertion knows to use ::testing::Message instead of
5174 // ::my_namespace::testing::Message.
5175 class Message {};
5176
5177 // Makes sure that an assertion knows to use
5178 // ::testing::AssertionResult instead of
5179 // ::my_namespace::testing::AssertionResult.
5180 class AssertionResult {};
5181
5182 // Tests that an assertion that should succeed works as expected.
TEST(NestedTestingNamespaceTest,Success)5183 TEST(NestedTestingNamespaceTest, Success) {
5184 EXPECT_EQ(1, 1) << "This shouldn't fail.";
5185 }
5186
5187 // Tests that an assertion that should fail works as expected.
TEST(NestedTestingNamespaceTest,Failure)5188 TEST(NestedTestingNamespaceTest, Failure) {
5189 EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.",
5190 "This failure is expected.");
5191 }
5192
5193 } // namespace testing
5194 } // namespace my_namespace
5195
5196 // Tests that one can call superclass SetUp and TearDown methods--
5197 // that is, that they are not private.
5198 // No tests are based on this fixture; the test "passes" if it compiles
5199 // successfully.
5200 class ProtectedFixtureMethodsTest : public Test {
5201 protected:
SetUp()5202 virtual void SetUp() {
5203 Test::SetUp();
5204 }
TearDown()5205 virtual void TearDown() {
5206 Test::TearDown();
5207 }
5208 };
5209
5210 // StreamingAssertionsTest tests the streaming versions of a representative
5211 // sample of assertions.
TEST(StreamingAssertionsTest,Unconditional)5212 TEST(StreamingAssertionsTest, Unconditional) {
5213 SUCCEED() << "expected success";
5214 EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure",
5215 "expected failure");
5216 EXPECT_FATAL_FAILURE(FAIL() << "expected failure",
5217 "expected failure");
5218 }
5219
TEST(StreamingAssertionsTest,Truth)5220 TEST(StreamingAssertionsTest, Truth) {
5221 EXPECT_TRUE(true) << "unexpected failure";
5222 ASSERT_TRUE(true) << "unexpected failure";
5223 EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure",
5224 "expected failure");
5225 EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure",
5226 "expected failure");
5227 }
5228
TEST(StreamingAssertionsTest,Truth2)5229 TEST(StreamingAssertionsTest, Truth2) {
5230 EXPECT_FALSE(false) << "unexpected failure";
5231 ASSERT_FALSE(false) << "unexpected failure";
5232 EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure",
5233 "expected failure");
5234 EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure",
5235 "expected failure");
5236 }
5237
TEST(StreamingAssertionsTest,IntegerEquals)5238 TEST(StreamingAssertionsTest, IntegerEquals) {
5239 EXPECT_EQ(1, 1) << "unexpected failure";
5240 ASSERT_EQ(1, 1) << "unexpected failure";
5241 EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure",
5242 "expected failure");
5243 EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure",
5244 "expected failure");
5245 }
5246
TEST(StreamingAssertionsTest,IntegerLessThan)5247 TEST(StreamingAssertionsTest, IntegerLessThan) {
5248 EXPECT_LT(1, 2) << "unexpected failure";
5249 ASSERT_LT(1, 2) << "unexpected failure";
5250 EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure",
5251 "expected failure");
5252 EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure",
5253 "expected failure");
5254 }
5255
TEST(StreamingAssertionsTest,StringsEqual)5256 TEST(StreamingAssertionsTest, StringsEqual) {
5257 EXPECT_STREQ("foo", "foo") << "unexpected failure";
5258 ASSERT_STREQ("foo", "foo") << "unexpected failure";
5259 EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure",
5260 "expected failure");
5261 EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure",
5262 "expected failure");
5263 }
5264
TEST(StreamingAssertionsTest,StringsNotEqual)5265 TEST(StreamingAssertionsTest, StringsNotEqual) {
5266 EXPECT_STRNE("foo", "bar") << "unexpected failure";
5267 ASSERT_STRNE("foo", "bar") << "unexpected failure";
5268 EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure",
5269 "expected failure");
5270 EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure",
5271 "expected failure");
5272 }
5273
TEST(StreamingAssertionsTest,StringsEqualIgnoringCase)5274 TEST(StreamingAssertionsTest, StringsEqualIgnoringCase) {
5275 EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure";
5276 ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure";
5277 EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure",
5278 "expected failure");
5279 EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure",
5280 "expected failure");
5281 }
5282
TEST(StreamingAssertionsTest,StringNotEqualIgnoringCase)5283 TEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) {
5284 EXPECT_STRCASENE("foo", "bar") << "unexpected failure";
5285 ASSERT_STRCASENE("foo", "bar") << "unexpected failure";
5286 EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure",
5287 "expected failure");
5288 EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure",
5289 "expected failure");
5290 }
5291
TEST(StreamingAssertionsTest,FloatingPointEquals)5292 TEST(StreamingAssertionsTest, FloatingPointEquals) {
5293 EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
5294 ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
5295 EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure",
5296 "expected failure");
5297 EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure",
5298 "expected failure");
5299 }
5300
5301 #if GTEST_HAS_EXCEPTIONS
5302
TEST(StreamingAssertionsTest,Throw)5303 TEST(StreamingAssertionsTest, Throw) {
5304 EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure";
5305 ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure";
5306 EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) <<
5307 "expected failure", "expected failure");
5308 EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) <<
5309 "expected failure", "expected failure");
5310 }
5311
TEST(StreamingAssertionsTest,NoThrow)5312 TEST(StreamingAssertionsTest, NoThrow) {
5313 EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure";
5314 ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure";
5315 EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) <<
5316 "expected failure", "expected failure");
5317 EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) <<
5318 "expected failure", "expected failure");
5319 }
5320
TEST(StreamingAssertionsTest,AnyThrow)5321 TEST(StreamingAssertionsTest, AnyThrow) {
5322 EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
5323 ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
5324 EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) <<
5325 "expected failure", "expected failure");
5326 EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) <<
5327 "expected failure", "expected failure");
5328 }
5329
5330 #endif // GTEST_HAS_EXCEPTIONS
5331
5332 // Tests that Google Test correctly decides whether to use colors in the output.
5333
TEST(ColoredOutputTest,UsesColorsWhenGTestColorFlagIsYes)5334 TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) {
5335 GTEST_FLAG(color) = "yes";
5336
5337 SetEnv("TERM", "xterm"); // TERM supports colors.
5338 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5339 EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY.
5340
5341 SetEnv("TERM", "dumb"); // TERM doesn't support colors.
5342 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5343 EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY.
5344 }
5345
TEST(ColoredOutputTest,UsesColorsWhenGTestColorFlagIsAliasOfYes)5346 TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) {
5347 SetEnv("TERM", "dumb"); // TERM doesn't support colors.
5348
5349 GTEST_FLAG(color) = "True";
5350 EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY.
5351
5352 GTEST_FLAG(color) = "t";
5353 EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY.
5354
5355 GTEST_FLAG(color) = "1";
5356 EXPECT_TRUE(ShouldUseColor(false)); // Stdout is not a TTY.
5357 }
5358
TEST(ColoredOutputTest,UsesNoColorWhenGTestColorFlagIsNo)5359 TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) {
5360 GTEST_FLAG(color) = "no";
5361
5362 SetEnv("TERM", "xterm"); // TERM supports colors.
5363 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5364 EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY.
5365
5366 SetEnv("TERM", "dumb"); // TERM doesn't support colors.
5367 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5368 EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY.
5369 }
5370
TEST(ColoredOutputTest,UsesNoColorWhenGTestColorFlagIsInvalid)5371 TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) {
5372 SetEnv("TERM", "xterm"); // TERM supports colors.
5373
5374 GTEST_FLAG(color) = "F";
5375 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5376
5377 GTEST_FLAG(color) = "0";
5378 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5379
5380 GTEST_FLAG(color) = "unknown";
5381 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5382 }
5383
TEST(ColoredOutputTest,UsesColorsWhenStdoutIsTty)5384 TEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) {
5385 GTEST_FLAG(color) = "auto";
5386
5387 SetEnv("TERM", "xterm"); // TERM supports colors.
5388 EXPECT_FALSE(ShouldUseColor(false)); // Stdout is not a TTY.
5389 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5390 }
5391
TEST(ColoredOutputTest,UsesColorsWhenTermSupportsColors)5392 TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) {
5393 GTEST_FLAG(color) = "auto";
5394
5395 #if GTEST_OS_WINDOWS
5396 // On Windows, we ignore the TERM variable as it's usually not set.
5397
5398 SetEnv("TERM", "dumb");
5399 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5400
5401 SetEnv("TERM", "");
5402 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5403
5404 SetEnv("TERM", "xterm");
5405 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5406 #else
5407 // On non-Windows platforms, we rely on TERM to determine if the
5408 // terminal supports colors.
5409
5410 SetEnv("TERM", "dumb"); // TERM doesn't support colors.
5411 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5412
5413 SetEnv("TERM", "emacs"); // TERM doesn't support colors.
5414 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5415
5416 SetEnv("TERM", "vt100"); // TERM doesn't support colors.
5417 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5418
5419 SetEnv("TERM", "xterm-mono"); // TERM doesn't support colors.
5420 EXPECT_FALSE(ShouldUseColor(true)); // Stdout is a TTY.
5421
5422 SetEnv("TERM", "xterm"); // TERM supports colors.
5423 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5424
5425 SetEnv("TERM", "xterm-color"); // TERM supports colors.
5426 EXPECT_TRUE(ShouldUseColor(true)); // Stdout is a TTY.
5427 #endif // GTEST_OS_WINDOWS
5428 }
5429
5430 // Verifies that StaticAssertTypeEq works in a namespace scope.
5431
5432 static bool dummy1 = StaticAssertTypeEq<bool, bool>();
5433 static bool dummy2 = StaticAssertTypeEq<const int, const int>();
5434
5435 // Verifies that StaticAssertTypeEq works in a class.
5436
5437 template <typename T>
5438 class StaticAssertTypeEqTestHelper {
5439 public:
StaticAssertTypeEqTestHelper()5440 StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); }
5441 };
5442
TEST(StaticAssertTypeEqTest,WorksInClass)5443 TEST(StaticAssertTypeEqTest, WorksInClass) {
5444 StaticAssertTypeEqTestHelper<bool>();
5445 }
5446
5447 // Verifies that StaticAssertTypeEq works inside a function.
5448
5449 typedef int IntAlias;
5450
TEST(StaticAssertTypeEqTest,CompilesForEqualTypes)5451 TEST(StaticAssertTypeEqTest, CompilesForEqualTypes) {
5452 StaticAssertTypeEq<int, IntAlias>();
5453 StaticAssertTypeEq<int*, IntAlias*>();
5454 }
5455
TEST(ThreadLocalTest,DefaultConstructor)5456 TEST(ThreadLocalTest, DefaultConstructor) {
5457 ThreadLocal<int> t1;
5458 EXPECT_EQ(0, t1.get());
5459
5460 ThreadLocal<void*> t2;
5461 EXPECT_TRUE(t2.get() == NULL);
5462 }
5463
TEST(ThreadLocalTest,Init)5464 TEST(ThreadLocalTest, Init) {
5465 ThreadLocal<int> t1(123);
5466 EXPECT_EQ(123, t1.get());
5467
5468 int i = 0;
5469 ThreadLocal<int*> t2(&i);
5470 EXPECT_EQ(&i, t2.get());
5471 }
5472
TEST(GetCurrentOsStackTraceExceptTopTest,ReturnsTheStackTrace)5473 TEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) {
5474 testing::UnitTest* const unit_test = testing::UnitTest::GetInstance();
5475
5476 // We don't have a stack walker in Google Test yet.
5477 EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str());
5478 EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str());
5479 }
5480