Coverage for tests/unit_tests/utils/test_serial_util.py: 100%
54 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-23 03:53 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-23 03:53 +0000
1"""
2Tests of serial_util.py
3"""
5from apio.utils.serial_util import (
6 SerialDevice,
7 SerialDeviceFilter,
8)
11def test_device_summaries():
12 """Test serial device summary() string."""
13 device = SerialDevice(
14 "dev/port0", "port0", "0403", "6010", "m0", "p0", "sn0", "t0", "l0"
15 )
16 assert device.summary() == "[dev/port0] [0403:6010] [m0] [p0] [sn0]"
19def test_filtering() -> None:
20 """Test the filtering function."""
21 devs: list[SerialDevice] = [
22 SerialDevice( # devs[0]
23 "port0",
24 "name0",
25 "0403",
26 "6020",
27 "manuf0",
28 "product0",
29 "serial0",
30 "type0",
31 "location0",
32 ),
33 SerialDevice( # devs[1]
34 "port1",
35 "name1",
36 "0405",
37 "6010",
38 "manuf1",
39 "product1",
40 "serial1",
41 "type1",
42 "location1",
43 ),
44 SerialDevice( # devs[2]
45 "port2",
46 "name2",
47 "0403",
48 "6010",
49 "manuf2",
50 "product2",
51 "serial2",
52 "type2",
53 "location2",
54 ),
55 SerialDevice( # devs[3]
56 "port3",
57 "name3",
58 "0405",
59 "6020",
60 "manuf3",
61 "product3",
62 "serial3",
63 "type3",
64 "location3",
65 ),
66 ]
68 # -- All filtering disabled.
69 filt = SerialDeviceFilter()
70 assert filt.summary() == "[all]"
71 assert filt.filter(devs) == devs
73 # -- Filter by VID
74 filt = SerialDeviceFilter().set_vid("9999")
75 assert filt.summary() == "[VID=9999]"
76 assert filt.filter(devs) == []
78 filt = SerialDeviceFilter().set_vid("0405")
79 assert filt.summary() == "[VID=0405]"
80 assert filt.filter(devs) == [devs[1], devs[3]]
82 # -- Filter by PID
83 filt = SerialDeviceFilter().set_pid("9999")
84 assert filt.summary() == "[PID=9999]"
85 assert filt.filter(devs) == []
87 filt = SerialDeviceFilter().set_pid("6020")
88 assert filt.summary() == "[PID=6020]"
89 assert filt.filter(devs) == [devs[0], devs[3]]
91 # -- Filter by description regex
92 filt = SerialDeviceFilter().set_product_regex("no-such-device")
93 assert filt.summary() == '[REGEX="no-such-device"]'
94 assert filt.filter(devs) == []
96 filt = SerialDeviceFilter().set_product_regex("^product2$")
97 assert filt.summary() == '[REGEX="^product2$"]'
98 assert filt.filter(devs) == [devs[2]]
100 filt = SerialDeviceFilter().set_product_regex("product2")
101 assert filt.summary() == '[REGEX="product2"]'
102 assert filt.filter(devs) == [devs[2]]
104 filt = SerialDeviceFilter().set_product_regex("(product3)|(product2)")
105 assert filt.summary() == '[REGEX="(product3)|(product2)"]'
106 assert filt.filter(devs) == [devs[2], devs[3]]
108 # -- Filter by serial number
109 filt = SerialDeviceFilter().set_serial_num("no-such-device")
110 assert filt.summary() == '[S/N="no-such-device"]'
111 assert filt.filter(devs) == []
113 filt = SerialDeviceFilter().set_serial_num("serial2")
114 assert filt.summary() == '[S/N="serial2"]'
115 assert filt.filter(devs) == [devs[2]]
117 # -- Filter by port and port name
118 filt = SerialDeviceFilter().set_port("no-such-port")
119 assert filt.summary() == "[PORT=no-such-port]"
120 assert filt.filter(devs) == []
122 filt = SerialDeviceFilter().set_port("port2")
123 assert filt.summary() == "[PORT=port2]"
124 assert filt.filter(devs) == [devs[2]]
126 filt = SerialDeviceFilter().set_port("name2")
127 assert filt.summary() == "[PORT=name2]"
128 assert filt.filter(devs) == [devs[2]]
130 # -- Filter by VID, PID
131 filt = (
132 SerialDeviceFilter().set_vid("0405").set_pid("6020").set_port("port3")
133 )
134 assert filt.summary() == "[VID=0405, PID=6020, PORT=port3]"
135 assert filt.filter(devs) == [devs[3]]
137 filt = (
138 SerialDeviceFilter().set_vid("0405").set_pid("6020").set_port("name3")
139 )
140 assert filt.summary() == "[VID=0405, PID=6020, PORT=name3]"
141 assert filt.filter(devs) == [devs[3]]