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

43 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-11-06 10:20 +0000

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

2 

3from typing import List 

4from apio.utils.usb_util import ( 

5 UsbDevice, 

6 UsbDeviceFilter, 

7) 

8 

9 

10def test_device_summaries(): 

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

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

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

14 

15 

16def test_filtering(): 

17 """Test the filtering function.""" 

18 devs: List[UsbDevice] = [ 

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

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

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

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

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

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

25 ] 

26 

27 # -- All filtering disabled. 

28 filt = UsbDeviceFilter() 

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

30 assert filt.filter(devs) == devs 

31 

32 # -- Filter by VID 

33 filt = UsbDeviceFilter().set_vendor_id("9999") 

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

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

36 

37 filt = UsbDeviceFilter().set_vendor_id("0405") 

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

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

40 

41 # -- Filter by PID 

42 filt = UsbDeviceFilter().set_product_id("9999") 

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

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

45 

46 filt = UsbDeviceFilter().set_product_id("6020") 

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

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

49 

50 # -- Filter by description regex 

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

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

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

54 

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

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

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

58 

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

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

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

62 

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

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

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

66 

67 # -- Filter by serial number 

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

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

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

71 

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

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

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

75 

76 # -- Filter by VID, PID 

77 filt = UsbDeviceFilter().set_vendor_id("0403").set_product_id("6010") 

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

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