Chromium Code Reviews| 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 9fd50886252f0a9997a8c8671cc6d4b3d85f253b..192906c6d86c8bc13d3a49dc9c6db53b01f11f5c 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/browser/service_registration_manager.h" |
| #include "extensions/common/api/serial.h" |
| +#include "extensions/common/switches.h" |
| #include "extensions/test/result_catcher.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: |
| @@ -46,13 +43,34 @@ class FakeSerialGetDevicesFunction : public AsyncExtensionFunction { |
| virtual ~FakeSerialGetDevicesFunction() {} |
| }; |
| +class FakeSerialDeviceEnumerator : public device::SerialDeviceEnumerator { |
| + public: |
| + virtual ~FakeSerialDeviceEnumerator() {} |
| + |
| + virtual 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() { |
|
raymes
2014/10/15 21:07:09
Where is this called from?
Sam McNally
2014/10/20 07:21:07
CreateTestSerialServiceOnFileThread.
|
| + return new FakeEchoSerialIoHandler(); |
| } |
| MOCK_METHOD1(SetControlSignals, |
| @@ -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)); |
|
raymes
2014/10/15 21:07:09
Why did this line get moved?
Sam McNally
2014/10/20 07:21:06
So FakeEchoSerialIoHandlers created elsewhere have
|
| SerialConnection* serial_connection = |
| new SerialConnection(port, owner_extension_id); |
| serial_connection->SetIoHandlerForTest(io_handler); |
| @@ -84,7 +100,21 @@ class FakeSerialConnectFunction : public core_api::SerialConnectFunction { |
| virtual ~FakeSerialConnectFunction() {} |
| }; |
| -} // namespace extensions |
| +class SerialApiTest : public ExtensionApiTest, |
| + public testing::WithParamInterface<bool> { |
| + public: |
| + SerialApiTest() {} |
| + virtual void SetUpCommandLine(base::CommandLine* command_line) override { |
| + ExtensionApiTest::SetUpCommandLine(command_line); |
| + if (GetParam()) |
|
raymes
2014/10/15 21:07:09
I don't really understand these GetParam related c
Sam McNally
2014/10/20 07:21:07
Yes. INSTANTIATE_TEST_CASE_P(SerialApiTest, Serial
raymes
2014/10/24 00:09:30
nit: Cool. It's probably worth making a comment ab
|
| + command_line->AppendSwitch(switches::kEnableMojoSerialService); |
| + } |
| + |
| + virtual void TearDown() override { |
| + ServiceRegistrationManager::GetSharedInstance()->ClearOverridesForTest(); |
| + ExtensionApiTest::TearDown(); |
| + } |
| +}; |
| ExtensionFunction* FakeSerialGetDevicesFunctionFactory() { |
| return new extensions::FakeSerialGetDevicesFunction(); |
| @@ -94,6 +124,29 @@ ExtensionFunction* FakeSerialConnectFunctionFactory() { |
| return new extensions::FakeSerialConnectFunction(); |
| } |
| +void CreateTestSerialServiceOnFileThread( |
| + mojo::InterfaceRequest<device::serial::SerialService> request) { |
| + mojo::BindToRequest( |
| + new device::SerialServiceImpl( |
| + new device::SerialConnectionFactory( |
| + base::Bind(&FakeEchoSerialIoHandler::Create), |
| + content::BrowserThread::GetMessageLoopProxyForThread( |
| + content::BrowserThread::IO)), |
| + scoped_ptr<device::SerialDeviceEnumerator>( |
| + new FakeSerialDeviceEnumerator)), |
| + &request); |
|
raymes
2014/10/15 21:07:09
Could you split this up into a few statements? :)
Sam McNally
2014/10/20 07:21:07
Done.
|
| +} |
| + |
| +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 +167,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()) { |
| + ServiceRegistrationManager::GetSharedInstance() |
| + ->OverrideServiceFactoryForTest(base::Bind(&CreateTestSerialService)); |
| + } else { |
| + ASSERT_TRUE(extensions::ExtensionFunctionDispatcher::OverrideFunction( |
| + "serial.getDevices", FakeSerialGetDevicesFunctionFactory)); |
| + ASSERT_TRUE(extensions::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 |