Coverage for tests/unit_tests/utils/test_usb_util.py: 100%

42 statements  

« prev     ^ index     » next       coverage.py v7.16.1, created at 2026-09-23 03:53 +0000

1"""Tests of usb_util.py""" 

2 

3from apio.utils.usb_util import ( 

4 UsbDevice, 

5 UsbDeviceFilter, 

6) 

7 

8 

9def test_device_summaries(): 

10 """Test usb device summary() string.""" 

11 device = UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0") 

12 assert device.summary() == "[0403:6010] [0:1] [m0] [p0] [sn0]" 

13 

14 

15def test_filtering() -> None: 

16 """Test the filtering function.""" 

17 devs: list[UsbDevice] = [ 

18 UsbDevice("0403", "6010", 0, 1, "m0", "p0", "sn0", "t0"), # devs[0] 

19 UsbDevice("0403", "6020", 3, 1, "m1", "p1", "sn1", "t1"), # devs[1] 

20 UsbDevice("0405", "6020", 3, 1, "m2", "p2", "sn2", "t2"), # devs[2] 

21 UsbDevice("0403", "6020", 2, 1, "m3", "p3", "sn3", "t3"), # devs[3] 

22 UsbDevice("0403", "6010", 1, 1, "m4", "p4", "sn4", "t4"), # devs[4] 

23 UsbDevice("0405", "6010", 1, 1, "m5", "p5", "sn5", "t5"), # devs[5] 

24 ] 

25 

26 # -- All filtering disabled. 

27 filt = UsbDeviceFilter() 

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

29 assert filt.filter(devs) == devs 

30 

31 # -- Filter by VID 

32 filt = UsbDeviceFilter().set_vid("9999") 

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

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

35 

36 filt = UsbDeviceFilter().set_vid("0405") 

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

38 assert filt.filter(devs) == [devs[2], devs[5]] 

39 

40 # -- Filter by PID 

41 filt = UsbDeviceFilter().set_pid("9999") 

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

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

44 

45 filt = UsbDeviceFilter().set_pid("6020") 

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

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

48 

49 # -- Filter by description regex 

50 filt = UsbDeviceFilter().set_product_regex("no-such-device") 

51 assert filt.summary() == '[REGEX="no-such-device"]' 

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

53 

54 filt = UsbDeviceFilter().set_product_regex("^p2$") 

55 assert filt.summary() == '[REGEX="^p2$"]' 

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

57 

58 filt = UsbDeviceFilter().set_product_regex("p2") 

59 assert filt.summary() == '[REGEX="p2"]' 

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

61 

62 filt = UsbDeviceFilter().set_product_regex("(p3)|(p2)") 

63 assert filt.summary() == '[REGEX="(p3)|(p2)"]' 

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

65 

66 # -- Filter by serial number 

67 filt = UsbDeviceFilter().set_serial_num("no-such-device") 

68 assert filt.summary() == '[S/N="no-such-device"]' 

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

70 

71 filt = UsbDeviceFilter().set_serial_num("sn2") 

72 assert filt.summary() == '[S/N="sn2"]' 

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

74 

75 # -- Filter by VID, PID 

76 filt = UsbDeviceFilter().set_vid("0403").set_pid("6010") 

77 assert filt.summary() == "[VID=0403, PID=6010]" 

78 assert filt.filter(devs) == [devs[0], devs[4]]