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 |
| 12 // extensions/test/data/serial_unittest.js. Each C++ test function sets up a |
| 13 // fake DeviceEnumerator or SerialIoHandler expecting or returning particular |
| 14 // values for that test. |
| 15 |
11 namespace extensions { | 16 namespace extensions { |
12 | 17 |
13 namespace { | 18 namespace { |
14 | 19 |
15 class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator { | 20 class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator { |
16 virtual mojo::Array<device::serial::DeviceInfoPtr> GetDevices() OVERRIDE { | 21 virtual mojo::Array<device::serial::DeviceInfoPtr> GetDevices() OVERRIDE { |
17 mojo::Array<device::serial::DeviceInfoPtr> result(3); | 22 mojo::Array<device::serial::DeviceInfoPtr> result(3); |
18 result[0] = device::serial::DeviceInfo::New(); | 23 result[0] = device::serial::DeviceInfo::New(); |
19 result[0]->path = "device"; | 24 result[0]->path = "device"; |
20 result[0]->vendor_id = 1234; | 25 result[0]->vendor_id = 1234; |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 } | 296 } |
292 | 297 |
293 private: | 298 private: |
294 virtual ~FailToGetInfoTestIoHandler() {} | 299 virtual ~FailToGetInfoTestIoHandler() {} |
295 | 300 |
296 mutable int times_to_succeed_; | 301 mutable int times_to_succeed_; |
297 | 302 |
298 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); | 303 DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler); |
299 }; | 304 }; |
300 | 305 |
| 306 class SendErrorTestIoHandler : public TestIoHandlerBase { |
| 307 public: |
| 308 explicit SendErrorTestIoHandler(device::serial::SendError error) |
| 309 : error_(error) {} |
| 310 |
| 311 virtual void WriteImpl() OVERRIDE { QueueWriteCompleted(0, error_); } |
| 312 |
| 313 private: |
| 314 virtual ~SendErrorTestIoHandler() {} |
| 315 |
| 316 device::serial::SendError error_; |
| 317 |
| 318 DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler); |
| 319 }; |
| 320 |
| 321 class FixedDataReceiveTestIoHandler : public TestIoHandlerBase { |
| 322 public: |
| 323 explicit FixedDataReceiveTestIoHandler(const std::string& data) |
| 324 : data_(data) {} |
| 325 |
| 326 virtual void ReadImpl() OVERRIDE { |
| 327 if (pending_read_buffer_len() < data_.size()) |
| 328 return; |
| 329 memcpy(pending_read_buffer(), data_.c_str(), data_.size()); |
| 330 QueueReadCompleted(static_cast<uint32_t>(data_.size()), |
| 331 device::serial::RECEIVE_ERROR_NONE); |
| 332 } |
| 333 |
| 334 private: |
| 335 virtual ~FixedDataReceiveTestIoHandler() {} |
| 336 |
| 337 const std::string data_; |
| 338 |
| 339 DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler); |
| 340 }; |
| 341 |
| 342 class ReceiveErrorTestIoHandler : public TestIoHandlerBase { |
| 343 public: |
| 344 explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error) |
| 345 : error_(error) {} |
| 346 |
| 347 virtual void ReadImpl() OVERRIDE { QueueReadCompleted(0, error_); } |
| 348 |
| 349 private: |
| 350 virtual ~ReceiveErrorTestIoHandler() {} |
| 351 |
| 352 device::serial::ReceiveError error_; |
| 353 |
| 354 DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler); |
| 355 }; |
| 356 |
| 357 class SendDataWithErrorIoHandler : public TestIoHandlerBase { |
| 358 public: |
| 359 SendDataWithErrorIoHandler() : sent_error_(false) {} |
| 360 virtual void WriteImpl() OVERRIDE { |
| 361 if (sent_error_) { |
| 362 WriteCompleted(pending_write_buffer_len(), |
| 363 device::serial::SEND_ERROR_NONE); |
| 364 return; |
| 365 } |
| 366 sent_error_ = true; |
| 367 // We expect the JS test code to send a 4 byte buffer. |
| 368 ASSERT_LT(2u, pending_write_buffer_len()); |
| 369 WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR); |
| 370 } |
| 371 |
| 372 private: |
| 373 virtual ~SendDataWithErrorIoHandler() {} |
| 374 |
| 375 bool sent_error_; |
| 376 |
| 377 DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler); |
| 378 }; |
| 379 |
| 380 class BlockSendsForeverSendIoHandler : public TestIoHandlerBase { |
| 381 public: |
| 382 BlockSendsForeverSendIoHandler() {} |
| 383 virtual void WriteImpl() OVERRIDE {} |
| 384 |
| 385 private: |
| 386 virtual ~BlockSendsForeverSendIoHandler() {} |
| 387 |
| 388 DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler); |
| 389 }; |
| 390 |
301 } // namespace | 391 } // namespace |
302 | 392 |
303 class SerialApiTest : public ApiTestBase { | 393 class SerialApiTest : public ApiTestBase { |
304 public: | 394 public: |
305 SerialApiTest() {} | 395 SerialApiTest() {} |
306 | 396 |
307 virtual void SetUp() OVERRIDE { | 397 virtual void SetUp() OVERRIDE { |
308 ApiTestBase::SetUp(); | 398 ApiTestBase::SetUp(); |
| 399 env()->RegisterModule("async_waiter", IDR_ASYNC_WAITER_JS); |
| 400 env()->RegisterModule("data_receiver", IDR_DATA_RECEIVER_JS); |
| 401 env()->RegisterModule("data_sender", IDR_DATA_SENDER_JS); |
309 env()->RegisterModule("serial", IDR_SERIAL_CUSTOM_BINDINGS_JS); | 402 env()->RegisterModule("serial", IDR_SERIAL_CUSTOM_BINDINGS_JS); |
310 env()->RegisterModule("serial_service", IDR_SERIAL_SERVICE_JS); | 403 env()->RegisterModule("serial_service", IDR_SERIAL_SERVICE_JS); |
311 env()->RegisterModule("device/serial/data_stream.mojom", | 404 env()->RegisterModule("device/serial/data_stream.mojom", |
312 IDR_DATA_STREAM_MOJOM_JS); | 405 IDR_DATA_STREAM_MOJOM_JS); |
313 env()->RegisterModule("device/serial/serial.mojom", IDR_SERIAL_MOJOM_JS); | 406 env()->RegisterModule("device/serial/serial.mojom", IDR_SERIAL_MOJOM_JS); |
314 service_provider()->AddService<device::serial::SerialService>(base::Bind( | 407 service_provider()->AddService<device::serial::SerialService>(base::Bind( |
315 &SerialApiTest::CreateSerialService, base::Unretained(this))); | 408 &SerialApiTest::CreateSerialService, base::Unretained(this))); |
316 } | 409 } |
317 | 410 |
318 virtual void TearDown() OVERRIDE { | 411 virtual void TearDown() OVERRIDE { |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 TEST_F(SerialApiTest, Flush) { | 504 TEST_F(SerialApiTest, Flush) { |
412 io_handler_ = new FlushTestIoHandler; | 505 io_handler_ = new FlushTestIoHandler; |
413 RunTest("serial_unittest.js", "testFlush"); | 506 RunTest("serial_unittest.js", "testFlush"); |
414 EXPECT_EQ(1u, io_handler_->num_calls()); | 507 EXPECT_EQ(1u, io_handler_->num_calls()); |
415 } | 508 } |
416 | 509 |
417 TEST_F(SerialApiTest, SetPaused) { | 510 TEST_F(SerialApiTest, SetPaused) { |
418 RunTest("serial_unittest.js", "testSetPaused"); | 511 RunTest("serial_unittest.js", "testSetPaused"); |
419 } | 512 } |
420 | 513 |
| 514 TEST_F(SerialApiTest, Echo) { |
| 515 RunTest("serial_unittest.js", "testEcho"); |
| 516 } |
| 517 |
| 518 TEST_F(SerialApiTest, SendDuringExistingSend) { |
| 519 RunTest("serial_unittest.js", "testSendDuringExistingSend"); |
| 520 } |
| 521 |
| 522 TEST_F(SerialApiTest, SendAfterSuccessfulSend) { |
| 523 RunTest("serial_unittest.js", "testSendAfterSuccessfulSend"); |
| 524 } |
| 525 |
| 526 TEST_F(SerialApiTest, SendPartialSuccessWithError) { |
| 527 io_handler_ = new SendDataWithErrorIoHandler(); |
| 528 RunTest("serial_unittest.js", "testSendPartialSuccessWithError"); |
| 529 } |
| 530 |
| 531 TEST_F(SerialApiTest, SendTimeout) { |
| 532 io_handler_ = new BlockSendsForeverSendIoHandler(); |
| 533 RunTest("serial_unittest.js", "testSendTimeout"); |
| 534 } |
| 535 |
| 536 TEST_F(SerialApiTest, DisableSendTimeout) { |
| 537 io_handler_ = new BlockSendsForeverSendIoHandler(); |
| 538 RunTest("serial_unittest.js", "testDisableSendTimeout"); |
| 539 } |
| 540 |
| 541 TEST_F(SerialApiTest, PausedReceive) { |
| 542 io_handler_ = new FixedDataReceiveTestIoHandler("data"); |
| 543 RunTest("serial_unittest.js", "testPausedReceive"); |
| 544 } |
| 545 |
| 546 TEST_F(SerialApiTest, PausedReceiveError) { |
| 547 io_handler_ = |
| 548 new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DEVICE_LOST); |
| 549 RunTest("serial_unittest.js", "testPausedReceiveError"); |
| 550 } |
| 551 |
| 552 TEST_F(SerialApiTest, ReceiveTimeout) { |
| 553 RunTest("serial_unittest.js", "testReceiveTimeout"); |
| 554 } |
| 555 |
| 556 TEST_F(SerialApiTest, DisableReceiveTimeout) { |
| 557 RunTest("serial_unittest.js", "testDisableReceiveTimeout"); |
| 558 } |
| 559 |
| 560 TEST_F(SerialApiTest, ReceiveErrorDisconnected) { |
| 561 io_handler_ = |
| 562 new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DISCONNECTED); |
| 563 RunTest("serial_unittest.js", "testReceiveErrorDisconnected"); |
| 564 } |
| 565 |
| 566 TEST_F(SerialApiTest, ReceiveErrorDeviceLost) { |
| 567 io_handler_ = |
| 568 new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DEVICE_LOST); |
| 569 RunTest("serial_unittest.js", "testReceiveErrorDeviceLost"); |
| 570 } |
| 571 |
| 572 TEST_F(SerialApiTest, ReceiveErrorSystemError) { |
| 573 io_handler_ = |
| 574 new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_SYSTEM_ERROR); |
| 575 RunTest("serial_unittest.js", "testReceiveErrorSystemError"); |
| 576 } |
| 577 |
| 578 TEST_F(SerialApiTest, SendErrorDisconnected) { |
| 579 io_handler_ = |
| 580 new SendErrorTestIoHandler(device::serial::SEND_ERROR_DISCONNECTED); |
| 581 RunTest("serial_unittest.js", "testSendErrorDisconnected"); |
| 582 } |
| 583 |
| 584 TEST_F(SerialApiTest, SendErrorSystemError) { |
| 585 io_handler_ = |
| 586 new SendErrorTestIoHandler(device::serial::SEND_ERROR_SYSTEM_ERROR); |
| 587 RunTest("serial_unittest.js", "testSendErrorSystemError"); |
| 588 } |
| 589 |
421 TEST_F(SerialApiTest, DisconnectUnknownConnectionId) { | 590 TEST_F(SerialApiTest, DisconnectUnknownConnectionId) { |
422 RunTest("serial_unittest.js", "testDisconnectUnknownConnectionId"); | 591 RunTest("serial_unittest.js", "testDisconnectUnknownConnectionId"); |
423 } | 592 } |
424 | 593 |
425 TEST_F(SerialApiTest, GetInfoUnknownConnectionId) { | 594 TEST_F(SerialApiTest, GetInfoUnknownConnectionId) { |
426 RunTest("serial_unittest.js", "testGetInfoUnknownConnectionId"); | 595 RunTest("serial_unittest.js", "testGetInfoUnknownConnectionId"); |
427 } | 596 } |
428 | 597 |
429 TEST_F(SerialApiTest, UpdateUnknownConnectionId) { | 598 TEST_F(SerialApiTest, UpdateUnknownConnectionId) { |
430 RunTest("serial_unittest.js", "testUpdateUnknownConnectionId"); | 599 RunTest("serial_unittest.js", "testUpdateUnknownConnectionId"); |
431 } | 600 } |
432 | 601 |
433 TEST_F(SerialApiTest, SetControlSignalsUnknownConnectionId) { | 602 TEST_F(SerialApiTest, SetControlSignalsUnknownConnectionId) { |
434 RunTest("serial_unittest.js", "testSetControlSignalsUnknownConnectionId"); | 603 RunTest("serial_unittest.js", "testSetControlSignalsUnknownConnectionId"); |
435 } | 604 } |
436 | 605 |
437 TEST_F(SerialApiTest, GetControlSignalsUnknownConnectionId) { | 606 TEST_F(SerialApiTest, GetControlSignalsUnknownConnectionId) { |
438 RunTest("serial_unittest.js", "testGetControlSignalsUnknownConnectionId"); | 607 RunTest("serial_unittest.js", "testGetControlSignalsUnknownConnectionId"); |
439 } | 608 } |
440 | 609 |
441 TEST_F(SerialApiTest, FlushUnknownConnectionId) { | 610 TEST_F(SerialApiTest, FlushUnknownConnectionId) { |
442 RunTest("serial_unittest.js", "testFlushUnknownConnectionId"); | 611 RunTest("serial_unittest.js", "testFlushUnknownConnectionId"); |
443 } | 612 } |
444 | 613 |
445 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { | 614 TEST_F(SerialApiTest, SetPausedUnknownConnectionId) { |
446 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); | 615 RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId"); |
447 } | 616 } |
448 | 617 |
| 618 TEST_F(SerialApiTest, SendUnknownConnectionId) { |
| 619 RunTest("serial_unittest.js", "testSendUnknownConnectionId"); |
| 620 } |
| 621 |
449 } // namespace extensions | 622 } // namespace extensions |
OLD | NEW |