| 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 virtual 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 virtual 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), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 149 virtual ~SetControlSignalsTestIoHandler() {} | 149 virtual ~SetControlSignalsTestIoHandler() {} |
| 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 virtual device::serial::DeviceControlSignalsPtr GetControlSignals() |
| 159 const OVERRIDE { | 159 const override { |
| 160 device::serial::DeviceControlSignalsPtr signals( | 160 device::serial::DeviceControlSignalsPtr signals( |
| 161 device::serial::DeviceControlSignals::New()); | 161 device::serial::DeviceControlSignals::New()); |
| 162 signals->dcd = num_calls() & 1; | 162 signals->dcd = num_calls() & 1; |
| 163 signals->cts = num_calls() & 2; | 163 signals->cts = num_calls() & 2; |
| 164 signals->ri = num_calls() & 4; | 164 signals->ri = num_calls() & 4; |
| 165 signals->dsr = num_calls() & 8; | 165 signals->dsr = num_calls() & 8; |
| 166 record_call(); | 166 record_call(); |
| 167 return signals.Pass(); | 167 return signals.Pass(); |
| 168 } | 168 } |
| 169 | 169 |
| 170 private: | 170 private: |
| 171 virtual ~GetControlSignalsTestIoHandler() {} | 171 virtual ~GetControlSignalsTestIoHandler() {} |
| 172 | 172 |
| 173 DISALLOW_COPY_AND_ASSIGN(GetControlSignalsTestIoHandler); | 173 DISALLOW_COPY_AND_ASSIGN(GetControlSignalsTestIoHandler); |
| 174 }; | 174 }; |
| 175 | 175 |
| 176 class ConfigurePortTestIoHandler : public TestIoHandlerBase { | 176 class ConfigurePortTestIoHandler : public TestIoHandlerBase { |
| 177 public: | 177 public: |
| 178 ConfigurePortTestIoHandler() {} | 178 ConfigurePortTestIoHandler() {} |
| 179 virtual bool ConfigurePort( | 179 virtual bool ConfigurePort( |
| 180 const device::serial::ConnectionOptions& options) OVERRIDE { | 180 const device::serial::ConnectionOptions& options) override { |
| 181 static const device::serial::ConnectionOptions expected_options[] = { | 181 static const device::serial::ConnectionOptions expected_options[] = { |
| 182 GenerateConnectionOptions(9600, | 182 GenerateConnectionOptions(9600, |
| 183 device::serial::DATA_BITS_EIGHT, | 183 device::serial::DATA_BITS_EIGHT, |
| 184 device::serial::PARITY_BIT_NO, | 184 device::serial::PARITY_BIT_NO, |
| 185 device::serial::STOP_BITS_ONE, | 185 device::serial::STOP_BITS_ONE, |
| 186 OPTIONAL_VALUE_FALSE), | 186 OPTIONAL_VALUE_FALSE), |
| 187 GenerateConnectionOptions(57600, | 187 GenerateConnectionOptions(57600, |
| 188 device::serial::DATA_BITS_NONE, | 188 device::serial::DATA_BITS_NONE, |
| 189 device::serial::PARITY_BIT_NONE, | 189 device::serial::PARITY_BIT_NONE, |
| 190 device::serial::STOP_BITS_NONE, | 190 device::serial::STOP_BITS_NONE, |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 private: | 253 private: |
| 254 virtual ~ConfigurePortTestIoHandler() {} | 254 virtual ~ConfigurePortTestIoHandler() {} |
| 255 | 255 |
| 256 DISALLOW_COPY_AND_ASSIGN(ConfigurePortTestIoHandler); | 256 DISALLOW_COPY_AND_ASSIGN(ConfigurePortTestIoHandler); |
| 257 }; | 257 }; |
| 258 | 258 |
| 259 class FlushTestIoHandler : public TestIoHandlerBase { | 259 class FlushTestIoHandler : public TestIoHandlerBase { |
| 260 public: | 260 public: |
| 261 FlushTestIoHandler() {} | 261 FlushTestIoHandler() {} |
| 262 | 262 |
| 263 virtual bool Flush() const OVERRIDE { | 263 virtual bool Flush() const override { |
| 264 record_call(); | 264 record_call(); |
| 265 return true; | 265 return true; |
| 266 } | 266 } |
| 267 | 267 |
| 268 private: | 268 private: |
| 269 virtual ~FlushTestIoHandler() {} | 269 virtual ~FlushTestIoHandler() {} |
| 270 | 270 |
| 271 DISALLOW_COPY_AND_ASSIGN(FlushTestIoHandler); | 271 DISALLOW_COPY_AND_ASSIGN(FlushTestIoHandler); |
| 272 }; | 272 }; |
| 273 | 273 |
| 274 class FailToConnectTestIoHandler : public TestIoHandlerBase { | 274 class FailToConnectTestIoHandler : public TestIoHandlerBase { |
| 275 public: | 275 public: |
| 276 FailToConnectTestIoHandler() {} | 276 FailToConnectTestIoHandler() {} |
| 277 virtual void Open(const std::string& port, | 277 virtual void Open(const std::string& port, |
| 278 const OpenCompleteCallback& callback) OVERRIDE { | 278 const OpenCompleteCallback& callback) override { |
| 279 callback.Run(false); | 279 callback.Run(false); |
| 280 return; | 280 return; |
| 281 } | 281 } |
| 282 | 282 |
| 283 private: | 283 private: |
| 284 virtual ~FailToConnectTestIoHandler() {} | 284 virtual ~FailToConnectTestIoHandler() {} |
| 285 | 285 |
| 286 DISALLOW_COPY_AND_ASSIGN(FailToConnectTestIoHandler); | 286 DISALLOW_COPY_AND_ASSIGN(FailToConnectTestIoHandler); |
| 287 }; | 287 }; |
| 288 | 288 |
| 289 class FailToGetInfoTestIoHandler : public TestIoHandlerBase { | 289 class FailToGetInfoTestIoHandler : public TestIoHandlerBase { |
| 290 public: | 290 public: |
| 291 explicit FailToGetInfoTestIoHandler(int times_to_succeed) | 291 explicit FailToGetInfoTestIoHandler(int times_to_succeed) |
| 292 : times_to_succeed_(times_to_succeed) {} | 292 : times_to_succeed_(times_to_succeed) {} |
| 293 virtual device::serial::ConnectionInfoPtr GetPortInfo() const OVERRIDE { | 293 virtual device::serial::ConnectionInfoPtr GetPortInfo() const override { |
| 294 if (times_to_succeed_-- > 0) | 294 if (times_to_succeed_-- > 0) |
| 295 return device::TestSerialIoHandler::GetPortInfo(); | 295 return device::TestSerialIoHandler::GetPortInfo(); |
| 296 return device::serial::ConnectionInfoPtr(); | 296 return device::serial::ConnectionInfoPtr(); |
| 297 } | 297 } |
| 298 | 298 |
| 299 private: | 299 private: |
| 300 virtual ~FailToGetInfoTestIoHandler() {} | 300 virtual ~FailToGetInfoTestIoHandler() {} |
| 301 | 301 |
| 302 mutable int times_to_succeed_; | 302 mutable int times_to_succeed_; |
| 303 | 303 |
| 304 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); | 304 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); |
| 305 }; | 305 }; |
| 306 | 306 |
| 307 class SendErrorTestIoHandler : public TestIoHandlerBase { | 307 class SendErrorTestIoHandler : public TestIoHandlerBase { |
| 308 public: | 308 public: |
| 309 explicit SendErrorTestIoHandler(device::serial::SendError error) | 309 explicit SendErrorTestIoHandler(device::serial::SendError error) |
| 310 : error_(error) {} | 310 : error_(error) {} |
| 311 | 311 |
| 312 virtual void WriteImpl() OVERRIDE { QueueWriteCompleted(0, error_); } | 312 virtual void WriteImpl() override { QueueWriteCompleted(0, error_); } |
| 313 | 313 |
| 314 private: | 314 private: |
| 315 virtual ~SendErrorTestIoHandler() {} | 315 virtual ~SendErrorTestIoHandler() {} |
| 316 | 316 |
| 317 device::serial::SendError error_; | 317 device::serial::SendError error_; |
| 318 | 318 |
| 319 DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler); | 319 DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler); |
| 320 }; | 320 }; |
| 321 | 321 |
| 322 class FixedDataReceiveTestIoHandler : public TestIoHandlerBase { | 322 class FixedDataReceiveTestIoHandler : public TestIoHandlerBase { |
| 323 public: | 323 public: |
| 324 explicit FixedDataReceiveTestIoHandler(const std::string& data) | 324 explicit FixedDataReceiveTestIoHandler(const std::string& data) |
| 325 : data_(data) {} | 325 : data_(data) {} |
| 326 | 326 |
| 327 virtual void ReadImpl() OVERRIDE { | 327 virtual void ReadImpl() override { |
| 328 if (pending_read_buffer_len() < data_.size()) | 328 if (pending_read_buffer_len() < data_.size()) |
| 329 return; | 329 return; |
| 330 memcpy(pending_read_buffer(), data_.c_str(), data_.size()); | 330 memcpy(pending_read_buffer(), data_.c_str(), data_.size()); |
| 331 QueueReadCompleted(static_cast<uint32_t>(data_.size()), | 331 QueueReadCompleted(static_cast<uint32_t>(data_.size()), |
| 332 device::serial::RECEIVE_ERROR_NONE); | 332 device::serial::RECEIVE_ERROR_NONE); |
| 333 } | 333 } |
| 334 | 334 |
| 335 private: | 335 private: |
| 336 virtual ~FixedDataReceiveTestIoHandler() {} | 336 virtual ~FixedDataReceiveTestIoHandler() {} |
| 337 | 337 |
| 338 const std::string data_; | 338 const std::string data_; |
| 339 | 339 |
| 340 DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler); | 340 DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler); |
| 341 }; | 341 }; |
| 342 | 342 |
| 343 class ReceiveErrorTestIoHandler : public TestIoHandlerBase { | 343 class ReceiveErrorTestIoHandler : public TestIoHandlerBase { |
| 344 public: | 344 public: |
| 345 explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error) | 345 explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error) |
| 346 : error_(error) {} | 346 : error_(error) {} |
| 347 | 347 |
| 348 virtual void ReadImpl() OVERRIDE { QueueReadCompleted(0, error_); } | 348 virtual void ReadImpl() override { QueueReadCompleted(0, error_); } |
| 349 | 349 |
| 350 private: | 350 private: |
| 351 virtual ~ReceiveErrorTestIoHandler() {} | 351 virtual ~ReceiveErrorTestIoHandler() {} |
| 352 | 352 |
| 353 device::serial::ReceiveError error_; | 353 device::serial::ReceiveError error_; |
| 354 | 354 |
| 355 DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler); | 355 DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler); |
| 356 }; | 356 }; |
| 357 | 357 |
| 358 class SendDataWithErrorIoHandler : public TestIoHandlerBase { | 358 class SendDataWithErrorIoHandler : public TestIoHandlerBase { |
| 359 public: | 359 public: |
| 360 SendDataWithErrorIoHandler() : sent_error_(false) {} | 360 SendDataWithErrorIoHandler() : sent_error_(false) {} |
| 361 virtual void WriteImpl() OVERRIDE { | 361 virtual void WriteImpl() override { |
| 362 if (sent_error_) { | 362 if (sent_error_) { |
| 363 WriteCompleted(pending_write_buffer_len(), | 363 WriteCompleted(pending_write_buffer_len(), |
| 364 device::serial::SEND_ERROR_NONE); | 364 device::serial::SEND_ERROR_NONE); |
| 365 return; | 365 return; |
| 366 } | 366 } |
| 367 sent_error_ = true; | 367 sent_error_ = true; |
| 368 // We expect the JS test code to send a 4 byte buffer. | 368 // We expect the JS test code to send a 4 byte buffer. |
| 369 ASSERT_LT(2u, pending_write_buffer_len()); | 369 ASSERT_LT(2u, pending_write_buffer_len()); |
| 370 WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR); | 370 WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR); |
| 371 } | 371 } |
| 372 | 372 |
| 373 private: | 373 private: |
| 374 virtual ~SendDataWithErrorIoHandler() {} | 374 virtual ~SendDataWithErrorIoHandler() {} |
| 375 | 375 |
| 376 bool sent_error_; | 376 bool sent_error_; |
| 377 | 377 |
| 378 DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler); | 378 DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler); |
| 379 }; | 379 }; |
| 380 | 380 |
| 381 class BlockSendsForeverSendIoHandler : public TestIoHandlerBase { | 381 class BlockSendsForeverSendIoHandler : public TestIoHandlerBase { |
| 382 public: | 382 public: |
| 383 BlockSendsForeverSendIoHandler() {} | 383 BlockSendsForeverSendIoHandler() {} |
| 384 virtual void WriteImpl() OVERRIDE {} | 384 virtual void WriteImpl() override {} |
| 385 | 385 |
| 386 private: | 386 private: |
| 387 virtual ~BlockSendsForeverSendIoHandler() {} | 387 virtual ~BlockSendsForeverSendIoHandler() {} |
| 388 | 388 |
| 389 DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler); | 389 DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler); |
| 390 }; | 390 }; |
| 391 | 391 |
| 392 } // namespace | 392 } // namespace |
| 393 | 393 |
| 394 class SerialApiTest : public ApiTestBase { | 394 class SerialApiTest : public ApiTestBase { |
| 395 public: | 395 public: |
| 396 SerialApiTest() {} | 396 SerialApiTest() {} |
| 397 | 397 |
| 398 virtual void SetUp() OVERRIDE { | 398 virtual void SetUp() override { |
| 399 ApiTestBase::SetUp(); | 399 ApiTestBase::SetUp(); |
| 400 env()->RegisterModule("async_waiter", IDR_ASYNC_WAITER_JS); | 400 env()->RegisterModule("async_waiter", IDR_ASYNC_WAITER_JS); |
| 401 env()->RegisterModule("data_receiver", IDR_DATA_RECEIVER_JS); | 401 env()->RegisterModule("data_receiver", IDR_DATA_RECEIVER_JS); |
| 402 env()->RegisterModule("data_sender", IDR_DATA_SENDER_JS); | 402 env()->RegisterModule("data_sender", IDR_DATA_SENDER_JS); |
| 403 env()->RegisterModule("serial", IDR_SERIAL_CUSTOM_BINDINGS_JS); | 403 env()->RegisterModule("serial", IDR_SERIAL_CUSTOM_BINDINGS_JS); |
| 404 env()->RegisterModule("serial_service", IDR_SERIAL_SERVICE_JS); | 404 env()->RegisterModule("serial_service", IDR_SERIAL_SERVICE_JS); |
| 405 env()->RegisterModule("device/serial/data_stream.mojom", | 405 env()->RegisterModule("device/serial/data_stream.mojom", |
| 406 IDR_DATA_STREAM_MOJOM_JS); | 406 IDR_DATA_STREAM_MOJOM_JS); |
| 407 env()->RegisterModule("device/serial/data_stream_serialization.mojom", | 407 env()->RegisterModule("device/serial/data_stream_serialization.mojom", |
| 408 IDR_DATA_STREAM_SERIALIZATION_MOJOM_JS); | 408 IDR_DATA_STREAM_SERIALIZATION_MOJOM_JS); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 | 610 |
| 611 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { | 611 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { |
| 612 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); | 612 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); |
| 613 } | 613 } |
| 614 | 614 |
| 615 TEST_F(SerialApiTest, SendUnknownConnectionId) { | 615 TEST_F(SerialApiTest, SendUnknownConnectionId) { |
| 616 RunTest("serial_unittest.js", "testSendUnknownConnectionId"); | 616 RunTest("serial_unittest.js", "testSendUnknownConnectionId"); |
| 617 } | 617 } |
| 618 | 618 |
| 619 } // namespace extensions | 619 } // namespace extensions |
| OLD | NEW |