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

Unified Diff: tools/usb_gadget/hid_gadget_test.py

Issue 410743006: usb_gadget: Base USB HID gadget implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed copyright text and added specification references. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/usb_gadget/hid_gadget.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/usb_gadget/hid_gadget_test.py
diff --git a/tools/usb_gadget/hid_gadget_test.py b/tools/usb_gadget/hid_gadget_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..58d9d9809d7f30aaadcdd50ce1ed274472e96d8b
--- /dev/null
+++ b/tools/usb_gadget/hid_gadget_test.py
@@ -0,0 +1,231 @@
+#!/usr/bin/python
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+import mock
+
+import hid_constants
+import hid_descriptors
+import hid_gadget
+import usb_constants
+
+
+report_desc = hid_descriptors.ReportDescriptor(
+ hid_descriptors.UsagePage(0xFF00), # Vendor Defined
+ hid_descriptors.Usage(0x00),
+ hid_descriptors.Collection(
+ hid_constants.CollectionType.APPLICATION,
+ hid_descriptors.LogicalMinimum(0, force_length=1),
+ hid_descriptors.LogicalMaximum(255, force_length=2),
+ hid_descriptors.ReportSize(8),
+ hid_descriptors.ReportCount(8),
+ hid_descriptors.Input(hid_descriptors.Data,
+ hid_descriptors.Variable,
+ hid_descriptors.Absolute,
+ hid_descriptors.BufferedBytes),
+ hid_descriptors.Output(hid_descriptors.Data,
+ hid_descriptors.Variable,
+ hid_descriptors.Absolute,
+ hid_descriptors.BufferedBytes),
+ hid_descriptors.Feature(hid_descriptors.Data,
+ hid_descriptors.Variable,
+ hid_descriptors.Absolute,
+ hid_descriptors.BufferedBytes)
+ )
+)
+
+combo_report_desc = hid_descriptors.ReportDescriptor(
+ hid_descriptors.ReportID(1),
+ report_desc,
+ hid_descriptors.ReportID(2),
+ report_desc
+)
+
+
+class HidGadgetTest(unittest.TestCase):
+
+ def test_bad_intervals(self):
+ with self.assertRaisesRegexp(ValueError, 'Full speed'):
+ hid_gadget.HidGadget(report_desc, features={}, interval_ms=50000,
+ vendor_id=0, product_id=0)
+ with self.assertRaisesRegexp(ValueError, 'High speed'):
+ hid_gadget.HidGadget(report_desc, features={}, interval_ms=5000,
+ vendor_id=0, product_id=0)
+
+ def test_get_string_descriptor(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ g.AddStringDescriptor(2, 'HID Gadget')
+ desc = g.ControlRead(0x80, 6, 0x0302, 0x0409, 255)
+ self.assertEquals(desc, '\x16\x03H\0I\0D\0 \0G\0a\0d\0g\0e\0t\0')
+
+ def test_get_report_descriptor(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ desc = g.ControlRead(0x81, 6, 0x2200, 0, 63)
+ self.assertEquals(desc, report_desc)
+
+ def test_set_idle(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ self.assertTrue(g.ControlWrite(0x21, 0x0A, 0, 0, ''))
+
+ def test_class_wrong_target(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ self.assertIsNone(g.ControlRead(0xA0, 0, 0, 0, 0)) # Device
+ self.assertIsNone(g.ControlRead(0xA1, 0, 0, 1, 0)) # Interface 1
+ self.assertIsNone(g.ControlWrite(0x20, 0, 0, 0, '')) # Device
+ self.assertIsNone(g.ControlWrite(0x21, 0, 0, 1, '')) # Interface 1
+
+ def test_send_report_zero(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ g.SendReport(0, 'Hello world!')
+ chip.SendPacket.assert_called_once_with(0x81, 'Hello world!')
+
+ def test_send_multiple_reports(self):
+ g = hid_gadget.HidGadget(report_desc=report_desc, features={},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ g.SendReport(1, 'Hello!')
+ g.SendReport(2, 'World!')
+ chip.SendPacket.assert_has_calls([
+ mock.call(0x81, '\x01Hello!'),
+ mock.call(0x81, '\x02World!'),
+ ])
+
+
+class TestFeature(hid_gadget.HidFeature):
+
+ def SetInputReport(self, data):
+ self.input_report = data
+ return True
+
+ def SetOutputReport(self, data):
+ self.output_report = data
+ return True
+
+ def SetFeatureReport(self, data):
+ self.feature_report = data
+ return True
+
+ def GetInputReport(self):
+ return 'Input report.'
+
+ def GetOutputReport(self):
+ return 'Output report.'
+
+ def GetFeatureReport(self):
+ return 'Feature report.'
+
+
+class HidFeatureTest(unittest.TestCase):
+
+ def test_disconnected(self):
+ feature = TestFeature()
+ with self.assertRaisesRegexp(RuntimeError, 'not connected'):
+ feature.SendReport('Hello world!')
+
+ def test_send_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ feature.SendReport('Hello world!')
+ chip.SendPacket.assert_called_once_with(0x81, '\x01Hello world!')
+ g.Disconnected()
+
+ def test_get_bad_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ self.assertIsNone(g.ControlRead(0xA1, 1, 0x0102, 0, 8))
+
+ def test_set_bad_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ self.assertIsNone(g.ControlWrite(0x21, 0x09, 0x0102, 0, 'Hello!'))
+
+ def test_get_input_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ report = g.ControlRead(0xA1, 1, 0x0101, 0, 8)
+ self.assertEquals(report, 'Input re')
+
+ def test_set_input_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ self.assertTrue(g.ControlWrite(0x21, 0x09, 0x0101, 0, 'Hello!'))
+ self.assertEquals(feature.input_report, 'Hello!')
+
+ def test_get_output_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ report = g.ControlRead(0xA1, 1, 0x0201, 0, 8)
+ self.assertEquals(report, 'Output r')
+
+ def test_set_output_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ self.assertTrue(g.ControlWrite(0x21, 0x09, 0x0201, 0, 'Hello!'))
+ self.assertEquals(feature.output_report, 'Hello!')
+
+ def test_receive_interrupt(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ g.ReceivePacket(0x01, '\x01Hello!')
+ self.assertFalse(chip.HaltEndpoint.called)
+ self.assertEquals(feature.output_report, 'Hello!')
+
+ def test_receive_interrupt_report_zero(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={0: feature},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ g.ReceivePacket(0x01, 'Hello!')
+ self.assertFalse(chip.HaltEndpoint.called)
+ self.assertEquals(feature.output_report, 'Hello!')
+
+ def test_receive_bad_interrupt(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ chip = mock.Mock()
+ g.Connected(chip, usb_constants.Speed.HIGH)
+ g.ReceivePacket(0x01, '\x00Hello!')
+ chip.HaltEndpoint.assert_called_once_with(0x01)
+
+ def test_get_feature_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ report = g.ControlRead(0xA1, 1, 0x0301, 0, 8)
+ self.assertEquals(report, 'Feature ')
+
+ def test_set_feature_report(self):
+ feature = TestFeature()
+ g = hid_gadget.HidGadget(report_desc, features={1: feature},
+ vendor_id=0, product_id=0)
+ self.assertTrue(g.ControlWrite(0x21, 0x09, 0x0301, 0, 'Hello!'))
+ self.assertEquals(feature.feature_report, 'Hello!')
+
+
+if __name__ == '__main__':
+ unittest.main()
« no previous file with comments | « tools/usb_gadget/hid_gadget.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698