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 |