OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "device/serial/serial_device_enumerator.h" | 5 #include "device/serial/serial_device_enumerator.h" |
6 #include "device/serial/serial_service_impl.h" | 6 #include "device/serial/serial_service_impl.h" |
7 #include "device/serial/test_serial_io_handler.h" | 7 #include "device/serial/test_serial_io_handler.h" |
8 #include "extensions/renderer/api_test_base.h" | 8 #include "extensions/renderer/api_test_base.h" |
9 #include "grit/extensions_renderer_resources.h" | 9 #include "grit/extensions_renderer_resources.h" |
10 | 10 |
11 // A test launcher for tests for the serial API defined in | 11 // A test launcher for tests for the serial API defined in |
12 // extensions/test/data/serial_unittest.js. Each C++ test function sets up a | 12 // extensions/test/data/serial_unittest.js. Each C++ test function sets up a |
13 // fake DeviceEnumerator or SerialIoHandler expecting or returning particular | 13 // fake DeviceEnumerator or SerialIoHandler expecting or returning particular |
14 // values for that test. | 14 // values for that test. |
15 | 15 |
16 namespace extensions { | 16 namespace extensions { |
17 | 17 |
18 namespace { | 18 namespace { |
19 | 19 |
20 class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator { | 20 class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator { |
21 virtual mojo::Array<device::serial::DeviceInfoPtr> GetDevices() override { | 21 mojo::Array<device::serial::DeviceInfoPtr> GetDevices() override { |
22 mojo::Array<device::serial::DeviceInfoPtr> result(3); | 22 mojo::Array<device::serial::DeviceInfoPtr> result(3); |
23 result[0] = device::serial::DeviceInfo::New(); | 23 result[0] = device::serial::DeviceInfo::New(); |
24 result[0]->path = "device"; | 24 result[0]->path = "device"; |
25 result[0]->vendor_id = 1234; | 25 result[0]->vendor_id = 1234; |
26 result[0]->has_vendor_id = true; | 26 result[0]->has_vendor_id = true; |
27 result[0]->product_id = 5678; | 27 result[0]->product_id = 5678; |
28 result[0]->has_product_id = true; | 28 result[0]->has_product_id = true; |
29 result[0]->display_name = "foo"; | 29 result[0]->display_name = "foo"; |
30 result[1] = device::serial::DeviceInfo::New(); | 30 result[1] = device::serial::DeviceInfo::New(); |
31 result[1]->path = "another_device"; | 31 result[1]->path = "another_device"; |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 return result; | 101 return result; |
102 } | 102 } |
103 | 103 |
104 class TestIoHandlerBase : public device::TestSerialIoHandler { | 104 class TestIoHandlerBase : public device::TestSerialIoHandler { |
105 public: | 105 public: |
106 TestIoHandlerBase() : calls_(0) {} | 106 TestIoHandlerBase() : calls_(0) {} |
107 | 107 |
108 size_t num_calls() const { return calls_; } | 108 size_t num_calls() const { return calls_; } |
109 | 109 |
110 protected: | 110 protected: |
111 virtual ~TestIoHandlerBase() {} | 111 ~TestIoHandlerBase() override {} |
112 void record_call() const { calls_++; } | 112 void record_call() const { calls_++; } |
113 | 113 |
114 private: | 114 private: |
115 mutable size_t calls_; | 115 mutable size_t calls_; |
116 | 116 |
117 DISALLOW_COPY_AND_ASSIGN(TestIoHandlerBase); | 117 DISALLOW_COPY_AND_ASSIGN(TestIoHandlerBase); |
118 }; | 118 }; |
119 | 119 |
120 class SetControlSignalsTestIoHandler : public TestIoHandlerBase { | 120 class SetControlSignalsTestIoHandler : public TestIoHandlerBase { |
121 public: | 121 public: |
122 SetControlSignalsTestIoHandler() {} | 122 SetControlSignalsTestIoHandler() {} |
123 | 123 |
124 virtual bool SetControlSignals( | 124 bool SetControlSignals( |
125 const device::serial::HostControlSignals& signals) override { | 125 const device::serial::HostControlSignals& signals) override { |
126 static const device::serial::HostControlSignals expected_signals[] = { | 126 static const device::serial::HostControlSignals expected_signals[] = { |
127 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_UNSET), | 127 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_UNSET), |
128 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_UNSET), | 128 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_UNSET), |
129 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_UNSET), | 129 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_UNSET), |
130 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_FALSE), | 130 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_FALSE), |
131 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_FALSE), | 131 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_FALSE), |
132 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_FALSE), | 132 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_FALSE), |
133 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_TRUE), | 133 GenerateControlSignals(OPTIONAL_VALUE_UNSET, OPTIONAL_VALUE_TRUE), |
134 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_TRUE), | 134 GenerateControlSignals(OPTIONAL_VALUE_FALSE, OPTIONAL_VALUE_TRUE), |
135 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_TRUE), | 135 GenerateControlSignals(OPTIONAL_VALUE_TRUE, OPTIONAL_VALUE_TRUE), |
136 }; | 136 }; |
137 if (num_calls() >= arraysize(expected_signals)) | 137 if (num_calls() >= arraysize(expected_signals)) |
138 return false; | 138 return false; |
139 | 139 |
140 EXPECT_EQ(expected_signals[num_calls()].has_dtr, signals.has_dtr); | 140 EXPECT_EQ(expected_signals[num_calls()].has_dtr, signals.has_dtr); |
141 EXPECT_EQ(expected_signals[num_calls()].dtr, signals.dtr); | 141 EXPECT_EQ(expected_signals[num_calls()].dtr, signals.dtr); |
142 EXPECT_EQ(expected_signals[num_calls()].has_rts, signals.has_rts); | 142 EXPECT_EQ(expected_signals[num_calls()].has_rts, signals.has_rts); |
143 EXPECT_EQ(expected_signals[num_calls()].rts, signals.rts); | 143 EXPECT_EQ(expected_signals[num_calls()].rts, signals.rts); |
144 record_call(); | 144 record_call(); |
145 return true; | 145 return true; |
146 } | 146 } |
147 | 147 |
148 private: | 148 private: |
149 virtual ~SetControlSignalsTestIoHandler() {} | 149 ~SetControlSignalsTestIoHandler() override {} |
150 | 150 |
151 DISALLOW_COPY_AND_ASSIGN(SetControlSignalsTestIoHandler); | 151 DISALLOW_COPY_AND_ASSIGN(SetControlSignalsTestIoHandler); |
152 }; | 152 }; |
153 | 153 |
154 class GetControlSignalsTestIoHandler : public TestIoHandlerBase { | 154 class GetControlSignalsTestIoHandler : public TestIoHandlerBase { |
155 public: | 155 public: |
156 GetControlSignalsTestIoHandler() {} | 156 GetControlSignalsTestIoHandler() {} |
157 | 157 |
158 virtual device::serial::DeviceControlSignalsPtr GetControlSignals() | 158 device::serial::DeviceControlSignalsPtr GetControlSignals() const override { |
159 const override { | |
160 device::serial::DeviceControlSignalsPtr signals( | 159 device::serial::DeviceControlSignalsPtr signals( |
161 device::serial::DeviceControlSignals::New()); | 160 device::serial::DeviceControlSignals::New()); |
162 signals->dcd = num_calls() & 1; | 161 signals->dcd = num_calls() & 1; |
163 signals->cts = num_calls() & 2; | 162 signals->cts = num_calls() & 2; |
164 signals->ri = num_calls() & 4; | 163 signals->ri = num_calls() & 4; |
165 signals->dsr = num_calls() & 8; | 164 signals->dsr = num_calls() & 8; |
166 record_call(); | 165 record_call(); |
167 return signals.Pass(); | 166 return signals.Pass(); |
168 } | 167 } |
169 | 168 |
170 private: | 169 private: |
171 virtual ~GetControlSignalsTestIoHandler() {} | 170 ~GetControlSignalsTestIoHandler() override {} |
172 | 171 |
173 DISALLOW_COPY_AND_ASSIGN(GetControlSignalsTestIoHandler); | 172 DISALLOW_COPY_AND_ASSIGN(GetControlSignalsTestIoHandler); |
174 }; | 173 }; |
175 | 174 |
176 class ConfigurePortTestIoHandler : public TestIoHandlerBase { | 175 class ConfigurePortTestIoHandler : public TestIoHandlerBase { |
177 public: | 176 public: |
178 ConfigurePortTestIoHandler() {} | 177 ConfigurePortTestIoHandler() {} |
179 virtual bool ConfigurePort( | 178 bool ConfigurePort( |
180 const device::serial::ConnectionOptions& options) override { | 179 const device::serial::ConnectionOptions& options) override { |
181 static const device::serial::ConnectionOptions expected_options[] = { | 180 static const device::serial::ConnectionOptions expected_options[] = { |
182 GenerateConnectionOptions(9600, | 181 GenerateConnectionOptions(9600, |
183 device::serial::DATA_BITS_EIGHT, | 182 device::serial::DATA_BITS_EIGHT, |
184 device::serial::PARITY_BIT_NO, | 183 device::serial::PARITY_BIT_NO, |
185 device::serial::STOP_BITS_ONE, | 184 device::serial::STOP_BITS_ONE, |
186 OPTIONAL_VALUE_FALSE), | 185 OPTIONAL_VALUE_FALSE), |
187 GenerateConnectionOptions(57600, | 186 GenerateConnectionOptions(57600, |
188 device::serial::DATA_BITS_NONE, | 187 device::serial::DATA_BITS_NONE, |
189 device::serial::PARITY_BIT_NONE, | 188 device::serial::PARITY_BIT_NONE, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 EXPECT_EQ(expected_options[num_calls()].stop_bits, options.stop_bits); | 243 EXPECT_EQ(expected_options[num_calls()].stop_bits, options.stop_bits); |
245 EXPECT_EQ(expected_options[num_calls()].has_cts_flow_control, | 244 EXPECT_EQ(expected_options[num_calls()].has_cts_flow_control, |
246 options.has_cts_flow_control); | 245 options.has_cts_flow_control); |
247 EXPECT_EQ(expected_options[num_calls()].cts_flow_control, | 246 EXPECT_EQ(expected_options[num_calls()].cts_flow_control, |
248 options.cts_flow_control); | 247 options.cts_flow_control); |
249 record_call(); | 248 record_call(); |
250 return TestSerialIoHandler::ConfigurePort(options); | 249 return TestSerialIoHandler::ConfigurePort(options); |
251 } | 250 } |
252 | 251 |
253 private: | 252 private: |
254 virtual ~ConfigurePortTestIoHandler() {} | 253 ~ConfigurePortTestIoHandler() override {} |
255 | 254 |
256 DISALLOW_COPY_AND_ASSIGN(ConfigurePortTestIoHandler); | 255 DISALLOW_COPY_AND_ASSIGN(ConfigurePortTestIoHandler); |
257 }; | 256 }; |
258 | 257 |
259 class FlushTestIoHandler : public TestIoHandlerBase { | 258 class FlushTestIoHandler : public TestIoHandlerBase { |
260 public: | 259 public: |
261 FlushTestIoHandler() {} | 260 FlushTestIoHandler() {} |
262 | 261 |
263 virtual bool Flush() const override { | 262 bool Flush() const override { |
264 record_call(); | 263 record_call(); |
265 return true; | 264 return true; |
266 } | 265 } |
267 | 266 |
268 private: | 267 private: |
269 virtual ~FlushTestIoHandler() {} | 268 ~FlushTestIoHandler() override {} |
270 | 269 |
271 DISALLOW_COPY_AND_ASSIGN(FlushTestIoHandler); | 270 DISALLOW_COPY_AND_ASSIGN(FlushTestIoHandler); |
272 }; | 271 }; |
273 | 272 |
274 class FailToConnectTestIoHandler : public TestIoHandlerBase { | 273 class FailToConnectTestIoHandler : public TestIoHandlerBase { |
275 public: | 274 public: |
276 FailToConnectTestIoHandler() {} | 275 FailToConnectTestIoHandler() {} |
277 virtual void Open(const std::string& port, | 276 void Open(const std::string& port, |
278 const OpenCompleteCallback& callback) override { | 277 const OpenCompleteCallback& callback) override { |
279 callback.Run(false); | 278 callback.Run(false); |
280 return; | 279 return; |
281 } | 280 } |
282 | 281 |
283 private: | 282 private: |
284 virtual ~FailToConnectTestIoHandler() {} | 283 ~FailToConnectTestIoHandler() override {} |
285 | 284 |
286 DISALLOW_COPY_AND_ASSIGN(FailToConnectTestIoHandler); | 285 DISALLOW_COPY_AND_ASSIGN(FailToConnectTestIoHandler); |
287 }; | 286 }; |
288 | 287 |
289 class FailToGetInfoTestIoHandler : public TestIoHandlerBase { | 288 class FailToGetInfoTestIoHandler : public TestIoHandlerBase { |
290 public: | 289 public: |
291 explicit FailToGetInfoTestIoHandler(int times_to_succeed) | 290 explicit FailToGetInfoTestIoHandler(int times_to_succeed) |
292 : times_to_succeed_(times_to_succeed) {} | 291 : times_to_succeed_(times_to_succeed) {} |
293 virtual device::serial::ConnectionInfoPtr GetPortInfo() const override { | 292 device::serial::ConnectionInfoPtr GetPortInfo() const override { |
294 if (times_to_succeed_-- > 0) | 293 if (times_to_succeed_-- > 0) |
295 return device::TestSerialIoHandler::GetPortInfo(); | 294 return device::TestSerialIoHandler::GetPortInfo(); |
296 return device::serial::ConnectionInfoPtr(); | 295 return device::serial::ConnectionInfoPtr(); |
297 } | 296 } |
298 | 297 |
299 private: | 298 private: |
300 virtual ~FailToGetInfoTestIoHandler() {} | 299 ~FailToGetInfoTestIoHandler() override {} |
301 | 300 |
302 mutable int times_to_succeed_; | 301 mutable int times_to_succeed_; |
303 | 302 |
304 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); | 303 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); |
305 }; | 304 }; |
306 | 305 |
307 class SendErrorTestIoHandler : public TestIoHandlerBase { | 306 class SendErrorTestIoHandler : public TestIoHandlerBase { |
308 public: | 307 public: |
309 explicit SendErrorTestIoHandler(device::serial::SendError error) | 308 explicit SendErrorTestIoHandler(device::serial::SendError error) |
310 : error_(error) {} | 309 : error_(error) {} |
311 | 310 |
312 virtual void WriteImpl() override { QueueWriteCompleted(0, error_); } | 311 void WriteImpl() override { QueueWriteCompleted(0, error_); } |
313 | 312 |
314 private: | 313 private: |
315 virtual ~SendErrorTestIoHandler() {} | 314 ~SendErrorTestIoHandler() override {} |
316 | 315 |
317 device::serial::SendError error_; | 316 device::serial::SendError error_; |
318 | 317 |
319 DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler); | 318 DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler); |
320 }; | 319 }; |
321 | 320 |
322 class FixedDataReceiveTestIoHandler : public TestIoHandlerBase { | 321 class FixedDataReceiveTestIoHandler : public TestIoHandlerBase { |
323 public: | 322 public: |
324 explicit FixedDataReceiveTestIoHandler(const std::string& data) | 323 explicit FixedDataReceiveTestIoHandler(const std::string& data) |
325 : data_(data) {} | 324 : data_(data) {} |
326 | 325 |
327 virtual void ReadImpl() override { | 326 void ReadImpl() override { |
328 if (pending_read_buffer_len() < data_.size()) | 327 if (pending_read_buffer_len() < data_.size()) |
329 return; | 328 return; |
330 memcpy(pending_read_buffer(), data_.c_str(), data_.size()); | 329 memcpy(pending_read_buffer(), data_.c_str(), data_.size()); |
331 QueueReadCompleted(static_cast<uint32_t>(data_.size()), | 330 QueueReadCompleted(static_cast<uint32_t>(data_.size()), |
332 device::serial::RECEIVE_ERROR_NONE); | 331 device::serial::RECEIVE_ERROR_NONE); |
333 } | 332 } |
334 | 333 |
335 private: | 334 private: |
336 virtual ~FixedDataReceiveTestIoHandler() {} | 335 ~FixedDataReceiveTestIoHandler() override {} |
337 | 336 |
338 const std::string data_; | 337 const std::string data_; |
339 | 338 |
340 DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler); | 339 DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler); |
341 }; | 340 }; |
342 | 341 |
343 class ReceiveErrorTestIoHandler : public TestIoHandlerBase { | 342 class ReceiveErrorTestIoHandler : public TestIoHandlerBase { |
344 public: | 343 public: |
345 explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error) | 344 explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error) |
346 : error_(error) {} | 345 : error_(error) {} |
347 | 346 |
348 virtual void ReadImpl() override { QueueReadCompleted(0, error_); } | 347 void ReadImpl() override { QueueReadCompleted(0, error_); } |
349 | 348 |
350 private: | 349 private: |
351 virtual ~ReceiveErrorTestIoHandler() {} | 350 ~ReceiveErrorTestIoHandler() override {} |
352 | 351 |
353 device::serial::ReceiveError error_; | 352 device::serial::ReceiveError error_; |
354 | 353 |
355 DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler); | 354 DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler); |
356 }; | 355 }; |
357 | 356 |
358 class SendDataWithErrorIoHandler : public TestIoHandlerBase { | 357 class SendDataWithErrorIoHandler : public TestIoHandlerBase { |
359 public: | 358 public: |
360 SendDataWithErrorIoHandler() : sent_error_(false) {} | 359 SendDataWithErrorIoHandler() : sent_error_(false) {} |
361 virtual void WriteImpl() override { | 360 void WriteImpl() override { |
362 if (sent_error_) { | 361 if (sent_error_) { |
363 WriteCompleted(pending_write_buffer_len(), | 362 WriteCompleted(pending_write_buffer_len(), |
364 device::serial::SEND_ERROR_NONE); | 363 device::serial::SEND_ERROR_NONE); |
365 return; | 364 return; |
366 } | 365 } |
367 sent_error_ = true; | 366 sent_error_ = true; |
368 // We expect the JS test code to send a 4 byte buffer. | 367 // We expect the JS test code to send a 4 byte buffer. |
369 ASSERT_LT(2u, pending_write_buffer_len()); | 368 ASSERT_LT(2u, pending_write_buffer_len()); |
370 WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR); | 369 WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR); |
371 } | 370 } |
372 | 371 |
373 private: | 372 private: |
374 virtual ~SendDataWithErrorIoHandler() {} | 373 ~SendDataWithErrorIoHandler() override {} |
375 | 374 |
376 bool sent_error_; | 375 bool sent_error_; |
377 | 376 |
378 DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler); | 377 DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler); |
379 }; | 378 }; |
380 | 379 |
381 class BlockSendsForeverSendIoHandler : public TestIoHandlerBase { | 380 class BlockSendsForeverSendIoHandler : public TestIoHandlerBase { |
382 public: | 381 public: |
383 BlockSendsForeverSendIoHandler() {} | 382 BlockSendsForeverSendIoHandler() {} |
384 virtual void WriteImpl() override {} | 383 void WriteImpl() override {} |
385 | 384 |
386 private: | 385 private: |
387 virtual ~BlockSendsForeverSendIoHandler() {} | 386 ~BlockSendsForeverSendIoHandler() override {} |
388 | 387 |
389 DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler); | 388 DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler); |
390 }; | 389 }; |
391 | 390 |
392 } // namespace | 391 } // namespace |
393 | 392 |
394 class SerialApiTest : public ApiTestBase { | 393 class SerialApiTest : public ApiTestBase { |
395 public: | 394 public: |
396 SerialApiTest() {} | 395 SerialApiTest() {} |
397 | 396 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 | 634 |
636 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { | 635 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { |
637 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); | 636 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); |
638 } | 637 } |
639 | 638 |
640 TEST_F(SerialApiTest, SendUnknownConnectionId) { | 639 TEST_F(SerialApiTest, SendUnknownConnectionId) { |
641 RunTest("serial_unittest.js", "testSendUnknownConnectionId"); | 640 RunTest("serial_unittest.js", "testSendUnknownConnectionId"); |
642 } | 641 } |
643 | 642 |
644 } // namespace extensions | 643 } // namespace extensions |
OLD | NEW |