| Index: device/serial/serial_service_unittest.cc
|
| diff --git a/device/serial/serial_service_unittest.cc b/device/serial/serial_service_unittest.cc
|
| index 7e77c14fabdeb785ebb29bf0f185e4c15180624d..18baec6ae33aace04bde0566677b2c256f094e24 100644
|
| --- a/device/serial/serial_service_unittest.cc
|
| +++ b/device/serial/serial_service_unittest.cc
|
| @@ -7,12 +7,40 @@
|
| #include "base/run_loop.h"
|
| #include "device/serial/serial.mojom.h"
|
| #include "device/serial/serial_service_impl.h"
|
| +#include "device/serial/test_serial_io_handler.h"
|
| #include "mojo/public/cpp/bindings/error_handler.h"
|
| #include "mojo/public/cpp/bindings/interface_ptr.h"
|
| #include "mojo/public/cpp/bindings/interface_request.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace device {
|
| +namespace {
|
| +
|
| +class FakeSerialDeviceEnumerator : public SerialDeviceEnumerator {
|
| + virtual mojo::Array<serial::DeviceInfoPtr> GetDevices() OVERRIDE {
|
| + mojo::Array<serial::DeviceInfoPtr> devices(1);
|
| + devices[0] = serial::DeviceInfo::New();
|
| + devices[0]->path = "device";
|
| + return devices.Pass();
|
| + }
|
| +};
|
| +
|
| +class FailToOpenIoHandler : public TestSerialIoHandler {
|
| + public:
|
| + static scoped_refptr<SerialIoHandler> Create() {
|
| + return new FailToOpenIoHandler;
|
| + }
|
| +
|
| + virtual void Open(const std::string& port,
|
| + const OpenCompleteCallback& callback) OVERRIDE {
|
| + callback.Run(false);
|
| + }
|
| +
|
| + protected:
|
| + virtual ~FailToOpenIoHandler() {}
|
| +};
|
| +
|
| +} // namespace
|
|
|
| class SerialServiceTest : public testing::Test, public mojo::ErrorHandler {
|
| public:
|
| @@ -20,17 +48,32 @@ class SerialServiceTest : public testing::Test, public mojo::ErrorHandler {
|
|
|
| void StoreDevices(mojo::Array<serial::DeviceInfoPtr> devices) {
|
| devices_ = devices.Pass();
|
| - message_loop_.PostTask(FROM_HERE, run_loop_.QuitClosure());
|
| + StopMessageLoop();
|
| }
|
|
|
| virtual void OnConnectionError() OVERRIDE {
|
| - message_loop_.PostTask(FROM_HERE, run_loop_.QuitClosure());
|
| - FAIL() << "Connection error";
|
| + StopMessageLoop();
|
| + EXPECT_TRUE(expecting_error_);
|
| + }
|
| +
|
| + void RunMessageLoop() {
|
| + run_loop_.reset(new base::RunLoop);
|
| + run_loop_->Run();
|
| }
|
|
|
| + void StopMessageLoop() {
|
| + ASSERT_TRUE(run_loop_);
|
| + message_loop_.PostTask(FROM_HERE, run_loop_->QuitClosure());
|
| + }
|
| +
|
| + void OnGotInfo(serial::ConnectionInfoPtr options) { StopMessageLoop(); }
|
| +
|
| base::MessageLoop message_loop_;
|
| - base::RunLoop run_loop_;
|
| + scoped_ptr<base::RunLoop> run_loop_;
|
| mojo::Array<serial::DeviceInfoPtr> devices_;
|
| + scoped_refptr<TestSerialIoHandler> io_handler_;
|
| + bool expecting_error_;
|
| + serial::ConnectionInfoPtr info_;
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(SerialServiceTest);
|
| @@ -38,16 +81,69 @@ class SerialServiceTest : public testing::Test, public mojo::ErrorHandler {
|
|
|
| TEST_F(SerialServiceTest, GetDevices) {
|
| mojo::InterfacePtr<serial::SerialService> service;
|
| - SerialServiceImpl::Create(mojo::Get(&service));
|
| + SerialServiceImpl::Create(NULL, mojo::Get(&service));
|
| service.set_error_handler(this);
|
| mojo::Array<serial::DeviceInfoPtr> result;
|
| service->GetDevices(
|
| base::Bind(&SerialServiceTest::StoreDevices, base::Unretained(this)));
|
| - run_loop_.Run();
|
| + RunMessageLoop();
|
|
|
| // Because we're running on unknown hardware, only check that we received a
|
| // non-null result.
|
| EXPECT_TRUE(devices_);
|
| }
|
|
|
| +TEST_F(SerialServiceTest, Connect) {
|
| + mojo::InterfacePtr<serial::SerialService> service;
|
| + mojo::BindToProxy(
|
| + new SerialServiceImpl(
|
| + new SerialConnectionFactory(base::Bind(&TestSerialIoHandler::Create),
|
| + base::MessageLoopProxy::current()),
|
| + scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator)),
|
| + &service);
|
| + service.set_error_handler(this);
|
| + mojo::InterfacePtr<serial::Connection> connection;
|
| + service->Connect(
|
| + "device", serial::ConnectionOptions::New(), mojo::Get(&connection));
|
| + connection.set_error_handler(this);
|
| + connection->GetInfo(
|
| + base::Bind(&SerialServiceTest::OnGotInfo, base::Unretained(this)));
|
| + RunMessageLoop();
|
| + connection.reset();
|
| +}
|
| +
|
| +TEST_F(SerialServiceTest, ConnectInvalidPath) {
|
| + mojo::InterfacePtr<serial::SerialService> service;
|
| + mojo::BindToProxy(
|
| + new SerialServiceImpl(
|
| + new SerialConnectionFactory(base::Bind(&TestSerialIoHandler::Create),
|
| + base::MessageLoopProxy::current()),
|
| + scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator)),
|
| + &service);
|
| + mojo::InterfacePtr<serial::Connection> connection;
|
| + service->Connect(
|
| + "invalid_path", serial::ConnectionOptions::New(), mojo::Get(&connection));
|
| + connection.set_error_handler(this);
|
| + expecting_error_ = true;
|
| + RunMessageLoop();
|
| + EXPECT_TRUE(connection.encountered_error());
|
| +}
|
| +
|
| +TEST_F(SerialServiceTest, ConnectOpenFailed) {
|
| + mojo::InterfacePtr<serial::SerialService> service;
|
| + mojo::BindToProxy(
|
| + new SerialServiceImpl(
|
| + new SerialConnectionFactory(base::Bind(&FailToOpenIoHandler::Create),
|
| + base::MessageLoopProxy::current()),
|
| + scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator)),
|
| + &service);
|
| + mojo::InterfacePtr<serial::Connection> connection;
|
| + service->Connect(
|
| + "device", serial::ConnectionOptions::New(), mojo::Get(&connection));
|
| + expecting_error_ = true;
|
| + connection.set_error_handler(this);
|
| + RunMessageLoop();
|
| + EXPECT_TRUE(connection.encountered_error());
|
| +}
|
| +
|
| } // namespace device
|
|
|