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

Side by Side Diff: mojo/public/cpp/bindings/tests/binding_set_unittest.cc

Issue 2725133002: Mojo: Armed Watchers (Closed)
Patch Set: . Created 3 years, 9 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 <memory> 5 #include <memory>
6 #include <utility> 6 #include <utility>
7 7
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "mojo/public/cpp/bindings/associated_binding_set.h" 10 #include "mojo/public/cpp/bindings/associated_binding_set.h"
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 PingServiceAssociatedPtr ptr; 345 PingServiceAssociatedPtr ptr;
346 master_ptr->GetPing(MakeRequest(&ptr)); 346 master_ptr->GetPing(MakeRequest(&ptr));
347 347
348 ptr.ResetWithReason(2048u, "bye"); 348 ptr.ResetWithReason(2048u, "bye");
349 349
350 run_loop.Run(); 350 run_loop.Run();
351 } 351 }
352 352
353 class PingInstanceCounter : public PingService { 353 class PingInstanceCounter : public PingService {
354 public: 354 public:
355 PingInstanceCounter() { ++instance_count; } 355 explicit PingInstanceCounter(
356 ~PingInstanceCounter() override { --instance_count; } 356 const base::Closure& destruction_callback = base::Closure())
357 : destruction_callback_(destruction_callback) {
358 ++instance_count;
359 }
360
361 ~PingInstanceCounter() override {
362 --instance_count;
363 if (destruction_callback_)
364 destruction_callback_.Run();
365 }
357 366
358 void Ping(const PingCallback& callback) override {} 367 void Ping(const PingCallback& callback) override {}
359 368
369 const base::Closure destruction_callback_;
370
360 static int instance_count; 371 static int instance_count;
361 }; 372 };
362 int PingInstanceCounter::instance_count = 0; 373 int PingInstanceCounter::instance_count = 0;
363 374
364 TEST_F(BindingSetTest, StrongBinding_Destructor) { 375 TEST_F(BindingSetTest, StrongBinding_Destructor) {
365 PingServicePtr ping_a, ping_b; 376 PingServicePtr ping_a, ping_b;
366 auto bindings = base::MakeUnique<StrongBindingSet<PingService>>(); 377 auto bindings = base::MakeUnique<StrongBindingSet<PingService>>();
367 378
368 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), 379 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(),
369 mojo::MakeRequest(&ping_a)); 380 mojo::MakeRequest(&ping_a));
370 EXPECT_EQ(1, PingInstanceCounter::instance_count); 381 EXPECT_EQ(1, PingInstanceCounter::instance_count);
371 382
372 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), 383 bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(),
373 mojo::MakeRequest(&ping_b)); 384 mojo::MakeRequest(&ping_b));
374 EXPECT_EQ(2, PingInstanceCounter::instance_count); 385 EXPECT_EQ(2, PingInstanceCounter::instance_count);
375 386
376 bindings.reset(); 387 bindings.reset();
377 EXPECT_EQ(0, PingInstanceCounter::instance_count); 388 EXPECT_EQ(0, PingInstanceCounter::instance_count);
378 } 389 }
379 390
380 TEST_F(BindingSetTest, StrongBinding_ConnectionError) { 391 TEST_F(BindingSetTest, StrongBinding_ConnectionError) {
392 base::RunLoop loop_a, loop_b;
381 PingServicePtr ping_a, ping_b; 393 PingServicePtr ping_a, ping_b;
382 StrongBindingSet<PingService> bindings; 394 StrongBindingSet<PingService> bindings;
383 bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), 395 bindings.AddBinding(
384 mojo::MakeRequest(&ping_a)); 396 base::MakeUnique<PingInstanceCounter>(loop_a.QuitClosure()),
385 bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), 397 mojo::MakeRequest(&ping_a));
386 mojo::MakeRequest(&ping_b)); 398 bindings.AddBinding(
399 base::MakeUnique<PingInstanceCounter>(loop_b.QuitClosure()),
400 mojo::MakeRequest(&ping_b));
387 EXPECT_EQ(2, PingInstanceCounter::instance_count); 401 EXPECT_EQ(2, PingInstanceCounter::instance_count);
388 402
389 ping_a.reset(); 403 ping_a.reset();
390 base::RunLoop().RunUntilIdle(); 404 loop_a.Run();
391 EXPECT_EQ(1, PingInstanceCounter::instance_count); 405 EXPECT_EQ(1, PingInstanceCounter::instance_count);
392 406
393 ping_b.reset(); 407 ping_b.reset();
394 base::RunLoop().RunUntilIdle(); 408 loop_b.Run();
395 EXPECT_EQ(0, PingInstanceCounter::instance_count); 409 EXPECT_EQ(0, PingInstanceCounter::instance_count);
396 } 410 }
397 411
398 TEST_F(BindingSetTest, StrongBinding_RemoveBinding) { 412 TEST_F(BindingSetTest, StrongBinding_RemoveBinding) {
399 PingServicePtr ping_a, ping_b; 413 PingServicePtr ping_a, ping_b;
400 StrongBindingSet<PingService> bindings; 414 StrongBindingSet<PingService> bindings;
401 BindingId binding_id_a = bindings.AddBinding( 415 BindingId binding_id_a = bindings.AddBinding(
402 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_a)); 416 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_a));
403 BindingId binding_id_b = bindings.AddBinding( 417 BindingId binding_id_b = bindings.AddBinding(
404 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_b)); 418 base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_b));
405 EXPECT_EQ(2, PingInstanceCounter::instance_count); 419 EXPECT_EQ(2, PingInstanceCounter::instance_count);
406 420
407 EXPECT_TRUE(bindings.RemoveBinding(binding_id_a)); 421 EXPECT_TRUE(bindings.RemoveBinding(binding_id_a));
408 EXPECT_EQ(1, PingInstanceCounter::instance_count); 422 EXPECT_EQ(1, PingInstanceCounter::instance_count);
409 423
410 EXPECT_TRUE(bindings.RemoveBinding(binding_id_b)); 424 EXPECT_TRUE(bindings.RemoveBinding(binding_id_b));
411 EXPECT_EQ(0, PingInstanceCounter::instance_count); 425 EXPECT_EQ(0, PingInstanceCounter::instance_count);
412 } 426 }
413 427
414 } // namespace 428 } // namespace
415 } // namespace test 429 } // namespace test
416 } // namespace mojo 430 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698