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

Side by Side Diff: base/observer_list_unittest.cc

Issue 2418933004: Reduce usage of FOR_EACH_OBSERVER macro in base (Closed)
Patch Set: Created 4 years, 2 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/message_loop/message_loop.cc ('k') | base/process/port_provider_mac.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/observer_list.h" 5 #include "base/observer_list.h"
6 #include "base/observer_list_threadsafe.h" 6 #include "base/observer_list_threadsafe.h"
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 ObserverList<Foo> observer_list; 194 ObserverList<Foo> observer_list;
195 Adder a(1), b(-1), c(1), d(-1), e(-1); 195 Adder a(1), b(-1), c(1), d(-1), e(-1);
196 Disrupter evil(&observer_list, &c); 196 Disrupter evil(&observer_list, &c);
197 197
198 observer_list.AddObserver(&a); 198 observer_list.AddObserver(&a);
199 observer_list.AddObserver(&b); 199 observer_list.AddObserver(&b);
200 200
201 EXPECT_TRUE(observer_list.HasObserver(&a)); 201 EXPECT_TRUE(observer_list.HasObserver(&a));
202 EXPECT_FALSE(observer_list.HasObserver(&c)); 202 EXPECT_FALSE(observer_list.HasObserver(&c));
203 203
204 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 204 for (auto& observer : observer_list)
205 observer.Observe(10);
205 206
206 observer_list.AddObserver(&evil); 207 observer_list.AddObserver(&evil);
207 observer_list.AddObserver(&c); 208 observer_list.AddObserver(&c);
208 observer_list.AddObserver(&d); 209 observer_list.AddObserver(&d);
209 210
210 // Removing an observer not in the list should do nothing. 211 // Removing an observer not in the list should do nothing.
211 observer_list.RemoveObserver(&e); 212 observer_list.RemoveObserver(&e);
212 213
213 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 214 for (auto& observer : observer_list)
215 observer.Observe(10);
214 216
215 EXPECT_EQ(20, a.total); 217 EXPECT_EQ(20, a.total);
216 EXPECT_EQ(-20, b.total); 218 EXPECT_EQ(-20, b.total);
217 EXPECT_EQ(0, c.total); 219 EXPECT_EQ(0, c.total);
218 EXPECT_EQ(-10, d.total); 220 EXPECT_EQ(-10, d.total);
219 EXPECT_EQ(0, e.total); 221 EXPECT_EQ(0, e.total);
220 } 222 }
221 223
222 TEST(ObserverListTest, DisruptSelf) { 224 TEST(ObserverListTest, DisruptSelf) {
223 ObserverList<Foo> observer_list; 225 ObserverList<Foo> observer_list;
224 Adder a(1), b(-1), c(1), d(-1); 226 Adder a(1), b(-1), c(1), d(-1);
225 Disrupter evil(&observer_list, true); 227 Disrupter evil(&observer_list, true);
226 228
227 observer_list.AddObserver(&a); 229 observer_list.AddObserver(&a);
228 observer_list.AddObserver(&b); 230 observer_list.AddObserver(&b);
229 231
230 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 232 for (auto& observer : observer_list)
233 observer.Observe(10);
231 234
232 observer_list.AddObserver(&evil); 235 observer_list.AddObserver(&evil);
233 observer_list.AddObserver(&c); 236 observer_list.AddObserver(&c);
234 observer_list.AddObserver(&d); 237 observer_list.AddObserver(&d);
235 238
236 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 239 for (auto& observer : observer_list)
240 observer.Observe(10);
237 241
238 EXPECT_EQ(20, a.total); 242 EXPECT_EQ(20, a.total);
239 EXPECT_EQ(-20, b.total); 243 EXPECT_EQ(-20, b.total);
240 EXPECT_EQ(10, c.total); 244 EXPECT_EQ(10, c.total);
241 EXPECT_EQ(-10, d.total); 245 EXPECT_EQ(-10, d.total);
242 } 246 }
243 247
244 TEST(ObserverListTest, DisruptBefore) { 248 TEST(ObserverListTest, DisruptBefore) {
245 ObserverList<Foo> observer_list; 249 ObserverList<Foo> observer_list;
246 Adder a(1), b(-1), c(1), d(-1); 250 Adder a(1), b(-1), c(1), d(-1);
247 Disrupter evil(&observer_list, &b); 251 Disrupter evil(&observer_list, &b);
248 252
249 observer_list.AddObserver(&a); 253 observer_list.AddObserver(&a);
250 observer_list.AddObserver(&b); 254 observer_list.AddObserver(&b);
251 observer_list.AddObserver(&evil); 255 observer_list.AddObserver(&evil);
252 observer_list.AddObserver(&c); 256 observer_list.AddObserver(&c);
253 observer_list.AddObserver(&d); 257 observer_list.AddObserver(&d);
254 258
255 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 259 for (auto& observer : observer_list)
256 FOR_EACH_OBSERVER(Foo, observer_list, Observe(10)); 260 observer.Observe(10);
261 for (auto& observer : observer_list)
262 observer.Observe(10);
257 263
258 EXPECT_EQ(20, a.total); 264 EXPECT_EQ(20, a.total);
259 EXPECT_EQ(-10, b.total); 265 EXPECT_EQ(-10, b.total);
260 EXPECT_EQ(20, c.total); 266 EXPECT_EQ(20, c.total);
261 EXPECT_EQ(-20, d.total); 267 EXPECT_EQ(-20, d.total);
262 } 268 }
263 269
264 TEST(ObserverListThreadSafeTest, BasicTest) { 270 TEST(ObserverListThreadSafeTest, BasicTest) {
265 MessageLoop loop; 271 MessageLoop loop;
266 272
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 TEST(ObserverListTest, Existing) { 494 TEST(ObserverListTest, Existing) {
489 ObserverList<Foo> observer_list(ObserverList<Foo>::NOTIFY_EXISTING_ONLY); 495 ObserverList<Foo> observer_list(ObserverList<Foo>::NOTIFY_EXISTING_ONLY);
490 Adder a(1); 496 Adder a(1);
491 AddInObserve<ObserverList<Foo> > b(&observer_list); 497 AddInObserve<ObserverList<Foo> > b(&observer_list);
492 Adder c(1); 498 Adder c(1);
493 b.SetToAdd(&c); 499 b.SetToAdd(&c);
494 500
495 observer_list.AddObserver(&a); 501 observer_list.AddObserver(&a);
496 observer_list.AddObserver(&b); 502 observer_list.AddObserver(&b);
497 503
498 FOR_EACH_OBSERVER(Foo, observer_list, Observe(1)); 504 for (auto& observer : observer_list)
505 observer.Observe(1);
499 506
500 EXPECT_FALSE(b.to_add_); 507 EXPECT_FALSE(b.to_add_);
501 // B's adder should not have been notified because it was added during 508 // B's adder should not have been notified because it was added during
502 // notification. 509 // notification.
503 EXPECT_EQ(0, c.total); 510 EXPECT_EQ(0, c.total);
504 511
505 // Notify again to make sure b's adder is notified. 512 // Notify again to make sure b's adder is notified.
506 FOR_EACH_OBSERVER(Foo, observer_list, Observe(1)); 513 for (auto& observer : observer_list)
514 observer.Observe(1);
507 EXPECT_EQ(1, c.total); 515 EXPECT_EQ(1, c.total);
508 } 516 }
509 517
510 // Same as above, but for ObserverListThreadSafe 518 // Same as above, but for ObserverListThreadSafe
511 TEST(ObserverListThreadSafeTest, Existing) { 519 TEST(ObserverListThreadSafeTest, Existing) {
512 MessageLoop loop; 520 MessageLoop loop;
513 scoped_refptr<ObserverListThreadSafe<Foo> > observer_list( 521 scoped_refptr<ObserverListThreadSafe<Foo> > observer_list(
514 new ObserverListThreadSafe<Foo>(ObserverList<Foo>::NOTIFY_EXISTING_ONLY)); 522 new ObserverListThreadSafe<Foo>(ObserverList<Foo>::NOTIFY_EXISTING_ONLY));
515 Adder a(1); 523 Adder a(1);
516 AddInObserve<ObserverListThreadSafe<Foo> > b(observer_list.get()); 524 AddInObserve<ObserverListThreadSafe<Foo> > b(observer_list.get());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 bool added_; 562 bool added_;
555 Adder adder_; 563 Adder adder_;
556 }; 564 };
557 565
558 TEST(ObserverListTest, ClearNotifyAll) { 566 TEST(ObserverListTest, ClearNotifyAll) {
559 ObserverList<Foo> observer_list; 567 ObserverList<Foo> observer_list;
560 AddInClearObserve a(&observer_list); 568 AddInClearObserve a(&observer_list);
561 569
562 observer_list.AddObserver(&a); 570 observer_list.AddObserver(&a);
563 571
564 FOR_EACH_OBSERVER(Foo, observer_list, Observe(1)); 572 for (auto& observer : observer_list)
573 observer.Observe(1);
565 EXPECT_TRUE(a.added()); 574 EXPECT_TRUE(a.added());
566 EXPECT_EQ(1, a.adder().total) 575 EXPECT_EQ(1, a.adder().total)
567 << "Adder should observe once and have sum of 1."; 576 << "Adder should observe once and have sum of 1.";
568 } 577 }
569 578
570 TEST(ObserverListTest, ClearNotifyExistingOnly) { 579 TEST(ObserverListTest, ClearNotifyExistingOnly) {
571 ObserverList<Foo> observer_list(ObserverList<Foo>::NOTIFY_EXISTING_ONLY); 580 ObserverList<Foo> observer_list(ObserverList<Foo>::NOTIFY_EXISTING_ONLY);
572 AddInClearObserve a(&observer_list); 581 AddInClearObserve a(&observer_list);
573 582
574 observer_list.AddObserver(&a); 583 observer_list.AddObserver(&a);
575 584
576 FOR_EACH_OBSERVER(Foo, observer_list, Observe(1)); 585 for (auto& observer : observer_list)
586 observer.Observe(1);
577 EXPECT_TRUE(a.added()); 587 EXPECT_TRUE(a.added());
578 EXPECT_EQ(0, a.adder().total) 588 EXPECT_EQ(0, a.adder().total)
579 << "Adder should not observe, so sum should still be 0."; 589 << "Adder should not observe, so sum should still be 0.";
580 } 590 }
581 591
582 class ListDestructor : public Foo { 592 class ListDestructor : public Foo {
583 public: 593 public:
584 explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {} 594 explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {}
585 ~ListDestructor() override {} 595 ~ListDestructor() override {}
586 596
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 // However, the first Observe() call will add a second observer: at this 925 // However, the first Observe() call will add a second observer: at this
916 // point, it != observer_list.end() should be true, and Observe() should be 926 // point, it != observer_list.end() should be true, and Observe() should be
917 // called on the newly added observer on the next iteration of the loop. 927 // called on the newly added observer on the next iteration of the loop.
918 observer.Observe(10); 928 observer.Observe(10);
919 } 929 }
920 930
921 EXPECT_EQ(-10, b.total); 931 EXPECT_EQ(-10, b.total);
922 } 932 }
923 933
924 } // namespace base 934 } // namespace base
OLDNEW
« no previous file with comments | « base/message_loop/message_loop.cc ('k') | base/process/port_provider_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698