| Index: extensions/browser/api/serial/serial_apitest.cc
|
| diff --git a/extensions/browser/api/serial/serial_apitest.cc b/extensions/browser/api/serial/serial_apitest.cc
|
| index f561b5bc123c7392c92250a5d73495a32a3f8b28..f951a208eda9fcfa966eb1c008832fd8e0bbc051 100644
|
| --- a/extensions/browser/api/serial/serial_apitest.cc
|
| +++ b/extensions/browser/api/serial/serial_apitest.cc
|
| @@ -5,27 +5,24 @@
|
| #include <string>
|
|
|
| #include "chrome/browser/extensions/extension_apitest.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "device/serial/serial_device_enumerator.h"
|
| +#include "device/serial/serial_service_impl.h"
|
| #include "device/serial/test_serial_io_handler.h"
|
| #include "extensions/browser/api/serial/serial_api.h"
|
| #include "extensions/browser/api/serial/serial_connection.h"
|
| #include "extensions/browser/extension_function.h"
|
| #include "extensions/common/api/serial.h"
|
| +#include "extensions/common/switches.h"
|
| #include "extensions/test/result_catcher.h"
|
| +#include "extensions/test/test_service_registration_manager.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
|
|
| using testing::_;
|
| using testing::Return;
|
|
|
| -namespace {
|
| -
|
| -class SerialApiTest : public ExtensionApiTest {
|
| - public:
|
| - SerialApiTest() {}
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| namespace extensions {
|
| +namespace {
|
|
|
| class FakeSerialGetDevicesFunction : public AsyncExtensionFunction {
|
| public:
|
| @@ -43,23 +40,44 @@ class FakeSerialGetDevicesFunction : public AsyncExtensionFunction {
|
| }
|
|
|
| protected:
|
| - ~FakeSerialGetDevicesFunction() override {}
|
| + ~FakeSerialGetDevicesFunction() {}
|
| +};
|
| +
|
| +class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator {
|
| + public:
|
| + ~FakeSerialDeviceEnumerator() override {}
|
| +
|
| + mojo::Array<device::serial::DeviceInfoPtr> GetDevices() override {
|
| + mojo::Array<device::serial::DeviceInfoPtr> devices;
|
| + device::serial::DeviceInfoPtr device0(device::serial::DeviceInfo::New());
|
| + device0->path = "/dev/fakeserialmojo";
|
| + device::serial::DeviceInfoPtr device1(device::serial::DeviceInfo::New());
|
| + device1->path = "\\\\COM800\\";
|
| + devices.push_back(device0.Pass());
|
| + devices.push_back(device1.Pass());
|
| + return devices.Pass();
|
| + }
|
| };
|
|
|
| class FakeEchoSerialIoHandler : public device::TestSerialIoHandler {
|
| public:
|
| - explicit FakeEchoSerialIoHandler() {
|
| + FakeEchoSerialIoHandler() {
|
| device_control_signals()->dcd = true;
|
| device_control_signals()->cts = true;
|
| device_control_signals()->ri = true;
|
| device_control_signals()->dsr = true;
|
| + EXPECT_CALL(*this, SetControlSignals(_)).Times(1).WillOnce(Return(true));
|
| + }
|
| +
|
| + static scoped_refptr<device::SerialIoHandler> Create() {
|
| + return new FakeEchoSerialIoHandler();
|
| }
|
|
|
| MOCK_METHOD1(SetControlSignals,
|
| bool(const device::serial::HostControlSignals&));
|
|
|
| protected:
|
| - virtual ~FakeEchoSerialIoHandler() {}
|
| + ~FakeEchoSerialIoHandler() override {}
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(FakeEchoSerialIoHandler);
|
| @@ -72,8 +90,6 @@ class FakeSerialConnectFunction : public core_api::SerialConnectFunction {
|
| const std::string& owner_extension_id) const override {
|
| scoped_refptr<FakeEchoSerialIoHandler> io_handler =
|
| new FakeEchoSerialIoHandler;
|
| - EXPECT_CALL(*io_handler.get(), SetControlSignals(_)).Times(1).WillOnce(
|
| - Return(true));
|
| SerialConnection* serial_connection =
|
| new SerialConnection(port, owner_extension_id);
|
| serial_connection->SetIoHandlerForTest(io_handler);
|
| @@ -81,19 +97,58 @@ class FakeSerialConnectFunction : public core_api::SerialConnectFunction {
|
| }
|
|
|
| protected:
|
| - ~FakeSerialConnectFunction() override {}
|
| + ~FakeSerialConnectFunction() {}
|
| };
|
|
|
| -} // namespace extensions
|
| +class SerialApiTest : public ExtensionApiTest,
|
| + public testing::WithParamInterface<bool> {
|
| + public:
|
| + SerialApiTest() {}
|
| +
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| + ExtensionApiTest::SetUpCommandLine(command_line);
|
| + if (GetParam())
|
| + command_line->AppendSwitch(switches::kEnableMojoSerialService);
|
| + test_service_registration_manager_.reset(
|
| + new TestServiceRegistrationManager);
|
| + }
|
| +
|
| + protected:
|
| + scoped_ptr<TestServiceRegistrationManager> test_service_registration_manager_;
|
| +};
|
|
|
| ExtensionFunction* FakeSerialGetDevicesFunctionFactory() {
|
| - return new extensions::FakeSerialGetDevicesFunction();
|
| + return new FakeSerialGetDevicesFunction();
|
| }
|
|
|
| ExtensionFunction* FakeSerialConnectFunctionFactory() {
|
| - return new extensions::FakeSerialConnectFunction();
|
| + return new FakeSerialConnectFunction();
|
| +}
|
| +
|
| +void CreateTestSerialServiceOnFileThread(
|
| + mojo::InterfaceRequest<device::serial::SerialService> request) {
|
| + auto io_handler_factory = base::Bind(&FakeEchoSerialIoHandler::Create);
|
| + auto connection_factory = new device::SerialConnectionFactory(
|
| + io_handler_factory,
|
| + content::BrowserThread::GetMessageLoopProxyForThread(
|
| + content::BrowserThread::IO));
|
| + scoped_ptr<device::SerialDeviceEnumerator> device_enumerator(
|
| + new FakeSerialDeviceEnumerator);
|
| + mojo::BindToRequest(new device::SerialServiceImpl(connection_factory,
|
| + device_enumerator.Pass()),
|
| + &request);
|
| }
|
|
|
| +void CreateTestSerialService(
|
| + mojo::InterfaceRequest<device::serial::SerialService> request) {
|
| + content::BrowserThread::PostTask(
|
| + content::BrowserThread::FILE,
|
| + FROM_HERE,
|
| + base::Bind(&CreateTestSerialServiceOnFileThread, base::Passed(&request)));
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // Disable SIMULATE_SERIAL_PORTS only if all the following are true:
|
| //
|
| // 1. You have an Arduino or compatible board attached to your machine and
|
| @@ -114,23 +169,32 @@ ExtensionFunction* FakeSerialConnectFunctionFactory() {
|
| // chrome/test/data/extensions/api_test/serial/api/serial_arduino_test.ino.
|
| //
|
| #define SIMULATE_SERIAL_PORTS (1)
|
| -IN_PROC_BROWSER_TEST_F(SerialApiTest, SerialFakeHardware) {
|
| - extensions::ResultCatcher catcher;
|
| +IN_PROC_BROWSER_TEST_P(SerialApiTest, SerialFakeHardware) {
|
| + ResultCatcher catcher;
|
| catcher.RestrictToBrowserContext(browser()->profile());
|
|
|
| #if SIMULATE_SERIAL_PORTS
|
| - ASSERT_TRUE(extensions::ExtensionFunctionDispatcher::OverrideFunction(
|
| - "serial.getDevices", FakeSerialGetDevicesFunctionFactory));
|
| - ASSERT_TRUE(extensions::ExtensionFunctionDispatcher::OverrideFunction(
|
| - "serial.connect", FakeSerialConnectFunctionFactory));
|
| + if (GetParam()) {
|
| + test_service_registration_manager_->OverrideServiceFactoryForTest(
|
| + base::Bind(&CreateTestSerialService));
|
| + } else {
|
| + ASSERT_TRUE(ExtensionFunctionDispatcher::OverrideFunction(
|
| + "serial.getDevices", FakeSerialGetDevicesFunctionFactory));
|
| + ASSERT_TRUE(ExtensionFunctionDispatcher::OverrideFunction(
|
| + "serial.connect", FakeSerialConnectFunctionFactory));
|
| + }
|
| #endif
|
|
|
| ASSERT_TRUE(RunExtensionTest("serial/api")) << message_;
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(SerialApiTest, SerialRealHardware) {
|
| - extensions::ResultCatcher catcher;
|
| +IN_PROC_BROWSER_TEST_P(SerialApiTest, SerialRealHardware) {
|
| + ResultCatcher catcher;
|
| catcher.RestrictToBrowserContext(browser()->profile());
|
|
|
| ASSERT_TRUE(RunExtensionTest("serial/real_hardware")) << message_;
|
| }
|
| +
|
| +INSTANTIATE_TEST_CASE_P(SerialApiTest, SerialApiTest, testing::Bool());
|
| +
|
| +} // namespace extensions
|
|
|