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

Side by Side Diff: base/memory/weak_ptr_unittest.cc

Issue 2213933003: Change EXPECT/ASSERT_DCHECK_DEATH macro to not expose the |regex| parameter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@b2b0_simplethreadJoinable
Patch Set: Disabling a death test which crashed instead of DCHECKing : http://crbug.com/634552 Created 4 years, 4 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/bind_unittest.cc ('k') | base/message_loop/message_pump_io_ios_unittest.cc » ('j') | 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/memory/weak_ptr.h" 5 #include "base/memory/weak_ptr.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 580
581 // Background copies the WeakPtr. 581 // Background copies the WeakPtr.
582 Arrow* arrow_copy; 582 Arrow* arrow_copy;
583 background.CreateArrowFromArrow(&arrow_copy, &arrow); 583 background.CreateArrowFromArrow(&arrow_copy, &arrow);
584 584
585 // The copy is still bound to main thread so I can deref. 585 // The copy is still bound to main thread so I can deref.
586 EXPECT_EQ(arrow.target.get(), arrow_copy->target.get()); 586 EXPECT_EQ(arrow.target.get(), arrow_copy->target.get());
587 587
588 // Although background thread created the copy, it can not deref the copied 588 // Although background thread created the copy, it can not deref the copied
589 // WeakPtr. 589 // WeakPtr.
590 ASSERT_DCHECK_DEATH(background.DeRef(arrow_copy), ""); 590 ASSERT_DCHECK_DEATH(background.DeRef(arrow_copy));
591 591
592 background.DeleteArrow(arrow_copy); 592 background.DeleteArrow(arrow_copy);
593 } 593 }
594 594
595 TEST(WeakPtrDeathTest, NonOwnerThreadDereferencesWeakPtrAfterReference) { 595 TEST(WeakPtrDeathTest, NonOwnerThreadDereferencesWeakPtrAfterReference) {
596 // The default style "fast" does not support multi-threaded tests 596 // The default style "fast" does not support multi-threaded tests
597 // (introduces deadlock on Linux). 597 // (introduces deadlock on Linux).
598 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 598 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
599 599
600 // Main thread creates a Target object. 600 // Main thread creates a Target object.
601 Target target; 601 Target target;
602 602
603 // Main thread creates an arrow referencing the Target (so target's 603 // Main thread creates an arrow referencing the Target (so target's
604 // thread ownership can not be implicitly moved). 604 // thread ownership can not be implicitly moved).
605 Arrow arrow; 605 Arrow arrow;
606 arrow.target = target.AsWeakPtr(); 606 arrow.target = target.AsWeakPtr();
607 arrow.target.get(); 607 arrow.target.get();
608 608
609 // Background thread tries to deref target, which violates thread ownership. 609 // Background thread tries to deref target, which violates thread ownership.
610 BackgroundThread background; 610 BackgroundThread background;
611 background.Start(); 611 background.Start();
612 ASSERT_DCHECK_DEATH(background.DeRef(&arrow), ""); 612 ASSERT_DCHECK_DEATH(background.DeRef(&arrow));
613 } 613 }
614 614
615 TEST(WeakPtrDeathTest, NonOwnerThreadDeletesWeakPtrAfterReference) { 615 TEST(WeakPtrDeathTest, NonOwnerThreadDeletesWeakPtrAfterReference) {
616 // The default style "fast" does not support multi-threaded tests 616 // The default style "fast" does not support multi-threaded tests
617 // (introduces deadlock on Linux). 617 // (introduces deadlock on Linux).
618 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 618 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
619 619
620 std::unique_ptr<Target> target(new Target()); 620 std::unique_ptr<Target> target(new Target());
621 621
622 // Main thread creates an arrow referencing the Target. 622 // Main thread creates an arrow referencing the Target.
623 Arrow arrow; 623 Arrow arrow;
624 arrow.target = target->AsWeakPtr(); 624 arrow.target = target->AsWeakPtr();
625 625
626 // Background thread tries to deref target, binding it to the thread. 626 // Background thread tries to deref target, binding it to the thread.
627 BackgroundThread background; 627 BackgroundThread background;
628 background.Start(); 628 background.Start();
629 background.DeRef(&arrow); 629 background.DeRef(&arrow);
630 630
631 // Main thread deletes Target, violating thread binding. 631 // Main thread deletes Target, violating thread binding.
632 ASSERT_DCHECK_DEATH(target.reset(), ""); 632 ASSERT_DCHECK_DEATH(target.reset());
633 633
634 // |target.reset()| died so |target| still holds the object, so we 634 // |target.reset()| died so |target| still holds the object, so we
635 // must pass it to the background thread to teardown. 635 // must pass it to the background thread to teardown.
636 background.DeleteTarget(target.release()); 636 background.DeleteTarget(target.release());
637 } 637 }
638 638
639 TEST(WeakPtrDeathTest, NonOwnerThreadDeletesObjectAfterReference) { 639 TEST(WeakPtrDeathTest, NonOwnerThreadDeletesObjectAfterReference) {
640 // The default style "fast" does not support multi-threaded tests 640 // The default style "fast" does not support multi-threaded tests
641 // (introduces deadlock on Linux). 641 // (introduces deadlock on Linux).
642 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 642 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
643 643
644 std::unique_ptr<Target> target(new Target()); 644 std::unique_ptr<Target> target(new Target());
645 645
646 // Main thread creates an arrow referencing the Target, and references it, so 646 // Main thread creates an arrow referencing the Target, and references it, so
647 // that it becomes bound to the thread. 647 // that it becomes bound to the thread.
648 Arrow arrow; 648 Arrow arrow;
649 arrow.target = target->AsWeakPtr(); 649 arrow.target = target->AsWeakPtr();
650 arrow.target.get(); 650 arrow.target.get();
651 651
652 // Background thread tries to delete target, volating thread binding. 652 // Background thread tries to delete target, volating thread binding.
653 BackgroundThread background; 653 BackgroundThread background;
654 background.Start(); 654 background.Start();
655 ASSERT_DCHECK_DEATH(background.DeleteTarget(target.release()), ""); 655 ASSERT_DCHECK_DEATH(background.DeleteTarget(target.release()));
656 } 656 }
657 657
658 TEST(WeakPtrDeathTest, NonOwnerThreadReferencesObjectAfterDeletion) { 658 TEST(WeakPtrDeathTest, NonOwnerThreadReferencesObjectAfterDeletion) {
659 // The default style "fast" does not support multi-threaded tests 659 // The default style "fast" does not support multi-threaded tests
660 // (introduces deadlock on Linux). 660 // (introduces deadlock on Linux).
661 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 661 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
662 662
663 std::unique_ptr<Target> target(new Target()); 663 std::unique_ptr<Target> target(new Target());
664 664
665 // Main thread creates an arrow referencing the Target. 665 // Main thread creates an arrow referencing the Target.
666 Arrow arrow; 666 Arrow arrow;
667 arrow.target = target->AsWeakPtr(); 667 arrow.target = target->AsWeakPtr();
668 668
669 // Background thread tries to delete target, binding the object to the thread. 669 // Background thread tries to delete target, binding the object to the thread.
670 BackgroundThread background; 670 BackgroundThread background;
671 background.Start(); 671 background.Start();
672 background.DeleteTarget(target.release()); 672 background.DeleteTarget(target.release());
673 673
674 // Main thread attempts to dereference the target, violating thread binding. 674 // Main thread attempts to dereference the target, violating thread binding.
675 ASSERT_DCHECK_DEATH(arrow.target.get(), ""); 675 ASSERT_DCHECK_DEATH(arrow.target.get());
676 } 676 }
677 677
678 } // namespace base 678 } // namespace base
OLDNEW
« no previous file with comments | « base/bind_unittest.cc ('k') | base/message_loop/message_pump_io_ios_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698