Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / extensions / browser / api / serial / serial_apitest.cc
index db7617a..f951a20 100644 (file)
@@ -5,31 +5,28 @@
 #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:
-  virtual bool RunAsync() OVERRIDE {
+  bool RunAsync() override {
     base::ListValue* devices = new base::ListValue();
     base::DictionaryValue* device0 = new base::DictionaryValue();
     device0->SetString("path", "/dev/fakeserial");
@@ -43,23 +40,44 @@ class FakeSerialGetDevicesFunction : public AsyncExtensionFunction {
   }
 
  protected:
-  virtual ~FakeSerialGetDevicesFunction() {}
+  ~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);
@@ -67,13 +85,11 @@ class FakeEchoSerialIoHandler : public device::TestSerialIoHandler {
 
 class FakeSerialConnectFunction : public core_api::SerialConnectFunction {
  protected:
-  virtual SerialConnection* CreateSerialConnection(
+  SerialConnection* CreateSerialConnection(
       const std::string& port,
-      const std::string& owner_extension_id) const OVERRIDE {
+      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:
-  virtual ~FakeSerialConnectFunction() {}
+  ~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