Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: base/logging_unittest.cc

Issue 1193873004: Make CHECK_EQ and friends work properly in an if/else structure without braces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More WIP. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/logging.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 24 matching lines...) Expand all
35 SetLogAssertHandler(NULL); 35 SetLogAssertHandler(NULL);
36 log_sink_call_count = 0; 36 log_sink_call_count = 0;
37 } 37 }
38 38
39 private: 39 private:
40 int old_min_log_level_; 40 int old_min_log_level_;
41 41
42 DISALLOW_COPY_AND_ASSIGN(LogStateSaver); 42 DISALLOW_COPY_AND_ASSIGN(LogStateSaver);
43 }; 43 };
44 44
45 // Validates that exactly N log messages are received during its lifetime.
46 template <int N>
47 class ExpectNLogs {
48 public:
49 ExpectNLogs() {
50 SetLogAssertHandler(&LogSink);
51 log_sink_call_count = 0;
52 }
53
54 ~ExpectNLogs() {
55 SetLogAssertHandler(NULL);
56 EXPECT_EQ(N, log_sink_call_count);
57 }
58
59 private:
60 LogStateSaver log_state_saver_;
61
62 DISALLOW_COPY_AND_ASSIGN(ExpectNLogs);
63 };
64
65 using ExpectNoLogs = ExpectNLogs<0>;
66 using ExpectOneLog = ExpectNLogs<1>;
67 using ExpectOneLogIfDCheckIsOn = ExpectNLogs<DCHECK_IS_ON() ? 1 : 0>;
68
69 // A convenience function to aid in test readability.
70 bool UnreachedBoolExpr() {
71 ADD_FAILURE() << "Unexpectedly evaluated.";
72 return false;
73 }
74
75 // Validates that operator()() is invoked exactly N times.
76 template<int N>
77 class EvaluatedNTimes {
78 public:
79 EvaluatedNTimes() {}
80 ~EvaluatedNTimes() {
81 EXPECT_EQ(N, evaluations_) << "Expected to be evaluated exactly " << N
82 << " times.";
83 }
84
85 bool operator()() {
86 EXPECT_GT(N, evaluations_) << "Evaluated more than the expected " << N
87 << " times.";
88 ++evaluations_;
89 return true;
90 };
91
92 private:
93 int evaluations_ = 0;
94 DISALLOW_COPY_AND_ASSIGN(EvaluatedNTimes);
95 };
96
97 using EvaluatedOnce = EvaluatedNTimes<1>;
98 using EvaluatedOnceIfDCheckIsOn = EvaluatedNTimes<DCHECK_IS_ON() ? 1 : 0>;
99
45 class LoggingTest : public testing::Test { 100 class LoggingTest : public testing::Test {
46 private: 101 private:
47 LogStateSaver log_state_saver_; 102 LogStateSaver log_state_saver_;
48 }; 103 };
49 104
50 class MockLogSource { 105 class MockLogSource {
51 public: 106 public:
52 MOCK_METHOD0(Log, const char*()); 107 MOCK_METHOD0(Log, const char*());
53 }; 108 };
54 109
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 282
228 TEST_F(LoggingTest, DcheckReleaseBehavior) { 283 TEST_F(LoggingTest, DcheckReleaseBehavior) {
229 int some_variable = 1; 284 int some_variable = 1;
230 // These should still reference |some_variable| so we don't get 285 // These should still reference |some_variable| so we don't get
231 // unused variable warnings. 286 // unused variable warnings.
232 DCHECK(some_variable) << "test"; 287 DCHECK(some_variable) << "test";
233 DPCHECK(some_variable) << "test"; 288 DPCHECK(some_variable) << "test";
234 DCHECK_EQ(some_variable, 1) << "test"; 289 DCHECK_EQ(some_variable, 1) << "test";
235 } 290 }
236 291
292 // Test that DCHECK acts as a single statement in variety of syntactic
293 // situations.
294 TEST_F(LoggingTest, DCheckStatements) {
295 // The next three blocks validate that the DCHECK is correctly bound to the
296 // 'if' statement.
297 {
298 ExpectNoLogs expect_no_logs;
299
300 // Unreached DCHECK.
301 if (false)
302 DCHECK(UnreachedBoolExpr());
303 }
304
305 {
306 EvaluatedOnceIfDCheckIsOn bool_expr;
Sigurður Ásgeirsson 2015/07/16 10:51:28 nit: IMHO the use of this would be marginally more
307 ExpectNoLogs expect_no_logs;
308
309 // Reached, successful DCHECK.
310 if (true)
311 DCHECK(bool_expr());
312 }
313
314 {
315 EvaluatedOnceIfDCheckIsOn bool_expr;
316 ExpectOneLogIfDCheckIsOn expect_one_dlog;
317
318 // Reached, failed DCHECK.
319 if (true)
320 DCHECK(!bool_expr());
321 }
322
323 // The following four cases validate that the DCHECK is correctly bound in an
324 // 'if/else' statement.
325 {
326 EvaluatedOnceIfDCheckIsOn bool_expr;
327 ExpectNoLogs expect_no_logs;
328
329 // Unreached if, successful else.
330 if (false)
331 DCHECK(UnreachedBoolExpr());
332 else
333 DCHECK(bool_expr());
334 }
335
336 {
337 EvaluatedOnceIfDCheckIsOn bool_expr;
338 ExpectNoLogs expect_no_logs;
339
340 // Successful if, unreached else.
341 if (true)
342 DCHECK(bool_expr());
343 else
344 DCHECK(UnreachedBoolExpr());
345 }
346
347 {
348 EvaluatedOnceIfDCheckIsOn bool_expr;
349 ExpectOneLogIfDCheckIsOn expect_one_dlog;
350
351 // Unreached if, failed else.
352 if (false)
353 DCHECK(UnreachedBoolExpr());
354 else
355 DCHECK(!bool_expr());
356 }
357
358 {
359 EvaluatedOnceIfDCheckIsOn bool_expr;
360 ExpectOneLogIfDCheckIsOn expect_one_dlog;
361
362 // Failed if, unreached else.
363 if (true)
364 DCHECK(!bool_expr());
365 else
366 DCHECK(UnreachedBoolExpr());
367 }
368
369 // These cases validate that a DCHECK may appear in a switch statement.
370 {
371 EvaluatedOnceIfDCheckIsOn bool_expr;
372 ExpectNoLogs expect_no_logs;
373 switch (2) {
374 case 1:
375 DCHECK(UnreachedBoolExpr());
376 case 2:
377 DCHECK(bool_expr());
378 default:
379 break;
380 }
381 }
382
383 {
384 EvaluatedOnceIfDCheckIsOn bool_expr;
385 ExpectOneLogIfDCheckIsOn expect_one_dlog;
386 switch (2) {
387 case 1:
388 DCHECK(UnreachedBoolExpr());
389 case 2:
390 DCHECK(!bool_expr());
391 default:
392 break;
393 }
394 }
395 }
396
397 // Test that CHECK acts as a single statement in variety of syntactic
398 // situations.
399 TEST_F(LoggingTest, CheckStatements) {
400 // The next three blocks validate that the CHECK is correctly bound to the
401 // 'if' statement.
402 {
403 ExpectNoLogs expect_no_logs;
404
405 // Unreached CHECK.
406 if (false)
407 CHECK(UnreachedBoolExpr());
408 }
409
410 {
411 EvaluatedOnce bool_expr;
412 ExpectNoLogs expect_no_logs;
413
414 // Reached, successful CHECK.
415 if (true)
416 CHECK(bool_expr());
417 }
418
419 {
420 EvaluatedOnce bool_expr;
421 ExpectOneLog expect_one_log;
422
423 // Reached, failed CHECK.
424 if (true)
425 CHECK(!bool_expr());
426 }
427
428 // The following four cases validate that the CHECK is correctly bound in an
429 // 'if/else' statement.
430 {
431 EvaluatedOnce bool_expr;
432 ExpectNoLogs expect_no_logs;
433
434 // Unreached if, successful else.
435 if (false)
436 CHECK(UnreachedBoolExpr());
437 else
438 CHECK(bool_expr());
439 }
440
441 {
442 EvaluatedOnce bool_expr;
443 ExpectNoLogs expect_no_logs;
444
445 // Successful if, unreached else.
446 if (true)
447 CHECK(bool_expr());
448 else
449 CHECK(UnreachedBoolExpr());
450 }
451
452 {
453 EvaluatedOnce bool_expr;
454 ExpectOneLog expect_one_log;
455
456 // Unreached if, failed else.
457 if (false)
458 CHECK(UnreachedBoolExpr());
459 else
460 CHECK(!bool_expr());
461 }
462
463 {
464 EvaluatedOnce bool_expr;
465 ExpectOneLog expect_one_log;
466
467 // Failed if, unreached else.
468 if (true)
469 CHECK(!bool_expr());
470 else
471 CHECK(UnreachedBoolExpr());
472 }
473
474 // These cases validate that a CHECK may appear in a switch statement.
475 {
476 EvaluatedOnce bool_expr;
477 ExpectNoLogs expect_no_logs;
478 switch (2) {
479 case 1:
480 CHECK(UnreachedBoolExpr());
481 case 2:
482 CHECK(bool_expr());
483 default:
484 break;
485 }
486 }
487
488 {
489 EvaluatedOnce bool_expr;
490 ExpectOneLog expect_one_log;
491 switch (2) {
492 case 1:
493 CHECK(UnreachedBoolExpr());
494 case 2:
495 CHECK(!bool_expr());
496 default:
497 break;
498 }
499 }
500 }
501
502 // Test that DCHECK_EQ acts as a single statement in variety of syntactic
503 // situations.
504 TEST_F(LoggingTest, DCheckEqStatements) {
505 // The next three blocks validate that the DCHECK_EQ is correctly bound to the
506 // 'if' statement.
507 {
508 ExpectNoLogs expect_no_logs;
509
510 // Unreached DCHECK_EQ.
511 if (false)
512 DCHECK_EQ(false, UnreachedBoolExpr());
513 }
514
515 {
516 EvaluatedOnceIfDCheckIsOn bool_expr;
517 ExpectNoLogs expect_no_logs;
518
519 // Reached, successful DCHECK_EQ.
520 if (true)
521 DCHECK_EQ(true, bool_expr());
522 }
523
524 {
525 EvaluatedOnceIfDCheckIsOn bool_expr;
526 ExpectOneLogIfDCheckIsOn expect_one_dlog;
527
528 // Reached, failed DCHECK_EQ.
529 if (true)
530 DCHECK_EQ(false, bool_expr());
531 }
532
533 // The following four cases validate that the DCHECK_EQ is correctly bound in
534 // an 'if/else' statement.
535 {
536 EvaluatedOnceIfDCheckIsOn bool_expr;
537 ExpectNoLogs expect_no_logs;
538
539 // Unreached if, successful else.
540 if (false)
541 DCHECK_EQ(false, UnreachedBoolExpr());
542 else
543 DCHECK_EQ(true, bool_expr());
544 }
545
546 {
547 EvaluatedOnceIfDCheckIsOn bool_expr;
548 ExpectNoLogs expect_no_logs;
549
550 // Successful if, unreached else.
551 if (true)
552 DCHECK_EQ(true, bool_expr());
553 else
554 DCHECK_EQ(false, UnreachedBoolExpr());
555 }
556
557 {
558 EvaluatedOnceIfDCheckIsOn bool_expr;
559 ExpectOneLogIfDCheckIsOn expect_one_dlog;
560
561 // Unreached if, failed else.
562 if (false)
563 DCHECK_EQ(false, UnreachedBoolExpr());
564 else
565 DCHECK_EQ(false, bool_expr());
566 }
567
568 {
569 EvaluatedOnceIfDCheckIsOn bool_expr;
570 ExpectOneLogIfDCheckIsOn expect_one_dlog;
571
572 // Failed if, unreached else.
573 if (true)
574 DCHECK_EQ(false, bool_expr());
575 else
576 DCHECK_EQ(false, UnreachedBoolExpr());
577 }
578
579 // These cases validate that a DCHECK_EQ may appear in a switch statement.
580 {
581 EvaluatedOnceIfDCheckIsOn bool_expr;
582 ExpectNoLogs expect_no_logs;
583 switch (2) {
584 case 1:
585 DCHECK_EQ(false, UnreachedBoolExpr());
586 case 2:
587 DCHECK_EQ(true, bool_expr());
588 default:
589 break;
590 }
591 }
592
593 {
594 EvaluatedOnceIfDCheckIsOn bool_expr;
595 ExpectOneLogIfDCheckIsOn expect_one_dlog;
596 switch (2) {
597 case 1:
598 DCHECK_EQ(false, UnreachedBoolExpr());
599 case 2:
600 DCHECK_EQ(false, bool_expr());
601 default:
602 break;
603 }
604 }
605 }
606
607 // Test that CHECK_EQ acts as a single statement in variety of syntactic
608 // situations.
609 TEST_F(LoggingTest, CheckEqStatements) {
610 // The next three blocks validate that the CHECK_EQ is correctly bound to the
611 // 'if' statement.
612 {
613 ExpectNoLogs expect_no_logs;
614
615 // Unreached CHECK_EQ.
616 if (false)
617 CHECK_EQ(false, UnreachedBoolExpr());
618 }
619
620 {
621 EvaluatedOnce bool_expr;
622 ExpectNoLogs expect_no_logs;
623
624 // Reached, successful CHECK_EQ.
625 if (true)
626 CHECK_EQ(true, bool_expr());
627 }
628
629 {
630 EvaluatedOnce bool_expr;
631 ExpectOneLog expect_one_log;
632
633 // Reached, failed CHECK_EQ.
634 if (true)
635 CHECK_EQ(false, bool_expr());
636 }
637
638 // The following four cases validate that the CHECK_EQ is correctly bound in
639 // an 'if/else' statement.
640 {
641 EvaluatedOnce bool_expr;
642 ExpectNoLogs expect_no_logs;
643
644 // Unreached if, successful else.
645 if (false)
646 CHECK_EQ(false, UnreachedBoolExpr());
647 else
648 CHECK_EQ(true, bool_expr());
649 }
650
651 {
652 EvaluatedOnce bool_expr;
653 ExpectNoLogs expect_no_logs;
654
655 // Successful if, unreached else.
656 if (true)
657 CHECK_EQ(true, bool_expr());
658 else
659 CHECK_EQ(false, UnreachedBoolExpr());
660 }
661
662 {
663 EvaluatedOnce bool_expr;
664 ExpectOneLog expect_one_log;
665
666 // Unreached if, failed else.
667 if (false)
668 CHECK_EQ(false, UnreachedBoolExpr());
669 else
670 CHECK_EQ(false, bool_expr());
671 }
672
673 {
674 EvaluatedOnce bool_expr;
675 ExpectOneLog expect_one_log;
676
677 // Failed if, unreached else.
678 if (true)
679 CHECK_EQ(false, bool_expr());
680 else
681 CHECK_EQ(false, UnreachedBoolExpr());
682 }
683
684 // These cases validate that a CHECK_EQ may appear in a switch statement.
685 {
686 EvaluatedOnce bool_expr;
687 ExpectNoLogs expect_no_logs;
688 switch (2) {
689 case 1:
690 CHECK_EQ(false, UnreachedBoolExpr());
691 case 2:
692 CHECK_EQ(true, bool_expr());
693 default:
694 break;
695 }
696 }
697
698 {
699 EvaluatedOnce bool_expr;
700 ExpectOneLog expect_one_log;
701 switch (2) {
702 case 1:
703 CHECK_EQ(false, UnreachedBoolExpr());
704 case 2:
705 CHECK_EQ(false, bool_expr());
706 default:
707 break;
708 }
709 }
710 }
711
712 // Test that DLOG_IF acts as a single statement in variety of syntactic
713 // situations.
714 TEST_F(LoggingTest, DLogIfStatements) {
715 // The next three blocks validate that the DLOG_IF is correctly bound to the
716 // 'if' statement.
717 {
718 ExpectNoLogs expect_no_logs;
719
720 // Unreached DLOG_IF.
721 if (false)
722 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
723 }
724
725 {
726 EvaluatedOnceIfDCheckIsOn bool_expr;
727 ExpectNoLogs expect_no_logs;
728
729 // Reached, negative DLOG_IF.
730 if (true)
731 DLOG_IF(FATAL, !bool_expr()) << "message";
732 }
733
734 {
735 EvaluatedOnceIfDCheckIsOn bool_expr;
736 ExpectOneLogIfDCheckIsOn expect_one_dlog;
737
738 // Reached, positive DLOG_IF.
739 if (true)
740 DLOG_IF(FATAL, bool_expr()) << "message";
741 }
742
743 // The following four cases validate that the DLOG_IF is correctly bound in an
744 // 'if/else' statement.
745 {
746 EvaluatedOnceIfDCheckIsOn bool_expr;
747 ExpectNoLogs expect_no_logs;
748
749 // Unreached if, negative else.
750 if (false)
751 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
752 else
753 DLOG_IF(FATAL, !bool_expr()) << "message";
754 }
755
756 {
757 EvaluatedOnceIfDCheckIsOn bool_expr;
758 ExpectNoLogs expect_no_logs;
759
760 // Negative if, unreached else.
761 if (true)
762 DLOG_IF(FATAL, !bool_expr()) << "message";
763 else
764 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
765 }
766
767 {
768 EvaluatedOnceIfDCheckIsOn bool_expr;
769 ExpectOneLogIfDCheckIsOn expect_one_dlog;
770
771 // Unreached if, positive else.
772 if (false)
773 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
774 else
775 DLOG_IF(FATAL, bool_expr()) << "message";
776 }
777
778 {
779 EvaluatedOnceIfDCheckIsOn bool_expr;
780 ExpectOneLogIfDCheckIsOn expect_one_dlog;
781
782 // Positive if, unreached else.
783 if (true)
784 DLOG_IF(FATAL, bool_expr()) << "message";
785 else
786 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
787 }
788
789 // These cases validate that a DLOG_IF may appear in a switch statement.
790 {
791 EvaluatedOnceIfDCheckIsOn bool_expr;
792 ExpectNoLogs expect_no_logs;
793 switch (2) {
794 case 1:
795 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
796 case 2:
797 DLOG_IF(FATAL, !bool_expr()) << "message";
798 default:
799 break;
800 }
801 }
802
803 {
804 EvaluatedOnceIfDCheckIsOn bool_expr;
805 ExpectOneLogIfDCheckIsOn expect_one_dlog;
806 switch (2) {
807 case 1:
808 DLOG_IF(FATAL, UnreachedBoolExpr()) << "message";
809 case 2:
810 DLOG_IF(FATAL, bool_expr()) << "message";
811 default:
812 break;
813 }
814 }
815 }
816
817 // Test that LOG_IF acts as a single statement in variety of syntactic
818 // situations.
819 TEST_F(LoggingTest, LogIfStatements) {
820 // The next three blocks validate that the LOG_IF is correctly bound to the
821 // 'if' statement.
822 {
823 ExpectNoLogs expect_no_logs;
824
825 // Unreached LOG_IF.
826 if (false)
827 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
828 }
829
830 {
831 EvaluatedOnce bool_expr;
832 ExpectNoLogs expect_no_logs;
833
834 // Reached, negative LOG_IF.
835 if (true)
836 LOG_IF(FATAL, !bool_expr()) << "message";
837 }
838
839 {
840 EvaluatedOnce bool_expr;
841 ExpectOneLog expect_one_log;
842
843 // Reached, positive LOG_IF.
844 if (true)
845 LOG_IF(FATAL, bool_expr()) << "message";
846 }
847
848 // The following four cases validate that the LOG_IF is correctly bound in an
849 // 'if/else' statement.
850 {
851 EvaluatedOnce bool_expr;
852 ExpectNoLogs expect_no_logs;
853
854 // Unreached if, negative else.
855 if (false)
856 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
857 else
858 LOG_IF(FATAL, !bool_expr()) << "message";
859 }
860
861 {
862 EvaluatedOnce bool_expr;
863 ExpectNoLogs expect_no_logs;
864
865 // Negative if, unreached else.
866 if (true)
867 LOG_IF(FATAL, !bool_expr()) << "message";
868 else
869 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
870 }
871
872 {
873 EvaluatedOnce bool_expr;
874 ExpectOneLog expect_one_log;
875
876 // Unreached if, positive else.
877 if (false)
878 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
879 else
880 LOG_IF(FATAL, bool_expr()) << "message";
881 }
882
883 {
884 EvaluatedOnce bool_expr;
885 ExpectOneLog expect_one_log;
886
887 // Positive if, unreached else.
888 if (true)
889 LOG_IF(FATAL, bool_expr()) << "message";
890 else
891 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
892 }
893
894 // These cases validate that a LOG_IF may appear in a switch statement.
895 {
896 EvaluatedOnce bool_expr;
897 ExpectNoLogs expect_no_logs;
898 switch (2) {
899 case 1:
900 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
901 case 2:
902 LOG_IF(FATAL, !bool_expr()) << "message";
903 default:
904 break;
905 }
906 }
907
908 {
909 EvaluatedOnce bool_expr;
910 ExpectOneLog expect_one_log;
911 switch (2) {
912 case 1:
913 LOG_IF(FATAL, UnreachedBoolExpr()) << "message";
914 case 2:
915 LOG_IF(FATAL, bool_expr()) << "message";
916 default:
917 break;
918 }
919 }
920 }
921
237 // Test that defining an operator<< for a type in a namespace doesn't prevent 922 // 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) 923 // 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 924 // 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 925 // found by ADL, since defining another operator<< prevents name lookup from
241 // looking in the global namespace. 926 // looking in the global namespace.
242 namespace nested_test { 927 namespace nested_test {
243 class Streamable {}; 928 class Streamable {};
244 ALLOW_UNUSED_TYPE std::ostream& operator<<(std::ostream& out, 929 ALLOW_UNUSED_TYPE std::ostream& operator<<(std::ostream& out,
245 const Streamable&) { 930 const Streamable&) {
246 return out << "Streamable"; 931 return out << "Streamable";
247 } 932 }
248 TEST_F(LoggingTest, StreamingWstringFindsCorrectOperator) { 933 TEST_F(LoggingTest, StreamingWstringFindsCorrectOperator) {
249 std::wstring wstr = L"Hello World"; 934 std::wstring wstr = L"Hello World";
250 std::ostringstream ostr; 935 std::ostringstream ostr;
251 ostr << wstr; 936 ostr << wstr;
252 EXPECT_EQ("Hello World", ostr.str()); 937 EXPECT_EQ("Hello World", ostr.str());
253 } 938 }
254 } // namespace nested_test 939 } // namespace nested_test
255 940
256 } // namespace 941 } // namespace
257 942
258 } // namespace logging 943 } // namespace logging
OLDNEW
« no previous file with comments | « base/logging.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698