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