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

Unified Diff: mojo/public/cpp/bindings/tests/binding_set_unittest.cc

Issue 2692413002: Implements mojo::StrongBindingSet. (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698