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

Side by Side Diff: extensions/renderer/api/serial/data_receiver_unittest.cc

Issue 2410743002: Remove the mojo serial interfaces and related infrastructure. (Closed)
Patch Set: Created 4 years, 2 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 2014 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 <stdint.h>
6
7 #include <queue>
8 #include <utility>
9
10 #include "base/macros.h"
11 #include "device/serial/data_source_sender.h"
12 #include "device/serial/data_stream.mojom.h"
13 #include "extensions/renderer/api_test_base.h"
14 #include "gin/dictionary.h"
15 #include "gin/wrappable.h"
16 #include "grit/extensions_renderer_resources.h"
17 #include "mojo/edk/js/handle.h"
18
19 namespace extensions {
20
21 class DataReceiverFactory : public gin::Wrappable<DataReceiverFactory> {
22 public:
23 using Callback = base::Callback<void(
24 mojo::InterfaceRequest<device::serial::DataSource>,
25 mojo::InterfacePtr<device::serial::DataSourceClient>)>;
26 static gin::Handle<DataReceiverFactory> Create(v8::Isolate* isolate,
27 const Callback& callback) {
28 return gin::CreateHandle(isolate,
29 new DataReceiverFactory(callback, isolate));
30 }
31
32 gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
33 v8::Isolate* isolate) override {
34 return Wrappable<DataReceiverFactory>::GetObjectTemplateBuilder(isolate)
35 .SetMethod("create", &DataReceiverFactory::CreateReceiver);
36 }
37
38 gin::Dictionary CreateReceiver() {
39 mojo::InterfacePtr<device::serial::DataSource> sink;
40 mojo::InterfacePtr<device::serial::DataSourceClient> client;
41 mojo::InterfaceRequest<device::serial::DataSourceClient> client_request =
42 mojo::GetProxy(&client);
43 callback_.Run(mojo::GetProxy(&sink), std::move(client));
44
45 gin::Dictionary result = gin::Dictionary::CreateEmpty(isolate_);
46 result.Set("source", sink.PassInterface().PassHandle().release());
47 result.Set("client", client_request.PassMessagePipe().release());
48 return result;
49 }
50
51 static gin::WrapperInfo kWrapperInfo;
52
53 private:
54 DataReceiverFactory(const Callback& callback, v8::Isolate* isolate)
55 : callback_(callback), isolate_(isolate) {}
56
57 base::Callback<void(mojo::InterfaceRequest<device::serial::DataSource>,
58 mojo::InterfacePtr<device::serial::DataSourceClient>)>
59 callback_;
60 v8::Isolate* isolate_;
61 };
62
63 gin::WrapperInfo DataReceiverFactory::kWrapperInfo = {gin::kEmbedderNativeGin};
64
65 // Runs tests defined in extensions/test/data/data_receiver_unittest.js
66 class DataReceiverTest : public ApiTestBase {
67 public:
68 DataReceiverTest() {}
69
70 void SetUp() override {
71 ApiTestBase::SetUp();
72 gin::ModuleRegistry::From(env()->context()->v8_context())
73 ->AddBuiltinModule(env()->isolate(),
74 "device/serial/data_receiver_test_factory",
75 DataReceiverFactory::Create(
76 env()->isolate(),
77 base::Bind(&DataReceiverTest::CreateDataSource,
78 base::Unretained(this))).ToV8());
79 }
80
81 void TearDown() override {
82 if (sender_.get()) {
83 sender_->ShutDown();
84 sender_ = NULL;
85 }
86 ApiTestBase::TearDown();
87 }
88
89 std::queue<int32_t> error_to_send_;
90 std::queue<std::string> data_to_send_;
91
92 private:
93 void CreateDataSource(
94 mojo::InterfaceRequest<device::serial::DataSource> request,
95 mojo::InterfacePtr<device::serial::DataSourceClient> client) {
96 sender_ = new device::DataSourceSender(
97 std::move(request), std::move(client),
98 base::Bind(&DataReceiverTest::ReadyToSend, base::Unretained(this)),
99 base::Bind(base::DoNothing));
100 }
101
102 void ReadyToSend(std::unique_ptr<device::WritableBuffer> buffer) {
103 if (data_to_send_.empty() && error_to_send_.empty())
104 return;
105
106 std::string data;
107 int32_t error = 0;
108 if (!data_to_send_.empty()) {
109 data = data_to_send_.front();
110 data_to_send_.pop();
111 }
112 if (!error_to_send_.empty()) {
113 error = error_to_send_.front();
114 error_to_send_.pop();
115 }
116 DCHECK(buffer->GetSize() >= static_cast<uint32_t>(data.size()));
117 memcpy(buffer->GetData(), data.c_str(), data.size());
118 if (error)
119 buffer->DoneWithError(static_cast<uint32_t>(data.size()), error);
120 else
121 buffer->Done(static_cast<uint32_t>(data.size()));
122 }
123
124 scoped_refptr<device::DataSourceSender> sender_;
125
126 DISALLOW_COPY_AND_ASSIGN(DataReceiverTest);
127 };
128
129 // https://crbug.com/599898
130 #if defined(LEAK_SANITIZER)
131 #define MAYBE_Receive DISABLED_Receive
132 #else
133 #define MAYBE_Receive Receive
134 #endif
135 TEST_F(DataReceiverTest, MAYBE_Receive) {
136 data_to_send_.push("a");
137 RunTest("data_receiver_unittest.js", "testReceive");
138 }
139
140 // https://crbug.com/599898
141 #if defined(LEAK_SANITIZER)
142 #define MAYBE_ReceiveError DISABLED_ReceiveError
143 #else
144 #define MAYBE_ReceiveError ReceiveError
145 #endif
146 TEST_F(DataReceiverTest, MAYBE_ReceiveError) {
147 error_to_send_.push(1);
148 RunTest("data_receiver_unittest.js", "testReceiveError");
149 }
150
151 TEST_F(DataReceiverTest, ReceiveDataAndError) {
152 data_to_send_.push("a");
153 data_to_send_.push("b");
154 error_to_send_.push(1);
155 RunTest("data_receiver_unittest.js", "testReceiveDataAndError");
156 }
157
158 TEST_F(DataReceiverTest, ReceiveErrorThenData) {
159 data_to_send_.push("");
160 data_to_send_.push("a");
161 error_to_send_.push(1);
162 RunTest("data_receiver_unittest.js", "testReceiveErrorThenData");
163 }
164
165 TEST_F(DataReceiverTest, ReceiveBeforeAndAfterSerialization) {
166 data_to_send_.push("a");
167 data_to_send_.push("b");
168 RunTest("data_receiver_unittest.js",
169 "testReceiveBeforeAndAfterSerialization");
170 }
171
172 TEST_F(DataReceiverTest, ReceiveErrorSerialization) {
173 error_to_send_.push(1);
174 error_to_send_.push(3);
175 RunTest("data_receiver_unittest.js", "testReceiveErrorSerialization");
176 }
177
178 TEST_F(DataReceiverTest, ReceiveDataAndErrorSerialization) {
179 data_to_send_.push("a");
180 data_to_send_.push("b");
181 error_to_send_.push(1);
182 error_to_send_.push(3);
183 RunTest("data_receiver_unittest.js", "testReceiveDataAndErrorSerialization");
184 }
185
186 TEST_F(DataReceiverTest, SerializeDuringReceive) {
187 data_to_send_.push("a");
188 RunTest("data_receiver_unittest.js", "testSerializeDuringReceive");
189 }
190
191 // https://crbug.com/599898
192 #if defined(LEAK_SANITIZER)
193 #define MAYBE_SerializeAfterClose DISABLED_SerializeAfterClose
194 #else
195 #define MAYBE_SerializeAfterClose SerializeAfterClose
196 #endif
197 TEST_F(DataReceiverTest, MAYBE_SerializeAfterClose) {
198 data_to_send_.push("a");
199 RunTest("data_receiver_unittest.js", "testSerializeAfterClose");
200 }
201
202 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/api/serial/DEPS ('k') | extensions/renderer/api/serial/data_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698