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

42 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"""Tests of usb_util.py""" 

10 

11from apio.utils.usb_util import ( 

12 UsbDevice, 

13 UsbDeviceFilter, 

14) 

15 

16 

17def test_device_summaries(): 

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

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

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

21 

22 

23def test_filtering() -> None: 

24 """Test the filtering function.""" 

25 devs: list[UsbDevice] = [ 

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

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

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

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

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

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

32 ] 

33 

34 # -- All filtering disabled. 

35 filt = UsbDeviceFilter() 

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

37 assert filt.filter(devs) == devs 

38 

39 # -- Filter by VID 

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

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

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

43 

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

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

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

47 

48 # -- Filter by PID 

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

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

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

52 

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

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

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

56 

57 # -- Filter by description regex 

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

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

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

61 

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

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

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

65 

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

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

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

69 

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

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

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

73 

74 # -- Filter by serial number 

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

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

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

78 

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

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

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

82 

83 # -- Filter by VID, PID 

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

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

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