Coverage for tests/unit_tests/utils/test_serial_util.py: 100%
55 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"""
2Tests of serial_util.py
3"""
5from typing import List
6from apio.utils.serial_util import (
7 SerialDevice,
8 SerialDeviceFilter,
9)
12def test_device_summaries():
13 """Test serial device summary() string."""
14 device = SerialDevice(
15 "dev/port0", "port0", "0403", "6010", "m0", "p0", "sn0", "t0", "l0"
16 )
17 assert device.summary() == "[dev/port0] [0403:6010] [m0] [p0] [sn0]"
20def test_filtering():
21 """Test the filtering function."""
22 devs: List[SerialDevice] = [
23 SerialDevice( # devs[0]
24 "port0",
25 "name0",
26 "0403",
27 "6020",
28 "manuf0",
29 "product0",
30 "serial0",
31 "type0",
32 "location0",
33 ),
34 SerialDevice( # devs[1]
35 "port1",
36 "name1",
37 "0405",
38 "6010",
39 "manuf1",
40 "product1",
41 "serial1",
42 "type1",
43 "location1",
44 ),
45 SerialDevice( # devs[2]
46 "port2",
47 "name2",
48 "0403",
49 "6010",
50 "manuf2",
51 "product2",
52 "serial2",
53 "type2",
54 "location2",
55 ),
56 SerialDevice( # devs[3]
57 "port3",
58 "name3",
59 "0405",
60 "6020",
61 "manuf3",
62 "product3",
63 "serial3",
64 "type3",
65 "location3",
66 ),
67 ]
69 # -- All filtering disabled.
70 filt = SerialDeviceFilter()
71 assert filt.summary() == "[all]"
72 assert filt.filter(devs) == devs
74 # -- Filter by VID
75 filt = SerialDeviceFilter().set_vendor_id("9999")
76 assert filt.summary() == "[VID=9999]"
77 assert filt.filter(devs) == []
79 filt = SerialDeviceFilter().set_vendor_id("0405")
80 assert filt.summary() == "[VID=0405]"
81 assert filt.filter(devs) == [devs[1], devs[3]]
83 # -- Filter by PID
84 filt = SerialDeviceFilter().set_product_id("9999")
85 assert filt.summary() == "[PID=9999]"
86 assert filt.filter(devs) == []
88 filt = SerialDeviceFilter().set_product_id("6020")
89 assert filt.summary() == "[PID=6020]"
90 assert filt.filter(devs) == [devs[0], devs[3]]
92 # -- Filter by description regex
93 filt = SerialDeviceFilter().set_product_regex("no-such-device")
94 assert filt.summary() == '[REGEX="no-such-device"]'
95 assert filt.filter(devs) == []
97 filt = SerialDeviceFilter().set_product_regex("^product2$")
98 assert filt.summary() == '[REGEX="^product2$"]'
99 assert filt.filter(devs) == [devs[2]]
101 filt = SerialDeviceFilter().set_product_regex("product2")
102 assert filt.summary() == '[REGEX="product2"]'
103 assert filt.filter(devs) == [devs[2]]
105 filt = SerialDeviceFilter().set_product_regex("(product3)|(product2)")
106 assert filt.summary() == '[REGEX="(product3)|(product2)"]'
107 assert filt.filter(devs) == [devs[2], devs[3]]
109 # -- Filter by serial number
110 filt = SerialDeviceFilter().set_serial_num("no-such-device")
111 assert filt.summary() == '[S/N="no-such-device"]'
112 assert filt.filter(devs) == []
114 filt = SerialDeviceFilter().set_serial_num("serial2")
115 assert filt.summary() == '[S/N="serial2"]'
116 assert filt.filter(devs) == [devs[2]]
118 # -- Filter by port and port name
119 filt = SerialDeviceFilter().set_port("no-such-port")
120 assert filt.summary() == "[PORT=no-such-port]"
121 assert filt.filter(devs) == []
123 filt = SerialDeviceFilter().set_port("port2")
124 assert filt.summary() == "[PORT=port2]"
125 assert filt.filter(devs) == [devs[2]]
127 filt = SerialDeviceFilter().set_port("name2")
128 assert filt.summary() == "[PORT=name2]"
129 assert filt.filter(devs) == [devs[2]]
131 # -- Filter by VID, PID
132 filt = (
133 SerialDeviceFilter()
134 .set_vendor_id("0405")
135 .set_product_id("6020")
136 .set_port("port3")
137 )
138 assert filt.summary() == "[VID=0405, PID=6020, PORT=port3]"
139 assert filt.filter(devs) == [devs[3]]
141 filt = (
142 SerialDeviceFilter()
143 .set_vendor_id("0405")
144 .set_product_id("6020")
145 .set_port("name3")
146 )
147 assert filt.summary() == "[VID=0405, PID=6020, PORT=name3]"
148 assert filt.filter(devs) == [devs[3]]