Coverage for tests/unit_tests/utils/test_usb_util.py: 100%
43 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-06 10:20 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-06 10:20 +0000
1"""Tests of usb_util.py"""
3from typing import List
4from apio.utils.usb_util import (
5 UsbDevice,
6 UsbDeviceFilter,
7)
10def test_device_summaries():
11 """Test usb device summary() string."""
12 device = UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0")
13 assert device.summary() == "[0403:6010] [0:1] [m0] [p0] [sn0]"
16def test_filtering():
17 """Test the filtering function."""
18 devs: List[UsbDevice] = [
19 UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0"), # devs[0]
20 UsbDevice("0403", "6020", 3, 1, "m1", "p1", "sn1", "t1"), # devs[1]
21 UsbDevice("0405", "6020", 3, 1, "m2", "p2", "sn2", "t2"), # devs[2]
22 UsbDevice("0403", "6020", 2, 1, "m3", "p3", "sn3", "t3"), # devs[3]
23 UsbDevice("0403", "6010", 1, 1, "m4", "p4", "sn4", "t4"), # devs[4]
24 UsbDevice("0405", "6010", 1, 1, "m5", "p5", "sn5", "t5"), # devs[5]
25 ]
27 # -- All filtering disabled.
28 filt = UsbDeviceFilter()
29 assert filt.summary() == "[all]"
30 assert filt.filter(devs) == devs
32 # -- Filter by VID
33 filt = UsbDeviceFilter().set_vendor_id("9999")
34 assert filt.summary() == "[VID=9999]"
35 assert filt.filter(devs) == []
37 filt = UsbDeviceFilter().set_vendor_id("0405")
38 assert filt.summary() == "[VID=0405]"
39 assert filt.filter(devs) == [devs[2], devs[5]]
41 # -- Filter by PID
42 filt = UsbDeviceFilter().set_product_id("9999")
43 assert filt.summary() == "[PID=9999]"
44 assert filt.filter(devs) == []
46 filt = UsbDeviceFilter().set_product_id("6020")
47 assert filt.summary() == "[PID=6020]"
48 assert filt.filter(devs) == [devs[1], devs[2], devs[3]]
50 # -- Filter by description regex
51 filt = UsbDeviceFilter().set_product_regex("no-such-device")
52 assert filt.summary() == '[REGEX="no-such-device"]'
53 assert filt.filter(devs) == []
55 filt = UsbDeviceFilter().set_product_regex("^p2$")
56 assert filt.summary() == '[REGEX="^p2$"]'
57 assert filt.filter(devs) == [devs[2]]
59 filt = UsbDeviceFilter().set_product_regex("p2")
60 assert filt.summary() == '[REGEX="p2"]'
61 assert filt.filter(devs) == [devs[2]]
63 filt = UsbDeviceFilter().set_product_regex("(p3)|(p2)")
64 assert filt.summary() == '[REGEX="(p3)|(p2)"]'
65 assert filt.filter(devs) == [devs[2], devs[3]]
67 # -- Filter by serial number
68 filt = UsbDeviceFilter().set_serial_num("no-such-device")
69 assert filt.summary() == '[S/N="no-such-device"]'
70 assert filt.filter(devs) == []
72 filt = UsbDeviceFilter().set_serial_num("sn2")
73 assert filt.summary() == '[S/N="sn2"]'
74 assert filt.filter(devs) == [devs[2]]
76 # -- Filter by VID, PID
77 filt = UsbDeviceFilter().set_vendor_id("0403").set_product_id("6010")
78 assert filt.summary() == "[VID=0403, PID=6010]"
79 assert filt.filter(devs) == [devs[0], devs[4]]