Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Side by Side Diff: device/serial/serial_connection_unittest.cc

Issue 401563002: Add a partial Mojo serial connection interface and implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/serial/serial_connection_factory.cc ('k') | device/serial/serial_io_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h"
8 #include "device/serial/serial.mojom.h"
9 #include "device/serial/serial_service_impl.h"
10 #include "device/serial/test_serial_io_handler.h"
11 #include "mojo/public/cpp/bindings/error_handler.h"
12 #include "mojo/public/cpp/bindings/interface_ptr.h"
13 #include "mojo/public/cpp/bindings/interface_request.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace device {
17 namespace {
18
19 class FakeSerialDeviceEnumerator : public SerialDeviceEnumerator {
20 virtual mojo::Array<serial::DeviceInfoPtr> GetDevices() OVERRIDE {
21 mojo::Array<serial::DeviceInfoPtr> devices(1);
22 devices[0] = serial::DeviceInfo::New();
23 devices[0]->path = "device";
24 return devices.Pass();
25 }
26 };
27
28 } // namespace
29
30 class SerialConnectionTest : public testing::Test, public mojo::ErrorHandler {
31 public:
32 SerialConnectionTest() : connected_(false), success_(false) {}
33
34 virtual void SetUp() OVERRIDE {
35 message_loop_.reset(new base::MessageLoop);
36 mojo::InterfacePtr<serial::SerialService> service;
37 mojo::BindToProxy(
38 new SerialServiceImpl(
39 new SerialConnectionFactory(
40 base::Bind(&SerialConnectionTest::CreateIoHandler,
41 base::Unretained(this)),
42 base::MessageLoopProxy::current()),
43 scoped_ptr<SerialDeviceEnumerator>(new FakeSerialDeviceEnumerator)),
44 &service);
45 service.set_error_handler(this);
46 service->Connect(
47 "device", serial::ConnectionOptions::New(), mojo::Get(&connection_));
48 connection_.set_error_handler(this);
49 connection_->GetInfo(
50 base::Bind(&SerialConnectionTest::StoreInfo, base::Unretained(this)));
51 RunMessageLoop();
52 ASSERT_TRUE(io_handler_);
53 }
54
55 void StoreInfo(serial::ConnectionInfoPtr options) {
56 info_ = options.Pass();
57 StopMessageLoop();
58 }
59
60 void StoreControlSignals(serial::DeviceControlSignalsPtr signals) {
61 signals_ = signals.Pass();
62 StopMessageLoop();
63 }
64
65 void StoreSuccess(bool success) {
66 success_ = success;
67 StopMessageLoop();
68 }
69
70 void RunMessageLoop() {
71 run_loop_.reset(new base::RunLoop);
72 run_loop_->Run();
73 }
74
75 void StopMessageLoop() {
76 ASSERT_TRUE(message_loop_);
77 ASSERT_TRUE(run_loop_);
78 message_loop_->PostTask(FROM_HERE, run_loop_->QuitClosure());
79 }
80
81 scoped_refptr<SerialIoHandler> CreateIoHandler() {
82 io_handler_ = new TestSerialIoHandler;
83 return io_handler_;
84 }
85
86 virtual void OnConnectionError() OVERRIDE {
87 StopMessageLoop();
88 FAIL() << "Connection error";
89 }
90
91 mojo::Array<serial::DeviceInfoPtr> devices_;
92 serial::ConnectionInfoPtr info_;
93 serial::DeviceControlSignalsPtr signals_;
94 bool connected_;
95 bool success_;
96
97 scoped_ptr<base::MessageLoop> message_loop_;
98 scoped_ptr<base::RunLoop> run_loop_;
99 mojo::InterfacePtr<serial::Connection> connection_;
100 scoped_refptr<TestSerialIoHandler> io_handler_;
101
102 private:
103 DISALLOW_COPY_AND_ASSIGN(SerialConnectionTest);
104 };
105
106 TEST_F(SerialConnectionTest, GetInfo) {
107 // |info_| is filled in during SetUp().
108 ASSERT_TRUE(info_);
109 EXPECT_EQ(9600u, info_->bitrate);
110 EXPECT_EQ(serial::DATA_BITS_EIGHT, info_->data_bits);
111 EXPECT_EQ(serial::PARITY_BIT_NO, info_->parity_bit);
112 EXPECT_EQ(serial::STOP_BITS_ONE, info_->stop_bits);
113 EXPECT_FALSE(info_->cts_flow_control);
114 }
115
116 TEST_F(SerialConnectionTest, SetOptions) {
117 serial::ConnectionOptionsPtr options(serial::ConnectionOptions::New());
118 options->bitrate = 12345;
119 options->data_bits = serial::DATA_BITS_SEVEN;
120 options->has_cts_flow_control = true;
121 options->cts_flow_control = true;
122 connection_->SetOptions(
123 options.Pass(),
124 base::Bind(&SerialConnectionTest::StoreSuccess, base::Unretained(this)));
125 RunMessageLoop();
126 ASSERT_TRUE(success_);
127 serial::ConnectionInfo* info = io_handler_->connection_info();
128 EXPECT_EQ(12345u, info->bitrate);
129 EXPECT_EQ(serial::DATA_BITS_SEVEN, info->data_bits);
130 EXPECT_EQ(serial::PARITY_BIT_NO, info->parity_bit);
131 EXPECT_EQ(serial::STOP_BITS_ONE, info->stop_bits);
132 EXPECT_TRUE(info->cts_flow_control);
133 }
134
135 TEST_F(SerialConnectionTest, GetControlSignals) {
136 connection_->GetControlSignals(base::Bind(
137 &SerialConnectionTest::StoreControlSignals, base::Unretained(this)));
138 serial::DeviceControlSignals* signals = io_handler_->device_control_signals();
139 signals->dcd = true;
140 signals->dsr = true;
141
142 RunMessageLoop();
143 ASSERT_TRUE(signals_);
144 EXPECT_TRUE(signals_->dcd);
145 EXPECT_FALSE(signals_->cts);
146 EXPECT_FALSE(signals_->ri);
147 EXPECT_TRUE(signals_->dsr);
148 }
149
150 TEST_F(SerialConnectionTest, SetControlSignals) {
151 serial::HostControlSignalsPtr signals(serial::HostControlSignals::New());
152 signals->has_dtr = true;
153 signals->dtr = true;
154 signals->has_rts = true;
155 signals->rts = true;
156
157 connection_->SetControlSignals(
158 signals.Pass(),
159 base::Bind(&SerialConnectionTest::StoreSuccess, base::Unretained(this)));
160 RunMessageLoop();
161 ASSERT_TRUE(success_);
162 EXPECT_TRUE(io_handler_->dtr());
163 EXPECT_TRUE(io_handler_->rts());
164 }
165
166 TEST_F(SerialConnectionTest, Flush) {
167 ASSERT_EQ(0, io_handler_->flushes());
168 connection_->Flush(
169 base::Bind(&SerialConnectionTest::StoreSuccess, base::Unretained(this)));
170 RunMessageLoop();
171 ASSERT_TRUE(success_);
172 EXPECT_EQ(1, io_handler_->flushes());
173 }
174
175 TEST_F(SerialConnectionTest, Disconnect) {
176 connection_.reset();
177 message_loop_.reset();
178 EXPECT_TRUE(io_handler_->HasOneRef());
179 }
180
181 } // namespace device
OLDNEW
« no previous file with comments | « device/serial/serial_connection_factory.cc ('k') | device/serial/serial_io_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698