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

Side by Side Diff: base/bind_unittest.cc

Issue 1512833002: Remove unbound base::Bind overload (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 5 years 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
« base/bind.h ('K') | « base/bind_internal.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) 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 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 T PassThru(T scoper) { 155 T PassThru(T scoper) {
156 return scoper; 156 return scoper;
157 } 157 }
158 158
159 // Some test functions that we can Bind to. 159 // Some test functions that we can Bind to.
160 template <typename T> 160 template <typename T>
161 T PolymorphicIdentity(T t) { 161 T PolymorphicIdentity(T t) {
162 return t; 162 return t;
163 } 163 }
164 164
165 template <typename T> 165 template <typename... Ts>
166 void VoidPolymorphic1(T t) { 166 struct VoidPolymorphic {
danakj 2015/12/16 20:00:41 I'm not opposed, but why wrap the method in a stru
tzik 2015/12/17 01:42:36 This is for gcc compilation error. Taking the fun
danakj 2015/12/18 00:08:58 Ah, cool. Thanks!
167 } 167 static void Run(Ts... t) {}
168 };
168 169
169 int Identity(int n) { 170 int Identity(int n) {
170 return n; 171 return n;
171 } 172 }
172 173
173 int ArrayGet(const int array[], int n) { 174 int ArrayGet(const int array[], int n) {
174 return array[n]; 175 return array[n];
175 } 176 }
176 177
177 int Sum(int a, int b, int c, int d, int e, int f) { 178 int Sum(int a, int b, int c, int d, int e, int f) {
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 493
493 // Unbound argument type support tests. 494 // Unbound argument type support tests.
494 // - Unbound value. 495 // - Unbound value.
495 // - Unbound pointer. 496 // - Unbound pointer.
496 // - Unbound reference. 497 // - Unbound reference.
497 // - Unbound const reference. 498 // - Unbound const reference.
498 // - Unbound unsized array. 499 // - Unbound unsized array.
499 // - Unbound sized array. 500 // - Unbound sized array.
500 // - Unbound array-of-arrays. 501 // - Unbound array-of-arrays.
501 TEST_F(BindTest, UnboundArgumentTypeSupport) { 502 TEST_F(BindTest, UnboundArgumentTypeSupport) {
502 Callback<void(int)> unbound_value_cb = Bind(&VoidPolymorphic1<int>); 503 Callback<void(int)> unbound_value_cb = Bind(&VoidPolymorphic<int>::Run);
503 Callback<void(int*)> unbound_pointer_cb = Bind(&VoidPolymorphic1<int*>); 504 Callback<void(int*)> unbound_pointer_cb = Bind(&VoidPolymorphic<int*>::Run);
504 Callback<void(int&)> unbound_ref_cb = Bind(&VoidPolymorphic1<int&>); 505 Callback<void(int&)> unbound_ref_cb = Bind(&VoidPolymorphic<int&>::Run);
505 Callback<void(const int&)> unbound_const_ref_cb = 506 Callback<void(const int&)> unbound_const_ref_cb =
506 Bind(&VoidPolymorphic1<const int&>); 507 Bind(&VoidPolymorphic<const int&>::Run);
507 Callback<void(int[])> unbound_unsized_array_cb = 508 Callback<void(int[])> unbound_unsized_array_cb =
508 Bind(&VoidPolymorphic1<int[]>); 509 Bind(&VoidPolymorphic<int[]>::Run);
509 Callback<void(int[2])> unbound_sized_array_cb = 510 Callback<void(int[2])> unbound_sized_array_cb =
510 Bind(&VoidPolymorphic1<int[2]>); 511 Bind(&VoidPolymorphic<int[2]>::Run);
511 Callback<void(int[][2])> unbound_array_of_arrays_cb = 512 Callback<void(int[][2])> unbound_array_of_arrays_cb =
512 Bind(&VoidPolymorphic1<int[][2]>); 513 Bind(&VoidPolymorphic<int[][2]>::Run);
514
515 Callback<void(int&)> unbound_ref_with_bound_arg =
516 Bind(&VoidPolymorphic<int, int&>::Run, 1);
513 } 517 }
514 518
515 // Function with unbound reference parameter. 519 // Function with unbound reference parameter.
516 // - Original parameter is modified by callback. 520 // - Original parameter is modified by callback.
517 TEST_F(BindTest, UnboundReferenceSupport) { 521 TEST_F(BindTest, UnboundReferenceSupport) {
518 int n = 0; 522 int n = 0;
519 Callback<void(int&)> unbound_ref_cb = Bind(&RefArgSet); 523 Callback<void(int&)> unbound_ref_cb = Bind(&RefArgSet);
520 unbound_ref_cb.Run(n); 524 unbound_ref_cb.Run(n);
521 EXPECT_EQ(2, n); 525 EXPECT_EQ(2, n);
522 } 526 }
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 // - Forwarded arguments are only copied once. 807 // - Forwarded arguments are only copied once.
804 // - Forwarded arguments with coercions are only copied twice (once for the 808 // - Forwarded arguments with coercions are only copied twice (once for the
805 // coercion, and one for the final dispatch). 809 // coercion, and one for the final dispatch).
806 TEST_F(BindTest, ArgumentCopies) { 810 TEST_F(BindTest, ArgumentCopies) {
807 int copies = 0; 811 int copies = 0;
808 int assigns = 0; 812 int assigns = 0;
809 813
810 CopyCounter counter(&copies, &assigns); 814 CopyCounter counter(&copies, &assigns);
811 815
812 Callback<void(void)> copy_cb = 816 Callback<void(void)> copy_cb =
813 Bind(&VoidPolymorphic1<CopyCounter>, counter); 817 Bind(&VoidPolymorphic<CopyCounter>::Run, counter);
814 EXPECT_GE(1, copies); 818 EXPECT_GE(1, copies);
815 EXPECT_EQ(0, assigns); 819 EXPECT_EQ(0, assigns);
816 820
817 copies = 0; 821 copies = 0;
818 assigns = 0; 822 assigns = 0;
819 Callback<void(CopyCounter)> forward_cb = 823 Callback<void(CopyCounter)> forward_cb =
820 Bind(&VoidPolymorphic1<CopyCounter>); 824 Bind(&VoidPolymorphic<CopyCounter>::Run);
821 forward_cb.Run(counter); 825 forward_cb.Run(counter);
822 EXPECT_GE(1, copies); 826 EXPECT_GE(1, copies);
823 EXPECT_EQ(0, assigns); 827 EXPECT_EQ(0, assigns);
824 828
825 copies = 0; 829 copies = 0;
826 assigns = 0; 830 assigns = 0;
827 DerivedCopyCounter derived(&copies, &assigns); 831 DerivedCopyCounter derived(&copies, &assigns);
828 Callback<void(CopyCounter)> coerce_cb = 832 Callback<void(CopyCounter)> coerce_cb =
829 Bind(&VoidPolymorphic1<CopyCounter>); 833 Bind(&VoidPolymorphic<CopyCounter>::Run);
830 coerce_cb.Run(CopyCounter(derived)); 834 coerce_cb.Run(CopyCounter(derived));
831 EXPECT_GE(2, copies); 835 EXPECT_GE(2, copies);
832 EXPECT_EQ(0, assigns); 836 EXPECT_EQ(0, assigns);
833 } 837 }
834 838
835 // Callback construction and assignment tests. 839 // Callback construction and assignment tests.
836 // - Construction from an InvokerStorageHolder should not cause ref/deref. 840 // - Construction from an InvokerStorageHolder should not cause ref/deref.
837 // - Assignment from other callback should only cause one ref 841 // - Assignment from other callback should only cause one ref
838 // 842 //
839 // TODO(ajwong): Is there actually a way to test this? 843 // TODO(ajwong): Is there actually a way to test this?
(...skipping 26 matching lines...) Expand all
866 base::Callback<void(int)> null_cb; 870 base::Callback<void(int)> null_cb;
867 ASSERT_TRUE(null_cb.is_null()); 871 ASSERT_TRUE(null_cb.is_null());
868 EXPECT_DEATH(base::Bind(null_cb, 42), ""); 872 EXPECT_DEATH(base::Bind(null_cb, 42), "");
869 } 873 }
870 874
871 #endif // (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) && 875 #endif // (!defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)) &&
872 // GTEST_HAS_DEATH_TEST 876 // GTEST_HAS_DEATH_TEST
873 877
874 } // namespace 878 } // namespace
875 } // namespace base 879 } // namespace base
OLDNEW
« base/bind.h ('K') | « base/bind_internal.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698