Coverage for tests/unit_tests/utils/test_usb_util.py: 100%
42 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-07 05:08 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-07 05:08 +0000
1# This file is part of the Apio project
2# (C) 2016-present FPGAwars
3# Project authors:
4# * Jesús Arroyo (Jesus89) (2016-2019)
5# * Juan Gonzalez (obijuan) (2019-2024)
6# * The Apio Team (2024-present)
7# License: GPLv2
9"""Tests of usb_util.py"""
11from apio.utils.usb_util import (
12 UsbDevice,
13 UsbDeviceFilter,
14)
17def test_device_summaries():
18 """Test usb device summary() string."""
19 device = UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0")
20 assert device.summary() == "[0403:6010] [0:1] [m0] [p0] [sn0]"
23def test_filtering() -> None:
24 """Test the filtering function."""
25 devs: list[UsbDevice] = [
26 UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0"), # devs[0]
27 UsbDevice("0403", "6020", 3, 1, "m1", "p1", "sn1", "t1"), # devs[1]
28 UsbDevice("0405", "6020", 3, 1, "m2", "p2", "sn2", "t2"), # devs[2]
29 UsbDevice("0403", "6020", 2, 1, "m3", "p3", "sn3", "t3"), # devs[3]
30 UsbDevice("0403", "6010", 1, 1, "m4", "p4", "sn4", "t4"), # devs[4]
31 UsbDevice("0405", "6010", 1, 1, "m5", "p5", "sn5", "t5"), # devs[5]
32 ]
34 # -- All filtering disabled.
35 filt = UsbDeviceFilter()
36 assert filt.summary() == "[all]"
37 assert filt.filter(devs) == devs
39 # -- Filter by VID
40 filt = UsbDeviceFilter().set_vid("9999")
41 assert filt.summary() == "[VID=9999]"
42 assert filt.filter(devs) == []
44 filt = UsbDeviceFilter().set_vid("0405")
45 assert filt.summary() == "[VID=0405]"
46 assert filt.filter(devs) == [devs[2], devs[5]]
48 # -- Filter by PID
49 filt = UsbDeviceFilter().set_pid("9999")
50 assert filt.summary() == "[PID=9999]"
51 assert filt.filter(devs) == []
53 filt = UsbDeviceFilter().set_pid("6020")
54 assert filt.summary() == "[PID=6020]"
55 assert filt.filter(devs) == [devs[1], devs[2], devs[3]]
57 # -- Filter by description regex
58 filt = UsbDeviceFilter().set_product_regex("no-such-device")
59 assert filt.summary() == '[REGEX="no-such-device"]'
60 assert filt.filter(devs) == []
62 filt = UsbDeviceFilter().set_product_regex("^p2$")
63 assert filt.summary() == '[REGEX="^p2$"]'
64 assert filt.filter(devs) == [devs[2]]
66 filt = UsbDeviceFilter().set_product_regex("p2")
67 assert filt.summary() == '[REGEX="p2"]'
68 assert filt.filter(devs) == [devs[2]]
70 filt = UsbDeviceFilter().set_product_regex("(p3)|(p2)")
71 assert filt.summary() == '[REGEX="(p3)|(p2)"]'
72 assert filt.filter(devs) == [devs[2], devs[3]]
74 # -- Filter by serial number
75 filt = UsbDeviceFilter().set_serial_num("no-such-device")
76 assert filt.summary() == '[S/N="no-such-device"]'
77 assert filt.filter(devs) == []
79 filt = UsbDeviceFilter().set_serial_num("sn2")
80 assert filt.summary() == '[S/N="sn2"]'
81 assert filt.filter(devs) == [devs[2]]
83 # -- Filter by VID, PID
84 filt = UsbDeviceFilter().set_vid("0403").set_pid("6010")
85 assert filt.summary() == "[VID=0403, PID=6010]"
86 assert filt.filter(devs) == [devs[0], devs[4]]