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

Side by Side Diff: tools/usb_gadget/usb_descriptors_test.py

Issue 409883008: [usb_gadget p00] Classes for encoding USB descriptors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove "(c)" from copyright text. 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 | « tools/usb_gadget/usb_descriptors.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 import unittest
7
8 import usb_descriptors
9
10
11 class DescriptorWithField(usb_descriptors.Descriptor):
12 pass
13
14 DescriptorWithField.AddField('bField', 'B')
15
16
17 class DescriptorWithDefault(usb_descriptors.Descriptor):
18 pass
19
20 DescriptorWithDefault.AddField('bDefault', 'B', default=42)
21
22
23 class DescriptorWithFixed(usb_descriptors.Descriptor):
24 pass
25
26 DescriptorWithFixed.AddFixedField('bFixed', 'B', 42)
27
28
29 class DescriptorWithComputed(usb_descriptors.Descriptor):
30
31 @property
32 def foo(self):
33 return 42
34
35 DescriptorWithComputed.AddComputedField('bComputed', 'B', 'foo')
36
37
38 class DescriptorWithDescriptors(usb_descriptors.DescriptorContainer):
39 pass
40
41 DescriptorWithDescriptors.AddField('bType', 'B')
42
43
44 class DescriptorTest(unittest.TestCase):
45
46 def test_default(self):
47 obj = DescriptorWithDefault()
48 self.assertEquals(obj.bDefault, 42)
49
50 def test_change_default(self):
51 obj = DescriptorWithDefault()
52 obj.bDefault = 1
53 self.assertEquals(obj.bDefault, 1)
54
55 def test_override_default(self):
56 obj = DescriptorWithDefault(bDefault=56)
57 self.assertEquals(obj.bDefault, 56)
58
59 def test_fixed(self):
60 obj = DescriptorWithFixed()
61 self.assertEquals(obj.bFixed, 42)
62
63 def test_set_fixed(self):
64 with self.assertRaises(RuntimeError):
65 DescriptorWithFixed(bFixed=1)
66
67 def test_modify_fixed(self):
68 obj = DescriptorWithFixed()
69 with self.assertRaises(RuntimeError):
70 obj.bFixed = 1
71
72 def test_computed(self):
73 obj = DescriptorWithComputed()
74 self.assertEquals(obj.bComputed, 42)
75
76 def test_set_computed(self):
77 with self.assertRaises(RuntimeError):
78 DescriptorWithComputed(bComputed=1)
79
80 def test_modify_computed(self):
81 obj = DescriptorWithComputed()
82 with self.assertRaises(RuntimeError):
83 obj.bComputed = 1
84
85 def test_unexpected(self):
86 with self.assertRaisesRegexp(TypeError, 'Unexpected'):
87 DescriptorWithField(bUnexpected=1)
88
89 def test_missing(self):
90 with self.assertRaisesRegexp(TypeError, 'Missing'):
91 DescriptorWithField()
92
93 def test_size(self):
94 obj = DescriptorWithField(bField=42)
95 self.assertEquals(obj.struct_size, 1)
96 self.assertEquals(obj.total_size, 1)
97
98 def test_encode(self):
99 obj = DescriptorWithField(bField=0xff)
100 self.assertEquals(obj.Encode(), '\xff')
101
102 def test_string(self):
103 obj = DescriptorWithField(bField=42)
104 string = str(obj)
105 self.assertIn('bField', string)
106 self.assertIn('42', string)
107
108 def test_container(self):
109 parent = DescriptorWithDescriptors(bType=0)
110 child1 = DescriptorWithField(bField=1)
111 parent.Add(child1)
112 child2 = DescriptorWithField(bField=2)
113 parent.Add(child2)
114 self.assertEquals(parent.total_size, 3)
115 self.assertEquals(parent.Encode(), '\x00\x01\x02')
116 string = str(parent)
117 self.assertIn('bType', string)
118 self.assertIn('bField', string)
119
120
121 class TestUsbDescriptors(unittest.TestCase):
122
123 def test_device_descriptor(self):
124 device_desc = usb_descriptors.DeviceDescriptor(
125 idVendor=0xDEAD,
126 idProduct=0xBEEF,
127 bcdDevice=0x0100,
128 bNumConfigurations=1)
129 self.assertEquals(
130 device_desc.Encode(),
131 '\x12\x01\x00\x02\x00\x00\x00\x40\xAD\xDE\xEF\xBE\x00\x01\x00\x00\x00'
132 '\x01')
133
134 def test_unique_interfaces(self):
135 interface_desc1 = usb_descriptors.InterfaceDescriptor(bInterfaceNumber=1)
136 interface_desc2 = usb_descriptors.InterfaceDescriptor(bInterfaceNumber=1,
137 bAlternateSetting=1)
138 interface_desc3 = usb_descriptors.InterfaceDescriptor(bInterfaceNumber=1)
139
140 configuration_desc = usb_descriptors.ConfigurationDescriptor(
141 bmAttributes=0xC0,
142 MaxPower=100)
143 configuration_desc.AddInterface(interface_desc1)
144 configuration_desc.AddInterface(interface_desc2)
145 with self.assertRaisesRegexp(RuntimeError, r'Interface 1 \(alternate 0\)'):
146 configuration_desc.AddInterface(interface_desc3)
147
148 def test_unique_endpoints(self):
149 endpoint_desc1 = usb_descriptors.EndpointDescriptor(
150 bEndpointAddress=0x01,
151 bmAttributes=0x02,
152 wMaxPacketSize=64,
153 bInterval=1)
154 endpoint_desc2 = usb_descriptors.EndpointDescriptor(
155 bEndpointAddress=0x81,
156 bmAttributes=0x02,
157 wMaxPacketSize=64,
158 bInterval=1)
159 endpoint_desc3 = usb_descriptors.EndpointDescriptor(
160 bEndpointAddress=0x01,
161 bmAttributes=0x01,
162 wMaxPacketSize=32,
163 bInterval=10)
164
165 interface_desc = usb_descriptors.InterfaceDescriptor(bInterfaceNumber=1)
166 interface_desc.AddEndpoint(endpoint_desc1)
167 interface_desc.AddEndpoint(endpoint_desc2)
168 with self.assertRaisesRegexp(RuntimeError, 'Endpoint 0x01 already defined'):
169 interface_desc.AddEndpoint(endpoint_desc3)
170
171 def test_configuration_descriptor(self):
172 endpoint_desc = usb_descriptors.EndpointDescriptor(
173 bEndpointAddress=0x01,
174 bmAttributes=0x02,
175 wMaxPacketSize=64,
176 bInterval=1)
177 encoded_endpoint = '\x07\x05\x01\x02\x40\x00\x01'
178 self.assertEquals(endpoint_desc.Encode(), encoded_endpoint)
179
180 interface_desc = usb_descriptors.InterfaceDescriptor(bInterfaceNumber=1)
181 interface_desc.AddEndpoint(endpoint_desc)
182 self.assertEquals([endpoint_desc], interface_desc.GetEndpoints())
183 encoded_interface = ('\x09\x04\x01\x00\x01\xFF\xFF\xFF\x00' +
184 encoded_endpoint)
185 self.assertEquals(interface_desc.Encode(), encoded_interface)
186
187 configuration_desc = usb_descriptors.ConfigurationDescriptor(
188 bmAttributes=0xC0,
189 MaxPower=100)
190 configuration_desc.AddInterface(interface_desc)
191 self.assertEquals([interface_desc], configuration_desc.GetInterfaces())
192 encoded_configuration = ('\x09\x02\x19\x00\x01\x01\x00\xC0\x64' +
193 encoded_interface)
194 self.assertEquals(configuration_desc.Encode(), encoded_configuration)
195
196 def test_encode_hid_descriptor(self):
197 hid_desc = usb_descriptors.HidDescriptor()
198 hid_desc.AddDescriptor(0x22, 0x80)
199 hid_desc.AddDescriptor(0x23, 0x60)
200 encoded_desc = '\x0C\x21\x11\x01\x00\x02\x22\x80\x00\x23\x60\x00'
201 self.assertEquals(hid_desc.Encode(), encoded_desc)
202
203 def test_print_hid_descriptor(self):
204 hid_desc = usb_descriptors.HidDescriptor()
205 hid_desc.AddDescriptor(0x22, 0x80)
206 hid_desc.AddDescriptor(0x23, 0x60)
207 string = str(hid_desc)
208 self.assertIn('0x22', string)
209 self.assertIn('0x23', string)
210
211
212 if __name__ == '__main__':
213 unittest.main()
OLDNEW
« no previous file with comments | « tools/usb_gadget/usb_descriptors.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698