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

Side by Side Diff: content/renderer/mojo/blink_connector_impl_unittest.cc

Issue 2643063002: Refactor Blink's ServiceConnector and add ability to mock in layout tests (Closed)
Patch Set: Fix build 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
(Empty)
1 // Copyright 2017 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 "content/renderer/mojo/blink_connector_impl.h"
6
7 #include "base/macros.h"
8 #include "base/memory/weak_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "services/service_manager/public/cpp/connector.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace content {
14
15 namespace {
16 class MockConnector : public service_manager::Connector {
17 public:
18 MockConnector(int* foo_baz_impl_requests, int* bar_baz_impl_requests)
19 : foo_baz_impl_requests_(foo_baz_impl_requests),
20 bar_baz_impl_requests_(bar_baz_impl_requests),
21 weak_factory_(this) {}
22
23 // Connector:
24 void StartService(const service_manager::Identity& identity,
25 service_manager::mojom::ServicePtr service,
26 service_manager::mojom::PIDReceiverRequest
27 pid_receiver_request) override {}
28 std::unique_ptr<service_manager::Connection> Connect(
29 const std::string& name) override {
30 return nullptr;
31 }
32 std::unique_ptr<service_manager::Connection> Connect(
33 const service_manager::Identity& target) override {
34 return nullptr;
35 }
36 void BindInterface(const service_manager::Identity& target,
37 const std::string& interface_name,
38 mojo::ScopedMessagePipeHandle interface_pipe) override;
39 std::unique_ptr<Connector> Clone() override { return nullptr; }
40 void BindConnectorRequest(
41 service_manager::mojom::ConnectorRequest request) override {}
42 base::WeakPtr<Connector> GetWeakPtr() override {
43 return weak_factory_.GetWeakPtr();
44 }
45
46 protected:
47 void OverrideBinderForTesting(const std::string& interface_name,
48 const TestApi::Binder& binder) override {}
49 void ClearBinderOverrides() override {}
50
51 private:
52 int* foo_baz_impl_requests_;
53 int* bar_baz_impl_requests_;
54 base::WeakPtrFactory<MockConnector> weak_factory_;
55 };
56
57 void MockConnector::BindInterface(
58 const service_manager::Identity& target,
59 const std::string& interface_name,
60 mojo::ScopedMessagePipeHandle interface_pipe) {
61 if (target.name() == "foo" && interface_name == "baz") {
62 (*foo_baz_impl_requests_)++;
63 return;
64 }
65
66 if (target.name() == "bar" && interface_name == "baz") {
67 (*bar_baz_impl_requests_)++;
68 return;
69 }
70
71 NOTREACHED();
72 }
73
74 } // namespace
75
76 class BlinkConnectorImplTest : public testing::Test {
77 public:
78 BlinkConnectorImplTest()
79 : foo_baz_impl_requests_(0),
80 bar_baz_impl_requests_(0),
81 foo_baz_override_requests_(0),
82 bar_baz_override_requests_(0),
83 connector_(base::MakeUnique<MockConnector>(&foo_baz_impl_requests_,
84 &bar_baz_impl_requests_)) {}
85
86 void OverrideFooBaz(mojo::ScopedMessagePipeHandle interface_pipe) {
87 foo_baz_override_requests_++;
88 }
89
90 void OverrideBarBaz(mojo::ScopedMessagePipeHandle interface_pipe) {
91 bar_baz_override_requests_++;
92 }
93
94 protected:
95 BlinkConnectorImpl* connector() { return &connector_; }
96 int foo_baz_impl_requests() { return foo_baz_impl_requests_; }
97 int bar_baz_impl_requests() { return bar_baz_impl_requests_; }
98 int foo_baz_override_requests() { return foo_baz_override_requests_; }
99 int bar_baz_override_requests() { return bar_baz_override_requests_; }
100
101 private:
102 base::MessageLoop loop_;
103 int foo_baz_impl_requests_;
104 int bar_baz_impl_requests_;
105 int foo_baz_override_requests_;
106 int bar_baz_override_requests_;
107 BlinkConnectorImpl connector_;
108
109 DISALLOW_COPY_AND_ASSIGN(BlinkConnectorImplTest);
110 };
111
112 TEST_F(BlinkConnectorImplTest, Basic) {
113 EXPECT_EQ(0, foo_baz_impl_requests());
114 EXPECT_EQ(0, bar_baz_impl_requests());
115
116 mojo::MessagePipe pipe1;
117 connector()->bindInterface("foo", "baz", std::move(pipe1.handle0));
118 EXPECT_EQ(1, foo_baz_impl_requests());
119 EXPECT_EQ(0, bar_baz_impl_requests());
120
121 mojo::MessagePipe pipe2;
122 connector()->bindInterface("bar", "baz", std::move(pipe2.handle0));
123 EXPECT_EQ(1, foo_baz_impl_requests());
124 EXPECT_EQ(1, bar_baz_impl_requests());
125 }
126
127 TEST_F(BlinkConnectorImplTest, Override) {
128 EXPECT_EQ(0, foo_baz_impl_requests());
129 EXPECT_EQ(0, foo_baz_override_requests());
130 EXPECT_EQ(0, bar_baz_impl_requests());
131
132 connector()->AddOverrideForTesting(
133 "foo", "baz",
134 base::Bind(&BlinkConnectorImplTest::OverrideFooBaz,
135 base::Unretained(this)));
136
137 mojo::MessagePipe pipe1;
138 connector()->bindInterface("foo", "baz", std::move(pipe1.handle0));
139 EXPECT_EQ(0, foo_baz_impl_requests());
140 EXPECT_EQ(1, foo_baz_override_requests());
141 EXPECT_EQ(0, bar_baz_impl_requests());
142
143 mojo::MessagePipe pipe2;
144 connector()->bindInterface("bar", "baz", std::move(pipe2.handle0));
145 EXPECT_EQ(0, foo_baz_impl_requests());
146 EXPECT_EQ(1, foo_baz_override_requests());
147 EXPECT_EQ(1, bar_baz_impl_requests());
148
149 connector()->ClearOverridesForTesting();
150
151 mojo::MessagePipe pipe3;
152 connector()->bindInterface("foo", "baz", std::move(pipe3.handle0));
153 EXPECT_EQ(1, foo_baz_impl_requests());
154 EXPECT_EQ(1, foo_baz_override_requests());
155 EXPECT_EQ(1, bar_baz_impl_requests());
156 }
157
158 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/mojo/blink_connector_impl.cc ('k') | content/renderer/mojo/blink_connector_js_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698