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

1""" 

2Tests of serial_util.py 

3""" 

4 

5from apio.utils.serial_util import ( 

6 SerialDevice, 

7 SerialDeviceFilter, 

8) 

9 

10 

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]" 

17 

18 

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 ] 

67 

68 # -- All filtering disabled. 

69 filt = SerialDeviceFilter() 

70 assert filt.summary() == "[all]" 

71 assert filt.filter(devs) == devs 

72 

73 # -- Filter by VID 

74 filt = SerialDeviceFilter().set_vid("9999") 

75 assert filt.summary() == "[VID=9999]" 

76 assert filt.filter(devs) == [] 

77 

78 filt = SerialDeviceFilter().set_vid("0405") 

79 assert filt.summary() == "[VID=0405]" 

80 assert filt.filter(devs) == [devs[1], devs[3]] 

81 

82 # -- Filter by PID 

83 filt = SerialDeviceFilter().set_pid("9999") 

84 assert filt.summary() == "[PID=9999]" 

85 assert filt.filter(devs) == [] 

86 

87 filt = SerialDeviceFilter().set_pid("6020") 

88 assert filt.summary() == "[PID=6020]" 

89 assert filt.filter(devs) == [devs[0], devs[3]] 

90 

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) == [] 

95 

96 filt = SerialDeviceFilter().set_product_regex("^product2$") 

97 assert filt.summary() == '[REGEX="^product2$"]' 

98 assert filt.filter(devs) == [devs[2]] 

99 

100 filt = SerialDeviceFilter().set_product_regex("product2") 

101 assert filt.summary() == '[REGEX="product2"]' 

102 assert filt.filter(devs) == [devs[2]] 

103 

104 filt = SerialDeviceFilter().set_product_regex("(product3)|(product2)") 

105 assert filt.summary() == '[REGEX="(product3)|(product2)"]' 

106 assert filt.filter(devs) == [devs[2], devs[3]] 

107 

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) == [] 

112 

113 filt = SerialDeviceFilter().set_serial_num("serial2") 

114 assert filt.summary() == '[S/N="serial2"]' 

115 assert filt.filter(devs) == [devs[2]] 

116 

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) == [] 

121 

122 filt = SerialDeviceFilter().set_port("port2") 

123 assert filt.summary() == "[PORT=port2]" 

124 assert filt.filter(devs) == [devs[2]] 

125 

126 filt = SerialDeviceFilter().set_port("name2") 

127 assert filt.summary() == "[PORT=name2]" 

128 assert filt.filter(devs) == [devs[2]] 

129 

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]] 

136 

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]]