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
« 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# --------------------------------------------------------------------------------------------------
9from unittest.mock import MagicMock
11import pytest
13from tsfpga.module_list import ModuleList
16def test_module_list_indexing():
17 modules = ModuleList()
19 module_a = MagicMock()
20 module_b = MagicMock()
22 modules.append(module_a)
23 modules.append(module_b)
25 assert modules[0] is module_a
26 assert modules[1] is module_b
29@pytest.fixture
30def module_list_test():
31 class ModuleListTest:
32 def __init__(self):
33 self.modules = ModuleList()
35 self.module_a = MagicMock()
36 self.module_b = MagicMock()
37 self.module_c = MagicMock()
39 self.module_a.name = "a"
40 self.module_b.name = "b"
41 self.module_c.name = "c"
43 self.modules.append(self.module_a)
44 self.modules.append(self.module_b)
45 self.modules.append(self.module_c)
47 return ModuleListTest()
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
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'
59def test_iteration(module_list_test):
60 expected = [module_list_test.module_a, module_list_test.module_b, module_list_test.module_c]
62 assert list(module_list_test.modules) == expected
63 assert list(module_list_test.modules) == expected
66def test_can_cast_to_string_without_error(module_list_test):
67 print(module_list_test.modules)
70def test_concatenation(module_list_test):
71 modules_2 = ModuleList()
73 module_d = MagicMock()
74 module_d.name = "d"
75 modules_2.append(module_d)
77 all_modules = module_list_test.modules + modules_2
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 ]
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
91 assert all_modules is not modules_2
92 assert all_modules is not module_list_test.modules
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
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"
105def test_copy(module_list_test):
106 modules_copy = module_list_test.modules.copy()
108 modules_copy.append(4)
109 assert len(module_list_test.modules) == 3