| Index: extensions/renderer/api/serial/serial_api_unittest.cc
|
| diff --git a/extensions/renderer/api/serial/serial_api_unittest.cc b/extensions/renderer/api/serial/serial_api_unittest.cc
|
| index 14e3156bfad8a39f2439094470b00e2d1f5fa014..a5690eb3cbaaaa875eaee88fb1a88dce7c7d3b57 100644
|
| --- a/extensions/renderer/api/serial/serial_api_unittest.cc
|
| +++ b/extensions/renderer/api/serial/serial_api_unittest.cc
|
| @@ -8,6 +8,11 @@
|
| #include "extensions/renderer/api_test_base.h"
|
| #include "grit/extensions_renderer_resources.h"
|
|
|
| +// A test launcher for tests for the serial API defined in
|
| +// extensions/test/data/serial_unittest.js. Each C++ test function sets up a
|
| +// fake DeviceEnumerator or SerialIoHandler expecting or returning particular
|
| +// values for that test.
|
| +
|
| namespace extensions {
|
|
|
| namespace {
|
| @@ -298,6 +303,91 @@ class FailToGetInfoTestIoHandler : public TestIoHandlerBase {
|
| DISALLOW_COPY_AND_ASSIGN(FailToGetInfoTestIoHandler);
|
| };
|
|
|
| +class SendErrorTestIoHandler : public TestIoHandlerBase {
|
| + public:
|
| + explicit SendErrorTestIoHandler(device::serial::SendError error)
|
| + : error_(error) {}
|
| +
|
| + virtual void WriteImpl() OVERRIDE { QueueWriteCompleted(0, error_); }
|
| +
|
| + private:
|
| + virtual ~SendErrorTestIoHandler() {}
|
| +
|
| + device::serial::SendError error_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SendErrorTestIoHandler);
|
| +};
|
| +
|
| +class FixedDataReceiveTestIoHandler : public TestIoHandlerBase {
|
| + public:
|
| + explicit FixedDataReceiveTestIoHandler(const std::string& data)
|
| + : data_(data) {}
|
| +
|
| + virtual void ReadImpl() OVERRIDE {
|
| + if (pending_read_buffer_len() < data_.size())
|
| + return;
|
| + memcpy(pending_read_buffer(), data_.c_str(), data_.size());
|
| + QueueReadCompleted(static_cast<uint32_t>(data_.size()),
|
| + device::serial::RECEIVE_ERROR_NONE);
|
| + }
|
| +
|
| + private:
|
| + virtual ~FixedDataReceiveTestIoHandler() {}
|
| +
|
| + const std::string data_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(FixedDataReceiveTestIoHandler);
|
| +};
|
| +
|
| +class ReceiveErrorTestIoHandler : public TestIoHandlerBase {
|
| + public:
|
| + explicit ReceiveErrorTestIoHandler(device::serial::ReceiveError error)
|
| + : error_(error) {}
|
| +
|
| + virtual void ReadImpl() OVERRIDE { QueueReadCompleted(0, error_); }
|
| +
|
| + private:
|
| + virtual ~ReceiveErrorTestIoHandler() {}
|
| +
|
| + device::serial::ReceiveError error_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ReceiveErrorTestIoHandler);
|
| +};
|
| +
|
| +class SendDataWithErrorIoHandler : public TestIoHandlerBase {
|
| + public:
|
| + SendDataWithErrorIoHandler() : sent_error_(false) {}
|
| + virtual void WriteImpl() OVERRIDE {
|
| + if (sent_error_) {
|
| + WriteCompleted(pending_write_buffer_len(),
|
| + device::serial::SEND_ERROR_NONE);
|
| + return;
|
| + }
|
| + sent_error_ = true;
|
| + // We expect the JS test code to send a 4 byte buffer.
|
| + ASSERT_LT(2u, pending_write_buffer_len());
|
| + WriteCompleted(2, device::serial::SEND_ERROR_SYSTEM_ERROR);
|
| + }
|
| +
|
| + private:
|
| + virtual ~SendDataWithErrorIoHandler() {}
|
| +
|
| + bool sent_error_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SendDataWithErrorIoHandler);
|
| +};
|
| +
|
| +class BlockSendsForeverSendIoHandler : public TestIoHandlerBase {
|
| + public:
|
| + BlockSendsForeverSendIoHandler() {}
|
| + virtual void WriteImpl() OVERRIDE {}
|
| +
|
| + private:
|
| + virtual ~BlockSendsForeverSendIoHandler() {}
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(BlockSendsForeverSendIoHandler);
|
| +};
|
| +
|
| } // namespace
|
|
|
| class SerialApiTest : public ApiTestBase {
|
| @@ -306,6 +396,9 @@ class SerialApiTest : public ApiTestBase {
|
|
|
| virtual void SetUp() OVERRIDE {
|
| ApiTestBase::SetUp();
|
| + env()->RegisterModule("async_waiter", IDR_ASYNC_WAITER_JS);
|
| + env()->RegisterModule("data_receiver", IDR_DATA_RECEIVER_JS);
|
| + env()->RegisterModule("data_sender", IDR_DATA_SENDER_JS);
|
| env()->RegisterModule("serial", IDR_SERIAL_CUSTOM_BINDINGS_JS);
|
| env()->RegisterModule("serial_service", IDR_SERIAL_SERVICE_JS);
|
| env()->RegisterModule("device/serial/data_stream.mojom",
|
| @@ -418,6 +511,82 @@ TEST_F(SerialApiTest, SetPaused) {
|
| RunTest("serial_unittest.js", "testSetPaused");
|
| }
|
|
|
| +TEST_F(SerialApiTest, Echo) {
|
| + RunTest("serial_unittest.js", "testEcho");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendDuringExistingSend) {
|
| + RunTest("serial_unittest.js", "testSendDuringExistingSend");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendAfterSuccessfulSend) {
|
| + RunTest("serial_unittest.js", "testSendAfterSuccessfulSend");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendPartialSuccessWithError) {
|
| + io_handler_ = new SendDataWithErrorIoHandler();
|
| + RunTest("serial_unittest.js", "testSendPartialSuccessWithError");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendTimeout) {
|
| + io_handler_ = new BlockSendsForeverSendIoHandler();
|
| + RunTest("serial_unittest.js", "testSendTimeout");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, DisableSendTimeout) {
|
| + io_handler_ = new BlockSendsForeverSendIoHandler();
|
| + RunTest("serial_unittest.js", "testDisableSendTimeout");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, PausedReceive) {
|
| + io_handler_ = new FixedDataReceiveTestIoHandler("data");
|
| + RunTest("serial_unittest.js", "testPausedReceive");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, PausedReceiveError) {
|
| + io_handler_ =
|
| + new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DEVICE_LOST);
|
| + RunTest("serial_unittest.js", "testPausedReceiveError");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, ReceiveTimeout) {
|
| + RunTest("serial_unittest.js", "testReceiveTimeout");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, DisableReceiveTimeout) {
|
| + RunTest("serial_unittest.js", "testDisableReceiveTimeout");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, ReceiveErrorDisconnected) {
|
| + io_handler_ =
|
| + new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DISCONNECTED);
|
| + RunTest("serial_unittest.js", "testReceiveErrorDisconnected");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, ReceiveErrorDeviceLost) {
|
| + io_handler_ =
|
| + new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_DEVICE_LOST);
|
| + RunTest("serial_unittest.js", "testReceiveErrorDeviceLost");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, ReceiveErrorSystemError) {
|
| + io_handler_ =
|
| + new ReceiveErrorTestIoHandler(device::serial::RECEIVE_ERROR_SYSTEM_ERROR);
|
| + RunTest("serial_unittest.js", "testReceiveErrorSystemError");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendErrorDisconnected) {
|
| + io_handler_ =
|
| + new SendErrorTestIoHandler(device::serial::SEND_ERROR_DISCONNECTED);
|
| + RunTest("serial_unittest.js", "testSendErrorDisconnected");
|
| +}
|
| +
|
| +TEST_F(SerialApiTest, SendErrorSystemError) {
|
| + io_handler_ =
|
| + new SendErrorTestIoHandler(device::serial::SEND_ERROR_SYSTEM_ERROR);
|
| + RunTest("serial_unittest.js", "testSendErrorSystemError");
|
| +}
|
| +
|
| TEST_F(SerialApiTest, DisconnectUnknownConnectionId) {
|
| RunTest("serial_unittest.js", "testDisconnectUnknownConnectionId");
|
| }
|
| @@ -446,4 +615,8 @@ TEST_F(SerialApiTest, SetPausedUnknownConnectionId) {
|
| RunTest("serial_unittest.js", "testSetPausedUnknownConnectionId");
|
| }
|
|
|
| +TEST_F(SerialApiTest, SendUnknownConnectionId) {
|
| + RunTest("serial_unittest.js", "testSendUnknownConnectionId");
|
| +}
|
| +
|
| } // namespace extensions
|
|
|