diff options
Diffstat (limited to 'device/usb/usb_descriptors_unittest.cc')
-rw-r--r-- | device/usb/usb_descriptors_unittest.cc | 62 |
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 |