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

Side by Side Diff: chrome/browser/extensions/api/usb/usb_apitest.cc

Issue 268713013: Move chrome.usb to //extensions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/usb/usb_api.h"
6 #include "chrome/browser/extensions/extension_apitest.h"
7 #include "chrome/browser/ui/browser.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "net/base/io_buffer.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11
12 using testing::AnyNumber;
13 using testing::_;
14 using testing::Return;
15 using content::BrowserThread;
16 using usb_service::UsbConfigDescriptor;
17 using usb_service::UsbDevice;
18 using usb_service::UsbDeviceHandle;
19 using usb_service::UsbEndpointDirection;
20 using usb_service::UsbTransferCallback;
21
22 namespace {
23
24 ACTION_TEMPLATE(InvokeUsbTransferCallback,
25 HAS_1_TEMPLATE_PARAMS(int, k),
26 AND_1_VALUE_PARAMS(p1)) {
27 ::std::tr1::get<k>(args).Run(p1, new net::IOBuffer(1), 1);
28 }
29
30 // MSVC erroneously thinks that at least one of the arguments for the transfer
31 // methods differ by const or volatility and emits a warning about the old
32 // standards-noncompliant behaviour of their compiler.
33 #if defined(OS_WIN)
34 #pragma warning(push)
35 #pragma warning(disable:4373)
36 #endif
37
38 class MockUsbDeviceHandle : public UsbDeviceHandle {
39 public:
40 MockUsbDeviceHandle() : UsbDeviceHandle() {}
41
42 MOCK_METHOD0(Close, void());
43
44 MOCK_METHOD10(ControlTransfer, void(const UsbEndpointDirection direction,
45 const TransferRequestType request_type, const TransferRecipient recipient,
46 const uint8 request, const uint16 value, const uint16 index,
47 net::IOBuffer* buffer, const size_t length, const unsigned int timeout,
48 const UsbTransferCallback& callback));
49
50 MOCK_METHOD6(BulkTransfer, void(const UsbEndpointDirection direction,
51 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
52 const unsigned int timeout, const UsbTransferCallback& callback));
53
54 MOCK_METHOD6(InterruptTransfer, void(const UsbEndpointDirection direction,
55 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
56 const unsigned int timeout, const UsbTransferCallback& callback));
57
58 MOCK_METHOD8(IsochronousTransfer, void(const UsbEndpointDirection direction,
59 const uint8 endpoint, net::IOBuffer* buffer, const size_t length,
60 const unsigned int packets, const unsigned int packet_length,
61 const unsigned int timeout, const UsbTransferCallback& callback));
62
63 MOCK_METHOD0(ResetDevice, bool());
64
65 void set_device(UsbDevice* device) { device_ = device; }
66
67 protected:
68 virtual ~MockUsbDeviceHandle() {}
69 };
70
71 class MockUsbDevice : public UsbDevice {
72 public:
73 explicit MockUsbDevice(MockUsbDeviceHandle* mock_handle)
74 : UsbDevice(),
75 mock_handle_(mock_handle) {
76 mock_handle->set_device(this);
77 }
78
79 virtual scoped_refptr<UsbDeviceHandle> Open() OVERRIDE {
80 return mock_handle_;
81 }
82
83 virtual bool Close(scoped_refptr<UsbDeviceHandle> handle) OVERRIDE {
84 EXPECT_TRUE(false) << "Should not be reached";
85 return false;
86 }
87
88 MOCK_METHOD0(ListInterfaces, scoped_refptr<UsbConfigDescriptor>());
89
90 private:
91 MockUsbDeviceHandle* mock_handle_;
92 virtual ~MockUsbDevice() {}
93 };
94
95 #if defined(OS_WIN)
96 #pragma warning(pop)
97 #endif
98
99 class UsbApiTest : public ExtensionApiTest {
100 public:
101 virtual void SetUpOnMainThread() OVERRIDE {
102 mock_device_handle_ = new MockUsbDeviceHandle();
103 mock_device_ = new MockUsbDevice(mock_device_handle_.get());
104 extensions::UsbGetDevicesFunction::SetDeviceForTest(mock_device_.get());
105 }
106
107 protected:
108 scoped_refptr<MockUsbDeviceHandle> mock_device_handle_;
109 scoped_refptr<MockUsbDevice> mock_device_;
110 };
111
112 } // namespace
113
114 IN_PROC_BROWSER_TEST_F(UsbApiTest, DeviceHandling) {
115 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(4);
116 ASSERT_TRUE(RunExtensionTest("usb/device_handling"));
117 }
118
119 IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) {
120 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(2);
121 EXPECT_CALL(*mock_device_handle_.get(), ResetDevice())
122 .WillOnce(Return(true))
123 .WillOnce(Return(false));
124 EXPECT_CALL(
125 *mock_device_handle_.get(),
126 InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
127 .WillOnce(
128 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
129 ASSERT_TRUE(RunExtensionTest("usb/reset_device"));
130 }
131
132 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) {
133 EXPECT_CALL(*mock_device_.get(), ListInterfaces())
134 .WillOnce(Return(scoped_refptr<UsbConfigDescriptor>()));
135 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
136 ASSERT_TRUE(RunExtensionTest("usb/list_interfaces"));
137 }
138
139 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) {
140 EXPECT_CALL(*mock_device_handle_.get(),
141 ControlTransfer(usb_service::USB_DIRECTION_OUTBOUND,
142 UsbDeviceHandle::STANDARD,
143 UsbDeviceHandle::DEVICE,
144 1, 2, 3, _, 1, _, _))
145 .WillOnce(
146 InvokeUsbTransferCallback<9>(usb_service::USB_TRANSFER_COMPLETED));
147 EXPECT_CALL(*mock_device_handle_.get(),
148 BulkTransfer(usb_service::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _))
149 .WillOnce(
150 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
151 EXPECT_CALL(
152 *mock_device_handle_.get(),
153 InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _))
154 .WillOnce(
155 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
156 EXPECT_CALL(*mock_device_handle_.get(),
157 IsochronousTransfer(
158 usb_service::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _))
159 .WillOnce(
160 InvokeUsbTransferCallback<7>(usb_service::USB_TRANSFER_COMPLETED));
161 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
162 ASSERT_TRUE(RunExtensionTest("usb/transfer_event"));
163 }
164
165 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) {
166 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, 0, _, _))
167 .WillOnce(
168 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED));
169 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
170 ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer"));
171 }
172
173 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) {
174 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, _, _, _))
175 .WillOnce(
176 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED))
177 .WillOnce(InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_ERROR))
178 .WillOnce(
179 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_TIMEOUT));
180 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
181 ASSERT_TRUE(RunExtensionTest("usb/transfer_failure"));
182 }
183
184 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) {
185 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber());
186 ASSERT_TRUE(RunExtensionTest("usb/invalid_length_transfer"));
187 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698