Coverage for tsfpga/test/test_module_list.py: 100%

60 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-03-14 06:50 +0000

1# -------------------------------------------------------------------------------------------------- 

2# Copyright (c) Lukas Vik. All rights reserved. 

3# 

4# This file is part of the tsfpga project, a project platform for modern FPGA development. 

5# https://tsfpga.com 

6# https://github.com/tsfpga/tsfpga 

7# -------------------------------------------------------------------------------------------------- 

8 

9from unittest.mock import MagicMock 

10 

11import pytest 

12 

13from tsfpga.module_list import ModuleList 

14 

15 

16def test_module_list_indexing(): 

17 modules = ModuleList() 

18 

19 module_a = MagicMock() 

20 module_b = MagicMock() 

21 

22 modules.append(module_a) 

23 modules.append(module_b) 

24 

25 assert modules[0] is module_a 

26 assert modules[1] is module_b 

27 

28 

29@pytest.fixture 

30def module_list_test(): 

31 class ModuleListTest: 

32 def __init__(self): 

33 self.modules = ModuleList() 

34 

35 self.module_a = MagicMock() 

36 self.module_b = MagicMock() 

37 self.module_c = MagicMock() 

38 

39 self.module_a.name = "a" 

40 self.module_b.name = "b" 

41 self.module_c.name = "c" 

42 

43 self.modules.append(self.module_a) 

44 self.modules.append(self.module_b) 

45 self.modules.append(self.module_c) 

46 

47 return ModuleListTest() 

48 

49 

50def test_get(module_list_test): 

51 assert module_list_test.modules.get("a") == module_list_test.module_a 

52 assert module_list_test.modules.get("c") == module_list_test.module_c 

53 

54 with pytest.raises(ValueError) as exception_info: 

55 module_list_test.modules.get("d") 

56 assert str(exception_info.value) == 'No module "d" available' 

57 

58 

59def test_iteration(module_list_test): 

60 expected = [module_list_test.module_a, module_list_test.module_b, module_list_test.module_c] 

61 

62 assert list(module_list_test.modules) == expected 

63 assert list(module_list_test.modules) == expected 

64 

65 

66def test_can_cast_to_string_without_error(module_list_test): 

67 print(module_list_test.modules) 

68 

69 

70def test_concatenation(module_list_test): 

71 modules_2 = ModuleList() 

72 

73 module_d = MagicMock() 

74 module_d.name = "d" 

75 modules_2.append(module_d) 

76 

77 all_modules = module_list_test.modules + modules_2 

78 

79 assert len(all_modules) == 4 

80 assert list(all_modules) == [ 

81 module_list_test.module_a, 

82 module_list_test.module_b, 

83 module_list_test.module_c, 

84 module_d, 

85 ] 

86 

87 # The addition should result in a new object. Should not affect the existing objects. 

88 assert len(module_list_test.modules) == 3 

89 assert len(modules_2) == 1 

90 

91 assert all_modules is not modules_2 

92 assert all_modules is not module_list_test.modules 

93 

94 # ruff: noqa: SLF001 

95 assert all_modules._modules is not modules_2._modules 

96 assert all_modules._modules is not module_list_test.modules._modules 

97 

98 

99def test_concatenation_with_unknown_object_should_raise_interrupt(module_list_test): 

100 with pytest.raises(TypeError) as exception_info: 

101 module_list_test.modules + 3 

102 assert str(exception_info.value) == "Can only concatenate with another ModuleList" 

103 

104 

105def test_copy(module_list_test): 

106 modules_copy = module_list_test.modules.copy() 

107 

108 modules_copy.append(4) 

109 assert len(module_list_test.modules) == 3