OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/compiler_specific.h" | 6 #include "base/compiler_specific.h" |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 | 8 |
9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
227 | 227 |
228 TEST_F(LoggingTest, DcheckReleaseBehavior) { | 228 TEST_F(LoggingTest, DcheckReleaseBehavior) { |
229 int some_variable = 1; | 229 int some_variable = 1; |
230 // These should still reference |some_variable| so we don't get | 230 // These should still reference |some_variable| so we don't get |
231 // unused variable warnings. | 231 // unused variable warnings. |
232 DCHECK(some_variable) << "test"; | 232 DCHECK(some_variable) << "test"; |
233 DPCHECK(some_variable) << "test"; | 233 DPCHECK(some_variable) << "test"; |
234 DCHECK_EQ(some_variable, 1) << "test"; | 234 DCHECK_EQ(some_variable, 1) << "test"; |
235 } | 235 } |
236 | 236 |
237 TEST_F(LoggingTest, DCheckStatements) { | |
238 SetLogAssertHandler(&LogSink); | |
239 | |
240 EXPECT_EQ(0, log_sink_call_count); | |
241 | |
242 bool reached = false; | |
Sigurður Ásgeirsson
2015/06/25 12:25:09
It's totally opaque what's being tested here and t
erikwright (departed)
2015/07/07 18:30:56
I've updated this particular test case with some s
| |
243 if (false) | |
244 DCHECK(false); | |
245 else | |
246 DCHECK(reached = true); | |
247 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
248 | |
249 reached = false; | |
250 if (true) | |
251 DCHECK(reached = true); | |
252 else | |
253 DCHECK(false); | |
254 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
255 | |
256 reached = false; | |
257 switch (2) { | |
258 case 1: | |
259 DCHECK(false); | |
260 case 2: | |
261 DCHECK(reached=true); | |
262 default: | |
263 break; | |
264 } | |
265 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
266 | |
267 // Cases with failing checks. | |
268 EXPECT_EQ(0, log_sink_call_count); | |
269 | |
270 reached = false; | |
271 if (false) | |
272 DCHECK(reached = true); | |
273 else | |
274 DCHECK(false); | |
275 ASSERT_FALSE(reached); | |
276 ASSERT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); | |
277 | |
278 reached = false; | |
279 if (true) | |
280 DCHECK(false); | |
281 else | |
282 DCHECK(reached = true); | |
283 ASSERT_FALSE(reached); | |
284 ASSERT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count); | |
285 | |
286 reached = false; | |
287 switch (2) { | |
288 case 1: | |
289 DCHECK(reached = true); | |
290 case 2: | |
291 DCHECK(false); | |
292 default: | |
293 break; | |
294 } | |
295 ASSERT_FALSE(reached); | |
296 ASSERT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count); | |
297 } | |
298 | |
299 TEST_F(LoggingTest, CheckStatements) { | |
300 SetLogAssertHandler(&LogSink); | |
301 | |
302 EXPECT_EQ(0, log_sink_call_count); | |
303 | |
304 bool reached = false; | |
305 if (false) | |
306 CHECK(false); | |
307 else | |
308 CHECK(reached = true); | |
309 ASSERT_TRUE(reached); | |
310 | |
311 reached = false; | |
312 if (true) | |
313 CHECK(reached = true); | |
314 else | |
315 CHECK(false); | |
316 ASSERT_TRUE(reached); | |
317 | |
318 reached = false; | |
319 switch (2) { | |
320 case 1: | |
321 CHECK(false); | |
322 case 2: | |
323 CHECK(reached=true); | |
324 default: | |
325 break; | |
326 } | |
327 ASSERT_TRUE(reached); | |
328 | |
329 // Cases with failing checks. | |
330 EXPECT_EQ(0, log_sink_call_count); | |
331 | |
332 reached = false; | |
333 if (false) | |
334 CHECK(reached = true); | |
335 else | |
336 CHECK(false); | |
337 ASSERT_FALSE(reached); | |
338 ASSERT_EQ(1, log_sink_call_count); | |
339 | |
340 reached = false; | |
341 if (true) | |
342 CHECK(false); | |
343 else | |
344 CHECK(reached = true); | |
345 ASSERT_FALSE(reached); | |
346 ASSERT_EQ(2, log_sink_call_count); | |
347 | |
348 reached = false; | |
349 switch (2) { | |
350 case 1: | |
351 CHECK(reached = true); | |
352 case 2: | |
353 CHECK(false); | |
354 default: | |
355 break; | |
356 } | |
357 ASSERT_FALSE(reached); | |
358 ASSERT_EQ(3, log_sink_call_count); | |
359 } | |
360 | |
361 TEST_F(LoggingTest, DCheckEqStatements) { | |
362 SetLogAssertHandler(&LogSink); | |
363 | |
364 EXPECT_EQ(0, log_sink_call_count); | |
365 | |
366 bool reached = false; | |
367 if (false) | |
368 DCHECK_EQ(false, true); | |
369 else | |
370 DCHECK_EQ(true, reached = true); | |
371 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
372 | |
373 reached = false; | |
374 if (true) | |
375 DCHECK_EQ(true, reached = true); | |
376 else | |
377 DCHECK_EQ(false, true); | |
378 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
379 | |
380 reached = false; | |
381 switch (2) { | |
382 case 1: | |
383 DCHECK_EQ(false, true); | |
384 case 2: | |
385 DCHECK_EQ(true, reached=true); | |
386 default: | |
387 break; | |
388 } | |
389 ASSERT_EQ(DCHECK_IS_ON(), reached); | |
390 | |
391 // Cases with failing checks. | |
392 EXPECT_EQ(0, log_sink_call_count); | |
393 | |
394 reached = false; | |
395 if (false) | |
396 DCHECK_EQ(true, reached = true); | |
397 else | |
398 DCHECK_EQ(false, true); | |
399 ASSERT_FALSE(reached); | |
400 ASSERT_EQ(DCHECK_IS_ON() ? 1 : 0, log_sink_call_count); | |
401 | |
402 reached = false; | |
403 if (true) | |
404 DCHECK_EQ(false, true); | |
405 else | |
406 DCHECK_EQ(true, reached = true); | |
407 ASSERT_FALSE(reached); | |
408 ASSERT_EQ(DCHECK_IS_ON() ? 2 : 0, log_sink_call_count); | |
409 | |
410 reached = false; | |
411 switch (2) { | |
412 case 1: | |
413 DCHECK_EQ(true, reached = true); | |
414 case 2: | |
415 DCHECK_EQ(false, true); | |
416 default: | |
417 break; | |
418 } | |
419 ASSERT_FALSE(reached); | |
420 ASSERT_EQ(DCHECK_IS_ON() ? 3 : 0, log_sink_call_count); | |
421 } | |
422 | |
423 TEST_F(LoggingTest, CheckEqStatements) { | |
424 SetLogAssertHandler(&LogSink); | |
425 | |
426 EXPECT_EQ(0, log_sink_call_count); | |
427 | |
428 bool reached = false; | |
429 if (false) | |
430 CHECK_EQ(false, true); | |
431 else | |
432 CHECK_EQ(true, reached = true); | |
433 ASSERT_TRUE(reached); | |
434 | |
435 reached = false; | |
436 if (true) | |
437 CHECK_EQ(true, reached = true); | |
438 else | |
439 CHECK_EQ(false, true); | |
440 ASSERT_TRUE(reached); | |
441 | |
442 reached = false; | |
443 switch (2) { | |
444 case 1: | |
445 CHECK_EQ(false, true); | |
446 case 2: | |
447 CHECK_EQ(true, reached = true); | |
448 default: | |
449 break; | |
450 } | |
451 ASSERT_TRUE(reached); | |
452 | |
453 // Cases with failing checks. | |
454 EXPECT_EQ(0, log_sink_call_count); | |
455 | |
456 reached = false; | |
457 if (false) | |
458 CHECK_EQ(true, reached = true); | |
459 else | |
460 CHECK_EQ(false, true); | |
461 ASSERT_FALSE(reached); | |
462 ASSERT_EQ(1, log_sink_call_count); | |
463 | |
464 reached = false; | |
465 if (true) | |
466 CHECK_EQ(false, true); | |
467 else | |
468 CHECK_EQ(true, reached = true); | |
469 ASSERT_FALSE(reached); | |
470 ASSERT_EQ(2, log_sink_call_count); | |
471 | |
472 reached = false; | |
473 switch (2) { | |
474 case 1: | |
475 CHECK_EQ(true, reached = true); | |
476 case 2: | |
477 CHECK_EQ(false, true); | |
478 default: | |
479 break; | |
480 } | |
481 ASSERT_FALSE(reached); | |
482 ASSERT_EQ(3, log_sink_call_count); | |
483 } | |
484 | |
485 TEST_F(LoggingTest, LogStatements) { | |
486 bool reached = false; | |
487 if (true) | |
488 LOG(INFO) << "Hello: " << (reached = true); | |
489 else | |
490 LOG(FATAL) << "Goodbye."; | |
491 ASSERT_TRUE(reached); | |
492 | |
493 reached = false; | |
494 if (false) | |
495 LOG(FATAL) << "Goodbye."; | |
496 else | |
497 LOG(INFO) << "Hello: " << (reached = true); | |
498 ASSERT_TRUE(reached); | |
499 | |
500 reached = false; | |
501 if (true) | |
502 LOG_IF(INFO, reached = true) << "Hello."; | |
503 else | |
504 LOG_IF(FATAL, true) << "Goodbye."; | |
505 ASSERT_TRUE(reached); | |
506 | |
507 reached = false; | |
508 if (false) | |
509 LOG_IF(FATAL, true) << "Goodbye."; | |
510 else | |
511 LOG_IF(INFO, reached = true) << "Hello."; | |
512 ASSERT_TRUE(reached); | |
513 | |
514 reached = false; | |
515 if (false) | |
516 LOG_IF(FATAL, true) << "Goodbye."; | |
517 else | |
518 LOG_IF(INFO, false) << "Derp: " << (reached = true); | |
519 ASSERT_FALSE(reached); | |
520 | |
521 reached = false; | |
522 if (true) | |
523 DLOG(INFO) << "Hello: " << (reached = true); | |
524 else | |
525 DLOG(FATAL) << "Goodbye."; | |
526 ASSERT_EQ(DLOG_IS_ON(INFO), reached); | |
527 | |
528 reached = false; | |
529 if (false) | |
530 DLOG(FATAL) << "Goodbye."; | |
531 else | |
532 DLOG(INFO) << "Hello: " << (reached = true); | |
533 ASSERT_EQ(DLOG_IS_ON(INFO), reached); | |
534 | |
535 reached = false; | |
536 if (true) | |
537 DLOG_IF(INFO, true) << "Hello: " << (reached = true); | |
538 else | |
539 DLOG_IF(FATAL, true) << "Goodbye."; | |
540 ASSERT_EQ(DLOG_IS_ON(INFO), reached); | |
541 | |
542 reached = false; | |
543 if (false) | |
544 DLOG_IF(FATAL, true) << "Goodbye."; | |
545 else | |
546 DLOG_IF(INFO, true) << "Hello: " << (reached = true); | |
547 ASSERT_EQ(DLOG_IS_ON(INFO), reached); | |
548 | |
549 reached = false; | |
550 if (false) | |
551 DLOG_IF(FATAL, true) << "Goodbye."; | |
552 else | |
553 DLOG_IF(INFO, false) << "Derp: " << (reached = true); | |
554 ASSERT_FALSE(reached); | |
555 } | |
556 | |
237 // Test that defining an operator<< for a type in a namespace doesn't prevent | 557 // Test that defining an operator<< for a type in a namespace doesn't prevent |
238 // other code in that namespace from calling the operator<<(ostream, wstring) | 558 // other code in that namespace from calling the operator<<(ostream, wstring) |
239 // defined by logging.h. This can fail if operator<<(ostream, wstring) can't be | 559 // defined by logging.h. This can fail if operator<<(ostream, wstring) can't be |
240 // found by ADL, since defining another operator<< prevents name lookup from | 560 // found by ADL, since defining another operator<< prevents name lookup from |
241 // looking in the global namespace. | 561 // looking in the global namespace. |
242 namespace nested_test { | 562 namespace nested_test { |
243 class Streamable {}; | 563 class Streamable {}; |
244 ALLOW_UNUSED_TYPE std::ostream& operator<<(std::ostream& out, | 564 ALLOW_UNUSED_TYPE std::ostream& operator<<(std::ostream& out, |
245 const Streamable&) { | 565 const Streamable&) { |
246 return out << "Streamable"; | 566 return out << "Streamable"; |
247 } | 567 } |
248 TEST_F(LoggingTest, StreamingWstringFindsCorrectOperator) { | 568 TEST_F(LoggingTest, StreamingWstringFindsCorrectOperator) { |
249 std::wstring wstr = L"Hello World"; | 569 std::wstring wstr = L"Hello World"; |
250 std::ostringstream ostr; | 570 std::ostringstream ostr; |
251 ostr << wstr; | 571 ostr << wstr; |
252 EXPECT_EQ("Hello World", ostr.str()); | 572 EXPECT_EQ("Hello World", ostr.str()); |
253 } | 573 } |
254 } // namespace nested_test | 574 } // namespace nested_test |
255 | 575 |
256 } // namespace | 576 } // namespace |
257 | 577 |
258 } // namespace logging | 578 } // namespace logging |
OLD | NEW |