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

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 

8 

9""" 

10Tests of serial_util.py 

11""" 

12 

13from apio.utils.serial_util import ( 

14 SerialDevice, 

15 SerialDeviceFilter, 

16) 

17 

18 

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

25 

26 

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 ] 

75 

76 # -- All filtering disabled. 

77 filt = SerialDeviceFilter() 

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

79 assert filt.filter(devs) == devs 

80 

81 # -- Filter by VID 

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

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

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

85 

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

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

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

89 

90 # -- Filter by PID 

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

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

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

94 

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

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

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

98 

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

103 

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

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

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

107 

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

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

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

111 

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

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

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

115 

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

120 

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

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

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

124 

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

129 

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

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

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

133 

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

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

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

137 

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

144 

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