summaryrefslogtreecommitdiffstats
path: root/device/usb/usb_descriptors_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'device/usb/usb_descriptors_unittest.cc')
-rw-r--r--device/usb/usb_descriptors_unittest.cc62
1 files changed, 62 insertions, 0 deletions
diff --git a/device/usb/usb_descriptors_unittest.cc b/device/usb/usb_descriptors_unittest.cc
index 03533ae..402304f 100644
--- a/device/usb/usb_descriptors_unittest.cc
+++ b/device/usb/usb_descriptors_unittest.cc
@@ -4,14 +4,32 @@
#include <stdint.h>
+#include "base/bind.h"
#include "base/strings/utf_string_conversions.h"
+#include "device/usb/mock_usb_device_handle.h"
#include "device/usb/usb_descriptors.h"
#include "testing/gtest/include/gtest/gtest.h"
+using testing::_;
+
namespace device {
namespace {
+ACTION_P2(InvokeCallback, data, length) {
+ size_t transferred_length = std::min(length, arg7);
+ memcpy(arg6->data(), data, transferred_length);
+ arg9.Run(USB_TRANSFER_COMPLETED, arg6, transferred_length);
+}
+
+void ExpectStringDescriptors(
+ scoped_ptr<std::map<uint8_t, base::string16>> string_map) {
+ EXPECT_EQ(3u, string_map->size());
+ EXPECT_EQ(base::ASCIIToUTF16("String 1"), (*string_map)[1]);
+ EXPECT_EQ(base::ASCIIToUTF16("String 2"), (*string_map)[2]);
+ EXPECT_EQ(base::ASCIIToUTF16("String 3"), (*string_map)[3]);
+}
+
class UsbDescriptorsTest : public ::testing::Test {};
TEST_F(UsbDescriptorsTest, StringDescriptor) {
@@ -68,6 +86,50 @@ TEST_F(UsbDescriptorsTest, OneByteStringDescriptor) {
EXPECT_EQ(base::string16(), string);
}
+TEST_F(UsbDescriptorsTest, ReadStringDescriptors) {
+ scoped_ptr<std::map<uint8_t, base::string16>> string_map(
+ new std::map<uint8_t, base::string16>());
+ (*string_map)[1] = base::string16();
+ (*string_map)[2] = base::string16();
+ (*string_map)[3] = base::string16();
+
+ scoped_refptr<MockUsbDeviceHandle> device_handle(
+ new MockUsbDeviceHandle(nullptr));
+ static const uint8_t kStringDescriptor0[] = {0x04, 0x03, 0x21, 0x43};
+ EXPECT_CALL(*device_handle,
+ ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD,
+ UsbDeviceHandle::DEVICE, 0x06, 0x0300, 0x0000, _,
+ _, _, _))
+ .WillOnce(InvokeCallback(kStringDescriptor0, sizeof(kStringDescriptor0)));
+ static const uint8_t kStringDescriptor1[] = {0x12, 0x03, 'S', 0, 't', 0,
+ 'r', 0, 'i', 0, 'n', 0,
+ 'g', 0, ' ', 0, '1', 0};
+ EXPECT_CALL(*device_handle,
+ ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD,
+ UsbDeviceHandle::DEVICE, 0x06, 0x0301, 0x4321, _,
+ _, _, _))
+ .WillOnce(InvokeCallback(kStringDescriptor1, sizeof(kStringDescriptor1)));
+ static const uint8_t kStringDescriptor2[] = {0x12, 0x03, 'S', 0, 't', 0,
+ 'r', 0, 'i', 0, 'n', 0,
+ 'g', 0, ' ', 0, '2', 0};
+ EXPECT_CALL(*device_handle,
+ ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD,
+ UsbDeviceHandle::DEVICE, 0x06, 0x0302, 0x4321, _,
+ _, _, _))
+ .WillOnce(InvokeCallback(kStringDescriptor2, sizeof(kStringDescriptor2)));
+ static const uint8_t kStringDescriptor3[] = {0x12, 0x03, 'S', 0, 't', 0,
+ 'r', 0, 'i', 0, 'n', 0,
+ 'g', 0, ' ', 0, '3', 0};
+ EXPECT_CALL(*device_handle,
+ ControlTransfer(USB_DIRECTION_INBOUND, UsbDeviceHandle::STANDARD,
+ UsbDeviceHandle::DEVICE, 0x06, 0x0303, 0x4321, _,
+ _, _, _))
+ .WillOnce(InvokeCallback(kStringDescriptor3, sizeof(kStringDescriptor3)));
+
+ ReadUsbStringDescriptors(device_handle, std::move(string_map),
+ base::Bind(&ExpectStringDescriptors));
+}
+
} // namespace
} // namespace device