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

1""" 

2Tests of serial_util.py 

3""" 

4 

5from typing import List 

6from apio.utils.serial_util import ( 

7 SerialDevice, 

8 SerialDeviceFilter, 

9) 

10 

11 

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

18 

19 

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 ] 

68 

69 # -- All filtering disabled. 

70 filt = SerialDeviceFilter() 

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

72 assert filt.filter(devs) == devs 

73 

74 # -- Filter by VID 

75 filt = SerialDeviceFilter().set_vendor_id("9999") 

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

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

78 

79 filt = SerialDeviceFilter().set_vendor_id("0405") 

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

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

82 

83 # -- Filter by PID 

84 filt = SerialDeviceFilter().set_product_id("9999") 

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

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

87 

88 filt = SerialDeviceFilter().set_product_id("6020") 

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

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

91 

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

96 

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

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

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

100 

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

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

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

104 

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

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

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

108 

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

113 

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

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

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

117 

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

122 

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

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

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

126 

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

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

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

130 

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

140 

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