X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fextensions%2Fbrowser%2Fapi%2Fserial%2Fserial_apitest.cc;h=f951a208eda9fcfa966eb1c008832fd8e0bbc051;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=db7617a0563d4cb86c3f8ea2c6f83293a9182551;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/extensions/browser/api/serial/serial_apitest.cc b/src/extensions/browser/api/serial/serial_apitest.cc index db7617a..f951a20 100644 --- a/src/extensions/browser/api/serial/serial_apitest.cc +++ b/src/extensions/browser/api/serial/serial_apitest.cc @@ -5,31 +5,28 @@ #include #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 GetDevices() override { + mojo::Array 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 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 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 { + 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 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 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_enumerator( + new FakeSerialDeviceEnumerator); + mojo::BindToRequest(new device::SerialServiceImpl(connection_factory, + device_enumerator.Pass()), + &request); } +void CreateTestSerialService( + mojo::InterfaceRequest 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