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 |