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

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: Rebase Created 3 years, 11 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/message_loop/message_loop.h"
9 #include "services/service_manager/public/cpp/connector.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace content {
13
14 namespace {
15 class MockConnector : public service_manager::Connector {
16 public:
17 MockConnector(int* foo_baz_impl_requests, int* bar_baz_impl_requests)
18 : foo_baz_impl_requests_(foo_baz_impl_requests),
19 bar_baz_impl_requests_(bar_baz_impl_requests) {}
20
21 // Connector:
22 void StartService(const service_manager::Identity& identity,
23 service_manager::mojom::ServicePtr service,
24 service_manager::mojom::PIDReceiverRequest
25 pid_receiver_request) override {}
26 std::unique_ptr<service_manager::Connection> Connect(
27 const std::string& name) override {
28 return nullptr;
29 }
30 std::unique_ptr<service_manager::Connection> Connect(
31 const service_manager::Identity& target) override {
32 return nullptr;
33 }
34 void BindInterface(const service_manager::Identity& target,
35 const std::string& interface_name,
36 mojo::ScopedMessagePipeHandle interface_pipe) override;
37 std::unique_ptr<Connector> Clone() override { return nullptr; }
38 void BindConnectorRequest(
39 service_manager::mojom::ConnectorRequest request) override {}
40
41 private:
42 int* foo_baz_impl_requests_;
43 int* bar_baz_impl_requests_;
44 };
45
46 void MockConnector::BindInterface(
47 const service_manager::Identity& target,
48 const std::string& interface_name,
49 mojo::ScopedMessagePipeHandle interface_pipe) {
50 if (target.name() == "foo" && interface_name == "baz") {
51 (*foo_baz_impl_requests_)++;
52 return;
53 }
54
55 if (target.name() == "bar" && interface_name == "baz") {
56 (*bar_baz_impl_requests_)++;
57 return;
58 }
59
60 NOTREACHED();
61 }
62
63 } // namespace
64
65 class BlinkConnectorImplTest : public testing::Test {
66 public:
67 BlinkConnectorImplTest()
68 : foo_baz_impl_requests_(0),
69 bar_baz_impl_requests_(0),
70 foo_baz_override_requests_(0),
71 bar_baz_override_requests_(0),
72 connector_(base::MakeUnique<MockConnector>(&foo_baz_impl_requests_,
73 &bar_baz_impl_requests_)) {}
74
75 void OverrideFooBaz(mojo::ScopedMessagePipeHandle interface_pipe) {
76 foo_baz_override_requests_++;
77 }
78
79 void OverrideBarBaz(mojo::ScopedMessagePipeHandle interface_pipe) {
80 bar_baz_override_requests_++;
81 }
82
83 protected:
84 BlinkConnectorImpl* connector() { return &connector_; }
85 int foo_baz_impl_requests() { return foo_baz_impl_requests_; }
86 int bar_baz_impl_requests() { return bar_baz_impl_requests_; }
87 int foo_baz_override_requests() { return foo_baz_override_requests_; }
88 int bar_baz_override_requests() { return bar_baz_override_requests_; }
89
90 private:
91 base::MessageLoop loop_;
92 int foo_baz_impl_requests_;
93 int bar_baz_impl_requests_;
94 int foo_baz_override_requests_;
95 int bar_baz_override_requests_;
96 BlinkConnectorImpl connector_;
97
98 DISALLOW_COPY_AND_ASSIGN(BlinkConnectorImplTest);
99 };
100
101 TEST_F(BlinkConnectorImplTest, Basic) {
102 EXPECT_EQ(0, foo_baz_impl_requests());
103 EXPECT_EQ(0, bar_baz_impl_requests());
104
105 mojo::MessagePipe pipe1;
106 connector()->getInterface("foo", "baz", std::move(pipe1.handle0));
107 EXPECT_EQ(1, foo_baz_impl_requests());
108 EXPECT_EQ(0, bar_baz_impl_requests());
109
110 mojo::MessagePipe pipe2;
111 connector()->getInterface("bar", "baz", std::move(pipe2.handle0));
112 EXPECT_EQ(1, foo_baz_impl_requests());
113 EXPECT_EQ(1, bar_baz_impl_requests());
114 }
115
116 TEST_F(BlinkConnectorImplTest, Override) {
117 EXPECT_EQ(0, foo_baz_impl_requests());
118 EXPECT_EQ(0, foo_baz_override_requests());
119 EXPECT_EQ(0, bar_baz_impl_requests());
120
121 connector()->AddOverrideForTesting(
122 "foo", "baz", base::Bind(&BlinkConnectorImplTest::OverrideFooBaz,
123 base::Unretained(this)));
124
125 mojo::MessagePipe pipe1;
126 connector()->getInterface("foo", "baz", std::move(pipe1.handle0));
127 EXPECT_EQ(0, foo_baz_impl_requests());
128 EXPECT_EQ(1, foo_baz_override_requests());
129 EXPECT_EQ(0, bar_baz_impl_requests());
130
131 mojo::MessagePipe pipe2;
132 connector()->getInterface("bar", "baz", std::move(pipe2.handle0));
133 EXPECT_EQ(0, foo_baz_impl_requests());
134 EXPECT_EQ(1, foo_baz_override_requests());
135 EXPECT_EQ(1, bar_baz_impl_requests());
136
137 connector()->ClearOverridesForTesting();
138
139 mojo::MessagePipe pipe3;
140 connector()->getInterface("foo", "baz", std::move(pipe3.handle0));
141 EXPECT_EQ(1, foo_baz_impl_requests());
142 EXPECT_EQ(1, foo_baz_override_requests());
143 EXPECT_EQ(1, bar_baz_impl_requests());
144 }
145
146 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698