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

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* CreateService(
43 mojo::InterfaceRequest<sample::Service> request) {
44 return services_.CreateService(request.Pass(), &num_instances_);
45 }
46
47 SampleServiceImpl* WaitForServiceError() {
48 SampleServiceImpl* service = nullptr;
49 base::RunLoop run_loop;
50 services_.set_connection_error_handler(
51 base::Bind(&ServiceSetTest::OnConnectionError, base::Unretained(this),
52 run_loop.QuitClosure(), num_instances_, &service));
53 run_loop.Run();
54 services_.set_connection_error_handler(
55 mojo::Callback<void(SampleServiceImpl*)>());
56 return service;
57 }
58
59 size_t num_instances() { return num_instances_; }
60
61 const ServiceSet<sample::Service, SampleServiceImpl>& services() const {
62 return services_;
63 }
64
65 ServiceSet<sample::Service, SampleServiceImpl>& mutable_services() {
66 return services_;
67 }
68
69 private:
70 void OnConnectionError(const base::Closure& quit_closure,
71 size_t num_instances,
72 SampleServiceImpl** service_out,
73 SampleServiceImpl* service) {
74 EXPECT_EQ(num_instances, num_instances_);
75 quit_closure.Run();
76 *service_out = service;
77 }
78
79 base::MessageLoop message_loop_;
80 size_t num_instances_ = 0;
81 ServiceSet<sample::Service, SampleServiceImpl> services_;
82 };
83
84 TEST_F(ServiceSetTest, Basic) {
85 EXPECT_EQ(0u, services().size());
86 EXPECT_TRUE(services().empty());
87
88 std::vector<SampleServiceImpl*> services_copy(services().begin(),
89 services().end());
90 EXPECT_TRUE(services_copy.empty());
91
92 sample::ServicePtr service_ptr;
93 SampleServiceImpl* service = CreateService(mojo::GetProxy(&service_ptr));
94 sample::ServicePtr other_service_ptr;
95 SampleServiceImpl* other_service =
96 CreateService(mojo::GetProxy(&other_service_ptr));
97 EXPECT_EQ(2u, num_instances());
98 EXPECT_EQ(2u, services().size());
99 EXPECT_FALSE(services().empty());
100
101 services_copy =
102 std::vector<SampleServiceImpl*>(services().begin(), services().end());
103 EXPECT_EQ(2u, services_copy.size());
104 service_ptr.reset();
105
106 EXPECT_EQ(service, WaitForServiceError());
107 EXPECT_EQ(1u, num_instances());
108
109 EXPECT_EQ(1u, services().size());
110 EXPECT_FALSE(services().empty());
111
112 services_copy =
113 std::vector<SampleServiceImpl*>(services().begin(), services().end());
114 EXPECT_EQ(1u, services_copy.size());
115 EXPECT_EQ(other_service, services_copy[0]);
116 }
117
118 TEST_F(ServiceSetTest, Destroy) {
119 EXPECT_EQ(0u, services().size());
120 EXPECT_TRUE(services().empty());
121
122 std::vector<SampleServiceImpl*> services_copy(services().begin(),
123 services().end());
124 EXPECT_TRUE(services_copy.empty());
125
126 base::RunLoop run_loop;
127 sample::ServicePtr service_ptr;
128 SampleServiceImpl* service = CreateService(mojo::GetProxy(&service_ptr));
129 sample::ServicePtr other_service_ptr;
130 CreateService(mojo::GetProxy(&other_service_ptr));
131 EXPECT_EQ(2u, num_instances());
132 EXPECT_EQ(2u, services().size());
133 EXPECT_FALSE(services().empty());
134
135 services_copy =
136 std::vector<SampleServiceImpl*>(services().begin(), services().end());
137 EXPECT_EQ(2u, services_copy.size());
138 mutable_services().DestroyService(service);
139 EXPECT_EQ(1u, num_instances());
140 EXPECT_EQ(1u, services().size());
141 EXPECT_FALSE(services().empty());
142
143 services_copy =
144 std::vector<SampleServiceImpl*>(services().begin(), services().end());
145 EXPECT_EQ(1u, services_copy.size());
146
147 service_ptr.set_connection_error_handler(run_loop.QuitClosure());
148 other_service_ptr.set_connection_error_handler(run_loop.QuitClosure());
149 run_loop.Run();
150 }
151
152 TEST_F(ServiceSetTest, Clear) {
153 EXPECT_EQ(0u, services().size());
154 EXPECT_TRUE(services().empty());
155
156 std::vector<SampleServiceImpl*> services_copy(services().begin(),
157 services().end());
158 EXPECT_TRUE(services_copy.empty());
159
160 sample::ServicePtr service_ptr;
161 CreateService(mojo::GetProxy(&service_ptr));
162 EXPECT_EQ(1u, num_instances());
163 EXPECT_EQ(1u, services().size());
164 EXPECT_FALSE(services().empty());
165
166 services_copy =
167 std::vector<SampleServiceImpl*>(services().begin(), services().end());
168 EXPECT_EQ(1u, services_copy.size());
169 mutable_services().clear();
170 EXPECT_EQ(0u, num_instances());
171 EXPECT_EQ(0u, services().size());
172 EXPECT_TRUE(services().empty());
173
174 services_copy =
175 std::vector<SampleServiceImpl*>(services().begin(), services().end());
176 EXPECT_TRUE(services_copy.empty());
177
178 base::RunLoop run_loop;
179 service_ptr.set_connection_error_handler(run_loop.QuitClosure());
180 run_loop.Run();
181 }
182
183 } // 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