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

Side by Side Diff: base/bind_unittest.nc

Issue 8483003: Callback API Change: Reimplement Bind(); support IgnoreResult, full currying, and use less types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « base/bind_unittest.cc ('k') | base/callback.h » ('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) 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/callback.h" 5 #include "base/callback.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/memory/ref_counted.h"
7 8
8 namespace base { 9 namespace base {
9 10
10 // Do not put everything inside an anonymous namespace. If you do, many of the 11 // Do not put everything inside an anonymous namespace. If you do, many of the
11 // helper function declarations will generate unused definition warnings unless 12 // helper function declarations will generate unused definition warnings unless
12 // unused definition warnings. 13 // unused definition warnings.
13 14
14 static const int kParentValue = 1; 15 static const int kParentValue = 1;
15 static const int kChildValue = 2; 16 static const int kChildValue = 2;
16 17
17 class NoRef { 18 class NoRef {
18 public: 19 public:
19 void VoidMethod0() {} 20 void VoidMethod0() {}
20 void VoidConstMethod0() const {} 21 void VoidConstMethod0() const {}
21 int IntMethod0() { return 1; } 22 int IntMethod0() { return 1; }
22 }; 23 };
23 24
24 class HasRef : public NoRef { 25 class HasRef : public NoRef, public base::RefCounted<HasRef> {
25 public:
26 void AddRef(void) const {}
27 bool Release(void) const { return true; }
28 }; 26 };
29 27
30 class Parent { 28 class Parent {
31 public: 29 public:
32 void AddRef(void) const {} 30 void AddRef(void) const {}
33 void Release(void) const {} 31 void Release(void) const {}
34 virtual void VirtualSet() { value = kParentValue; } 32 virtual void VirtualSet() { value = kParentValue; }
35 void NonVirtualSet() { value = kParentValue; } 33 void NonVirtualSet() { value = kParentValue; }
36 int value; 34 int value;
37 }; 35 };
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 Callback<void(void)> method_bound_to_array_cb = 166 Callback<void(void)> method_bound_to_array_cb =
169 Bind(&HasRef::VoidMethod0, p); 167 Bind(&HasRef::VoidMethod0, p);
170 method_bound_to_array_cb.Run(); 168 method_bound_to_array_cb.Run();
171 } 169 }
172 170
173 #elif defined(NCTEST_NO_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"creating array with negative size"] 171 #elif defined(NCTEST_NO_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"creating array with negative size"]
174 172
175 // Refcounted types should not be bound as a raw pointer. 173 // Refcounted types should not be bound as a raw pointer.
176 void WontCompile() { 174 void WontCompile() {
177 HasRef for_raw_ptr; 175 HasRef for_raw_ptr;
176 int a;
177 Callback<void(void)> ref_count_as_raw_ptr_a =
178 Bind(&VoidPolymorphic1<int*>, &a);
178 Callback<void(void)> ref_count_as_raw_ptr = 179 Callback<void(void)> ref_count_as_raw_ptr =
179 Bind(&VoidPolymorphic1<HasRef*>, &for_raw_ptr); 180 Bind(&VoidPolymorphic1<HasRef*>, &for_raw_ptr);
180 } 181 }
181 182
182 #elif defined(NCTEST_WEAKPTR_BIND_MUST_RETURN_VOID) // [r"creating array with n egative size"] 183 #elif defined(NCTEST_WEAKPTR_BIND_MUST_RETURN_VOID) // [r"creating array with n egative size"]
183 184
184 // WeakPtrs cannot be bound to methods with return types. 185 // WeakPtrs cannot be bound to methods with return types.
185 void WontCompile() { 186 void WontCompile() {
186 NoRef no_ref; 187 NoRef no_ref;
187 WeakPtrFactory<NoRef> weak_factory(&no_ref); 188 WeakPtrFactory<NoRef> weak_factory(&no_ref);
188 Callback<int(void)> weak_ptr_with_non_void_return_type = 189 Callback<int(void)> weak_ptr_with_non_void_return_type =
189 Bind(&NoRef::IntMethod0, weak_factory.GetWeakPtr()); 190 Bind(&NoRef::IntMethod0, weak_factory.GetWeakPtr());
190 weak_ptr_with_non_void_return_type.Run(); 191 weak_ptr_with_non_void_return_type.Run();
191 } 192 }
192 193
193 #elif defined(NCTEST_DISALLOW_ASSIGN_DIFFERINT_TYPES) // [r"creating array with negative size"] 194 #elif defined(NCTEST_DISALLOW_ASSIGN_DIFFERINT_TYPES) // [r"invalid conversion from"]
194 195
195 // Bind result cannot be assigned to Callbacks with a mismatching type. 196 // Bind result cannot be assigned to Callbacks with a mismatching type.
196 void WontCompile() { 197 void WontCompile() {
197 Closure callback_mismatches_bind_type = Bind(&VoidPolymorphic1<int>); 198 Closure callback_mismatches_bind_type = Bind(&VoidPolymorphic1<int>);
198 } 199 }
199 200
200 #endif 201 #endif
201 202
202 } // namespace base 203 } // namespace base
OLDNEW
« no previous file with comments | « base/bind_unittest.cc ('k') | base/callback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698