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

Side by Side Diff: mojo/common/service_set_unittest.cc

Issue 1411063007: Add mojo::StrongBindingSet and use it in GeolocationServiceContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/common/service_set.h"
6
7 #include <vector>
8
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/mojo/src/mojo/public/interfaces/bindings/tests/sample_serv ice.mojom.h"
13
14 namespace mojo {
15 namespace {
16
17 class SampleServiceImpl : public sample::Service {
18 public:
19 explicit SampleServiceImpl(size_t* num_instances)
20 : num_instances_(num_instances) {
21 (*num_instances_)++;
22 }
23 ~SampleServiceImpl() override { (*num_instances_)--; }
24
25 // sample::Service overrides:
26 void Frobinate(sample::FooPtr foo,
27 BazOptions,
28 sample::PortPtr port,
29 const FrobinateCallback& callback) override {
30 callback.Run(0);
31 }
32 void GetPort(mojo::InterfaceRequest<sample::Port> port) override {}
33
34 private:
35 size_t* num_instances_;
36 };
37
38 } // namespace
39
40 class ServiceSetTest : public testing::Test {
41 protected:
42 SampleServiceImpl* AddService(
43 mojo::InterfaceRequest<sample::Service> request) {
44 return services_.AddService(request.Pass(), &num_instances_);
45 }
46
47 SampleServiceImpl* WaitForServiceError() {
48 SampleServiceImpl* service = nullptr;
49 base::RunLoop run_loop;
50 services_.set_connection_error_handler(base::Bind(
51 &ServiceSetTest::OnConnectionError, run_loop.QuitClosure(), &service));
52 run_loop.Run();
53 services_.set_connection_error_handler(
54 mojo::Callback<void(SampleServiceImpl*)>());
55 return service;
56 }
57
58 size_t num_instances() { return num_instances_; }
59
60 const ServiceSet<sample::Service, SampleServiceImpl>& services() const {
61 return services_;
62 }
63
64 ServiceSet<sample::Service, SampleServiceImpl>& mutable_services() {
65 return services_;
66 }
67
68 private:
69 static void OnConnectionError(const base::Closure& quit_closure,
70 SampleServiceImpl** service_out,
71 SampleServiceImpl* service) {
72 quit_closure.Run();
73 *service_out = service;
74 }
75
76 base::MessageLoop message_loop_;
77 size_t num_instances_ = 0;
78 ServiceSet<sample::Service, SampleServiceImpl> services_;
79 };
80
81 TEST_F(ServiceSetTest, Basic) {
82 EXPECT_EQ(0u, services().size());
83 EXPECT_TRUE(services().empty());
84
85 std::vector<SampleServiceImpl*> services_copy(services().begin(),
86 services().end());
87 EXPECT_TRUE(services_copy.empty());
88
89 sample::ServicePtr service_ptr;
90 SampleServiceImpl* service = AddService(mojo::GetProxy(&service_ptr));
91 sample::ServicePtr other_service_ptr;
92 SampleServiceImpl* other_service =
93 AddService(mojo::GetProxy(&other_service_ptr));
94 EXPECT_EQ(2u, num_instances());
95 EXPECT_EQ(2u, services().size());
96 EXPECT_FALSE(services().empty());
97
98 services_copy =
99 std::vector<SampleServiceImpl*>(services().begin(), services().end());
100 EXPECT_EQ(2u, services_copy.size());
101 service_ptr.reset();
102
103 EXPECT_EQ(service, WaitForServiceError());
104 EXPECT_EQ(1u, num_instances());
105
106 EXPECT_EQ(1u, services().size());
107 EXPECT_FALSE(services().empty());
108
109 services_copy =
110 std::vector<SampleServiceImpl*>(services().begin(), services().end());
111 EXPECT_EQ(1u, services_copy.size());
112 EXPECT_EQ(other_service, services_copy[0]);
113 }
114
115 TEST_F(ServiceSetTest, Erase) {
116 EXPECT_EQ(0u, services().size());
117 EXPECT_TRUE(services().empty());
118
119 std::vector<SampleServiceImpl*> services_copy(services().begin(),
120 services().end());
121 EXPECT_TRUE(services_copy.empty());
122
123 base::RunLoop run_loop;
124 sample::ServicePtr service_ptr;
125 SampleServiceImpl* service = AddService(mojo::GetProxy(&service_ptr));
126 sample::ServicePtr other_service_ptr;
127 AddService(mojo::GetProxy(&other_service_ptr));
128 EXPECT_EQ(2u, num_instances());
129 EXPECT_EQ(2u, services().size());
130 EXPECT_FALSE(services().empty());
131
132 services_copy =
133 std::vector<SampleServiceImpl*>(services().begin(), services().end());
134 EXPECT_EQ(2u, services_copy.size());
135 mutable_services().EraseService(service);
136 EXPECT_EQ(1u, num_instances());
137 EXPECT_EQ(1u, services().size());
138 EXPECT_FALSE(services().empty());
139
140 services_copy =
141 std::vector<SampleServiceImpl*>(services().begin(), services().end());
142 EXPECT_EQ(1u, services_copy.size());
143
144 service_ptr.set_connection_error_handler(run_loop.QuitClosure());
145 other_service_ptr.set_connection_error_handler(run_loop.QuitClosure());
146 run_loop.Run();
147 }
148
149 TEST_F(ServiceSetTest, EraseAll) {
150 EXPECT_EQ(0u, services().size());
151 EXPECT_TRUE(services().empty());
152
153 std::vector<SampleServiceImpl*> services_copy(services().begin(),
154 services().end());
155 EXPECT_TRUE(services_copy.empty());
156
157 sample::ServicePtr service_ptr;
158 AddService(mojo::GetProxy(&service_ptr));
159 EXPECT_EQ(1u, num_instances());
160 EXPECT_EQ(1u, services().size());
161 EXPECT_FALSE(services().empty());
162
163 services_copy =
164 std::vector<SampleServiceImpl*>(services().begin(), services().end());
165 EXPECT_EQ(1u, services_copy.size());
166 mutable_services().EraseAllServices();
167 EXPECT_EQ(0u, num_instances());
168 EXPECT_EQ(0u, services().size());
169 EXPECT_TRUE(services().empty());
170
171 services_copy =
172 std::vector<SampleServiceImpl*>(services().begin(), services().end());
173 EXPECT_TRUE(services_copy.empty());
174
175 base::RunLoop run_loop;
176 service_ptr.set_connection_error_handler(run_loop.QuitClosure());
177 run_loop.Run();
178 }
179
180 } // namespace mojo
OLDNEW
« mojo/common/service_set.h ('K') | « mojo/common/service_set.h ('k') | mojo/mojo_base.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698