| OLD | NEW |
| 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/bind.h" | 5 #include "base/bind.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 EXPECT_EQ(1, array_cb.Run()); | 643 EXPECT_EQ(1, array_cb.Run()); |
| 644 | 644 |
| 645 Callback<int()> const_array_cb = Bind(&ArrayGet, *const_array_ptr, 1); | 645 Callback<int()> const_array_cb = Bind(&ArrayGet, *const_array_ptr, 1); |
| 646 EXPECT_EQ(1, const_array_cb.Run()); | 646 EXPECT_EQ(1, const_array_cb.Run()); |
| 647 | 647 |
| 648 array[1] = 3; | 648 array[1] = 3; |
| 649 EXPECT_EQ(3, array_cb.Run()); | 649 EXPECT_EQ(3, array_cb.Run()); |
| 650 EXPECT_EQ(3, const_array_cb.Run()); | 650 EXPECT_EQ(3, const_array_cb.Run()); |
| 651 } | 651 } |
| 652 | 652 |
| 653 // Verify SupportsAddRefAndRelease correctly introspects the class type for | |
| 654 // AddRef() and Release(). | |
| 655 // - Class with AddRef() and Release() | |
| 656 // - Class without AddRef() and Release() | |
| 657 // - Derived Class with AddRef() and Release() | |
| 658 // - Derived Class without AddRef() and Release() | |
| 659 // - Derived Class with AddRef() and Release() and a private destructor. | |
| 660 TEST_F(BindTest, SupportsAddRefAndRelease) { | |
| 661 EXPECT_TRUE(internal::SupportsAddRefAndRelease<HasRef>::value); | |
| 662 EXPECT_FALSE(internal::SupportsAddRefAndRelease<NoRef>::value); | |
| 663 | |
| 664 // StrictMock<T> is a derived class of T. So, we use StrictMock<HasRef> and | |
| 665 // StrictMock<NoRef> to test that SupportsAddRefAndRelease works over | |
| 666 // inheritance. | |
| 667 EXPECT_TRUE(internal::SupportsAddRefAndRelease<StrictMock<HasRef> >::value); | |
| 668 EXPECT_FALSE(internal::SupportsAddRefAndRelease<StrictMock<NoRef> >::value); | |
| 669 | |
| 670 // This matters because the implementation creates a dummy class that | |
| 671 // inherits from the template type. | |
| 672 EXPECT_TRUE(internal::SupportsAddRefAndRelease<HasRefPrivateDtor>::value); | |
| 673 } | |
| 674 | |
| 675 // Unretained() wrapper support. | 653 // Unretained() wrapper support. |
| 676 // - Method bound to Unretained() non-const object. | 654 // - Method bound to Unretained() non-const object. |
| 677 // - Const method bound to Unretained() non-const object. | 655 // - Const method bound to Unretained() non-const object. |
| 678 // - Const method bound to Unretained() const object. | 656 // - Const method bound to Unretained() const object. |
| 679 TEST_F(BindTest, Unretained) { | 657 TEST_F(BindTest, Unretained) { |
| 680 EXPECT_CALL(no_ref_, VoidMethod0()); | 658 EXPECT_CALL(no_ref_, VoidMethod0()); |
| 681 EXPECT_CALL(no_ref_, VoidConstMethod0()).Times(2); | 659 EXPECT_CALL(no_ref_, VoidConstMethod0()).Times(2); |
| 682 | 660 |
| 683 Callback<void()> method_cb = | 661 Callback<void()> method_cb = |
| 684 Bind(&NoRef::VoidMethod0, Unretained(&no_ref_)); | 662 Bind(&NoRef::VoidMethod0, Unretained(&no_ref_)); |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1094 base::Callback<void(int)> null_cb; | 1072 base::Callback<void(int)> null_cb; |
| 1095 ASSERT_TRUE(null_cb.is_null()); | 1073 ASSERT_TRUE(null_cb.is_null()); |
| 1096 EXPECT_DEATH(base::Bind(null_cb, 42), ""); | 1074 EXPECT_DEATH(base::Bind(null_cb, 42), ""); |
| 1097 } | 1075 } |
| 1098 | 1076 |
| 1099 #endif // (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) && | 1077 #endif // (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) && |
| 1100 // GTEST_HAS_DEATH_TEST | 1078 // GTEST_HAS_DEATH_TEST |
| 1101 | 1079 |
| 1102 } // namespace | 1080 } // namespace |
| 1103 } // namespace base | 1081 } // namespace base |
| OLD | NEW |