Chromium Code Reviews| Index: mojo/public/cpp/bindings/tests/binding_set_unittest.cc |
| diff --git a/mojo/public/cpp/bindings/tests/binding_set_unittest.cc b/mojo/public/cpp/bindings/tests/binding_set_unittest.cc |
| index 790671a52eafa0ec93b4f3943c1e738089186dcf..b7f55b1a05fa9ba0b1373a96f3fe1e8b771f5033 100644 |
| --- a/mojo/public/cpp/bindings/tests/binding_set_unittest.cc |
| +++ b/mojo/public/cpp/bindings/tests/binding_set_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/run_loop.h" |
| #include "mojo/public/cpp/bindings/associated_binding_set.h" |
| #include "mojo/public/cpp/bindings/binding_set.h" |
| +#include "mojo/public/cpp/bindings/strong_binding_set.h" |
| #include "mojo/public/interfaces/bindings/tests/ping_service.mojom.h" |
| #include "mojo/public/interfaces/bindings/tests/test_associated_interfaces.mojom.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -349,6 +350,67 @@ TEST_F(BindingSetTest, AssociatedBindingSetConnectionErrorWithReason) { |
| run_loop.Run(); |
| } |
| +class PingInstanceCounter : public PingService { |
| + public: |
| + PingInstanceCounter() { ++instance_count; } |
| + ~PingInstanceCounter() override { --instance_count; } |
| + |
| + void Ping(const PingCallback& callback) override {} |
| + |
| + static int instance_count; |
| +}; |
| +int PingInstanceCounter::instance_count = 0; |
| + |
| +TEST_F(BindingSetTest, StrongBinding_Destructor) { |
| + PingServicePtr ping_a, ping_b; |
| + auto bindings = base::MakeUnique<StrongBindingSet<PingService>>(); |
| + |
| + bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| + mojo::MakeRequest(&ping_a)); |
| + EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| + |
| + bindings->AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| + mojo::MakeRequest(&ping_b)); |
| + EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| + |
| + bindings.reset(); |
| + EXPECT_EQ(0, PingInstanceCounter::instance_count); |
| +} |
| + |
| +TEST_F(BindingSetTest, StrongBinding_ConnectionError) { |
| + PingServicePtr ping_a, ping_b; |
| + StrongBindingSet<PingService> bindings; |
| + bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| + mojo::MakeRequest(&ping_a)); |
| + bindings.AddBinding(base::MakeUnique<PingInstanceCounter>(), |
| + mojo::MakeRequest(&ping_b)); |
| + EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| + |
| + ping_a.reset(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| + |
| + ping_b.reset(); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(0, PingInstanceCounter::instance_count); |
| +} |
| + |
| +TEST_F(BindingSetTest, StrongBinding_RemoveBinding) { |
| + PingServicePtr ping_a, ping_b; |
| + StrongBindingSet<PingService> bindings; |
| + BindingId binding_id_a = bindings.AddBinding( |
| + base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_a)); |
| + BindingId binding_id_b = bindings.AddBinding( |
| + base::MakeUnique<PingInstanceCounter>(), mojo::MakeRequest(&ping_b)); |
| + EXPECT_EQ(2, PingInstanceCounter::instance_count); |
| + |
| + EXPECT_TRUE(bindings.RemoveBinding(binding_id_a)); |
| + EXPECT_EQ(1, PingInstanceCounter::instance_count); |
| + |
| + EXPECT_TRUE(bindings.RemoveBinding(binding_id_b)); |
| + EXPECT_EQ(0, PingInstanceCounter::instance_count); |
|
xhwang
2017/02/16 03:54:49
What happens if you call RemoveBinding with a rand
alokp
2017/02/16 04:42:46
That would be a test for any BindingSet derived fr
|
| +} |
| + |
| } // namespace |
| } // namespace test |
| } // namespace mojo |