|
3 | 3 | import sys |
4 | 4 | import tempfile |
5 | 5 | import unittest |
6 | | -from typing import Callable, Dict, Generator, List, Sequence, Tuple |
| 6 | +from typing import Callable, Dict, Generator, Sequence, Tuple |
7 | 7 | from unittest.mock import MagicMock |
8 | 8 |
|
9 | 9 | import pytest |
@@ -70,70 +70,13 @@ def fixture_config_manager(request: pytest.FixtureRequest) -> Generator[TBasicCo |
70 | 70 | yield from request.param() |
71 | 71 |
|
72 | 72 |
|
73 | | -def vim_project_info_extractor_factory(file_info_extractor: IFileInfoExtractor) -> Generator[IProjectInfoExtractor]: |
74 | | - with tempfile.TemporaryDirectory() as temp_dir: |
75 | | - extractor = TVimProjectInfoExtractor(file_info_extractor) |
76 | | - with unittest.mock.patch.object( |
77 | | - extractor, |
78 | | - "get_workspace_root", |
79 | | - return_value=temp_dir, |
80 | | - ): |
81 | | - yield extractor |
82 | | - |
83 | | - |
84 | | -def get_all_project_info_extractors_factories( |
85 | | - file_info_extractors_factories: Sequence[Callable[[], IFileInfoExtractor]], |
86 | | -) -> Sequence[Callable[..., Generator[IProjectInfoExtractor]]]: |
87 | | - """ |
88 | | - The problem is that the params in the fixture are defined only once, so if you use the fixture |
89 | | - more than once, all the generators inside are invalidated, so you need to create a generator factory. |
90 | | - """ |
91 | | - project_info_extractors_factories: list[Callable[..., Generator[IProjectInfoExtractor]]] = [] |
92 | | - for file_info_extractor_factory in file_info_extractors_factories: |
93 | | - project_info_extractors_factories.append( |
94 | | - lambda file_info_extractor_factory=file_info_extractor_factory: vim_project_info_extractor_factory( |
95 | | - file_info_extractor_factory() |
96 | | - ) |
97 | | - ) |
98 | | - |
99 | | - return project_info_extractors_factories |
100 | | - |
101 | | - |
102 | | -def get_all_file_info_extractors_factories() -> Sequence[Callable[[], IFileInfoExtractor]]: |
103 | | - return (TBasicFileInfoExtractor,) |
104 | | - |
105 | | - |
106 | 73 | @pytest.fixture |
107 | 74 | def fixture_shebang_command_builders_dispatcher( |
108 | 75 | fixture_file_info_extractor: IFileInfoExtractor, |
109 | 76 | ) -> TShebangCommandBuildersDispatcher: |
110 | 77 | return TShebangCommandBuildersDispatcher(fixture_file_info_extractor) |
111 | 78 |
|
112 | 79 |
|
113 | | -@pytest.fixture |
114 | | -def fixture_glob_command_builders_dispatcher() -> TGlobCommandBuildersDispatcher: |
115 | | - glob_patterns: Tuple[str, ...] = ( |
116 | | - "**/*.py", |
117 | | - "**/test.py", |
118 | | - "*.js", |
119 | | - "*.java", |
120 | | - "*.cpp", |
121 | | - "*.8xp.txt", |
122 | | - "*.*.*", |
123 | | - "**/*.log", |
124 | | - "**/*.*.*", |
125 | | - ) |
126 | | - glob_to_builder: Tuple[Tuple[re.Pattern, ICommandBuilder], ...] = tuple( |
127 | | - ( |
128 | | - re.compile(glob.translate(pattern, recursive=True, include_hidden=True)), |
129 | | - MagicMock(spec=ICommandBuilder, build=MagicMock(return_value=pattern)), |
130 | | - ) |
131 | | - for pattern in sorted(glob_patterns, reverse=True) |
132 | | - ) |
133 | | - |
134 | | - return TGlobCommandBuildersDispatcher(glob_to_builder) |
135 | | - |
136 | | - |
137 | 80 | @pytest.fixture |
138 | 81 | def fixture_file_ext_command_builders_dispatcher( |
139 | 82 | fixture_file_info_extractor: IFileInfoExtractor, |
@@ -173,6 +116,63 @@ def fixture_file_type_command_builders_dispatcher( |
173 | 116 | ) |
174 | 117 |
|
175 | 118 |
|
| 119 | +@pytest.fixture |
| 120 | +def fixture_glob_command_builders_dispatcher() -> TGlobCommandBuildersDispatcher: |
| 121 | + glob_patterns: Tuple[str, ...] = ( |
| 122 | + "**/*.py", |
| 123 | + "**/test.py", |
| 124 | + "*.js", |
| 125 | + "*.java", |
| 126 | + "*.cpp", |
| 127 | + "*.8xp.txt", |
| 128 | + "*.*.*", |
| 129 | + "**/*.log", |
| 130 | + "**/*.*.*", |
| 131 | + ) |
| 132 | + glob_to_builder: Tuple[Tuple[re.Pattern, ICommandBuilder], ...] = tuple( |
| 133 | + ( |
| 134 | + re.compile(glob.translate(pattern, recursive=True, include_hidden=True)), |
| 135 | + MagicMock(spec=ICommandBuilder, build=MagicMock(return_value=pattern)), |
| 136 | + ) |
| 137 | + for pattern in sorted(glob_patterns, reverse=True) |
| 138 | + ) |
| 139 | + |
| 140 | + return TGlobCommandBuildersDispatcher(glob_to_builder) |
| 141 | + |
| 142 | + |
| 143 | +def vim_project_info_extractor_factory(file_info_extractor: IFileInfoExtractor) -> Generator[IProjectInfoExtractor]: |
| 144 | + with tempfile.TemporaryDirectory() as temp_dir: |
| 145 | + extractor = TVimProjectInfoExtractor(file_info_extractor) |
| 146 | + with unittest.mock.patch.object( |
| 147 | + extractor, |
| 148 | + "get_workspace_root", |
| 149 | + return_value=temp_dir, |
| 150 | + ): |
| 151 | + yield extractor |
| 152 | + |
| 153 | + |
| 154 | +def get_all_project_info_extractors_factories( |
| 155 | + file_info_extractors_factories: Sequence[Callable[[], IFileInfoExtractor]], |
| 156 | +) -> Sequence[Callable[..., Generator[IProjectInfoExtractor]]]: |
| 157 | + """ |
| 158 | + The problem is that the params in the fixture are defined only once, so if you use the fixture |
| 159 | + more than once, all the generators inside are invalidated, so you need to create a generator factory. |
| 160 | + """ |
| 161 | + project_info_extractors_factories: list[Callable[..., Generator[IProjectInfoExtractor]]] = [] |
| 162 | + for file_info_extractor_factory in file_info_extractors_factories: |
| 163 | + project_info_extractors_factories.append( |
| 164 | + lambda file_info_extractor_factory=file_info_extractor_factory: vim_project_info_extractor_factory( |
| 165 | + file_info_extractor_factory() |
| 166 | + ) |
| 167 | + ) |
| 168 | + |
| 169 | + return project_info_extractors_factories |
| 170 | + |
| 171 | + |
| 172 | +def get_all_file_info_extractors_factories() -> Sequence[Callable[[], IFileInfoExtractor]]: |
| 173 | + return (TBasicFileInfoExtractor,) |
| 174 | + |
| 175 | + |
176 | 176 | @pytest.fixture(params=get_all_project_info_extractors_factories(get_all_file_info_extractors_factories())) |
177 | 177 | def fixture_project_info_extractor(request: pytest.FixtureRequest) -> Generator[IFileInfoExtractor]: |
178 | 178 | yield from request.param() |
|
0 commit comments