55from dataclasses import dataclass
66from itertools import chain
77from pathlib import Path
8- from typing import TYPE_CHECKING , Any , Callable , Iterator , List , Optional , cast
8+ from typing import TYPE_CHECKING , Any , Iterator , List , Optional , cast
99
1010from ....jsonrpc2 .protocol import rpc_method
1111from ....utils .async_tools import threaded
@@ -121,27 +121,12 @@ async def get_tests_from_workspace(
121121 * args : Any ,
122122 ** kwargs : Any ,
123123 ) -> List [TestItem ]:
124-
125124 from robot .output .logger import LOGGER
126- from robot .parsing import get_model
127- from robot .parsing .suitestructure import SuiteStructureBuilder
128125 from robot .running import TestCase , TestSuite
129- from robot .running .builder .builders import (
130- NoInitFileDirectoryParser ,
131- RobotParser ,
132- SuiteStructureParser ,
133- TestSuiteBuilder ,
134- )
126+ from robot .running .builder .builders import RobotParser , TestSuiteBuilder
135127
136128 from ..utils .version import get_robot_version
137129
138- if get_robot_version () >= (6 , 0 ):
139- from robot .running .builder .settings import (
140- Defaults as TestDefaults , # pyright: reportMissingImports=false
141- )
142- else :
143- from robot .running .builder .testsettings import TestDefaults
144-
145130 def get_document_text (source : str ) -> str :
146131 if self .parent ._loop :
147132 doc = self .parent .documents .get_sync (Uri .from_path (source ).normalized ())
@@ -150,112 +135,16 @@ def get_document_text(source: str) -> str:
150135
151136 return source
152137
153- class MyRobotParser (RobotParser ):
154- def _get_source (self , source : str ) -> Any :
155- return get_document_text (source )
156-
157- def _build (
158- self ,
159- suite : TestSuite ,
160- source : str ,
161- defaults : TestDefaults ,
162- model : Optional [ast .AST ] = None ,
163- get_model : Callable [..., Any ] = get_model ,
164- ) -> TestSuite :
165-
166- from robot .running .builder .transformers import (
167- SettingsBuilder ,
168- SuiteBuilder ,
169- )
138+ def get_source (self : Any , source : str ) -> str :
139+ return get_document_text (source )
170140
171- if defaults is None :
172- defaults = TestDefaults ()
173- if model is None :
174- try :
175- if get_robot_version () >= (6 , 0 ):
176- model = get_model (
177- self ._get_source (source ),
178- data_only = True ,
179- curdir = self ._get_curdir (source ),
180- lang = self .lang ,
181- )
182- else :
183- model = get_model (self ._get_source (source ), data_only = True , curdir = self ._get_curdir (source ))
184- except (asyncio .CancelledError , SystemExit , KeyboardInterrupt ):
185- raise
186- except BaseException :
187- pass
188-
189- if model is None :
190- return suite
191-
192- SettingsBuilder (suite , defaults ).visit (model )
193- SuiteBuilder (suite , defaults ).visit (model )
194- suite .rpa = self ._get_rpa_mode (model )
195- return suite
196-
197- class MyRestParser (MyRobotParser ):
198- def _get_source (self , source : str ) -> Any :
199- from robot .utils import read_rest_data
200- from robot .utils .filereader import FileReader
201-
202- with FileReader (source ) as reader :
203- return read_rest_data (reader )
204-
205- class MySuiteStructureParserWithLang (SuiteStructureParser ):
206- def _get_parsers (self , extensions : List [str ], lang : Any , process_curdir : bool ) -> RobotParser :
207- robot_parser = MyRobotParser (lang , process_curdir )
208- rest_parser = MyRestParser (lang , process_curdir )
209- parsers = {
210- None : NoInitFileDirectoryParser (),
211- "robot" : robot_parser ,
212- "rst" : rest_parser ,
213- "rest" : rest_parser ,
214- }
215- for ext in extensions :
216- if ext not in parsers :
217- parsers [ext ] = robot_parser
218- return parsers
219-
220- def _validate_execution_mode (self , suite : Any ) -> None :
221- super ()._validate_execution_mode (suite )
222-
223- class MySuiteStructureParser (SuiteStructureParser ):
224- def _get_parsers (self , extensions : List [str ], process_curdir : bool ) -> RobotParser :
225- robot_parser = MyRobotParser (process_curdir )
226- rest_parser = MyRestParser (process_curdir )
227- parsers = {
228- None : NoInitFileDirectoryParser (),
229- "robot" : robot_parser ,
230- "rst" : rest_parser ,
231- "rest" : rest_parser ,
232- }
233- for ext in extensions :
234- if ext not in parsers :
235- parsers [ext ] = robot_parser
236- return parsers
237-
238- def _validate_execution_mode (self , suite : Any ) -> None :
239- super ()._validate_execution_mode (suite )
240-
241- class MyTestSuiteBuilder (TestSuiteBuilder ):
242- def _validate_test_counts (self , suite : TestSuite , multisource : bool = False ) -> None :
243- # we don't need this
244- pass
245-
246- def build (self , * paths : str ) -> TestSuite :
247- structure = SuiteStructureBuilder (self .included_extensions , self .included_suites ).build (paths )
248- if get_robot_version () >= (6 , 0 ):
249- parser = MySuiteStructureParserWithLang (
250- self .included_extensions , self .rpa , self .lang , self .process_curdir
251- )
252- else :
253- parser = MySuiteStructureParser (self .included_extensions , self .rpa , self .process_curdir )
254- suite = parser .parse (structure )
255- if not self .included_suites and not self .allow_empty_suite :
256- self ._validate_test_counts (suite , multisource = len (paths ) > 1 )
257- suite .remove_empty_suites (preserve_direct_children = len (paths ) > 1 )
258- return suite
141+ RobotParser ._get_source = get_source
142+
143+ def _validate_test_counts (self : Any , suite : TestSuite , multisource : bool = False ) -> None :
144+ # we don't need this
145+ pass
146+
147+ TestSuiteBuilder ._validate_test_counts = _validate_test_counts
259148
260149 def generate (suite : TestSuite ) -> TestItem :
261150 children : List [TestItem ] = []
@@ -337,11 +226,13 @@ def nonexisting_paths(paths: List[str]) -> Iterator[str]:
337226 valid_paths = [i for i in normalize_paths (paths )]
338227
339228 if get_robot_version () >= (6 , 0 ):
340- builder = MyTestSuiteBuilder (
341- included_suites = suites if suites else None , rpa = rpa_mode , lang = languages
229+ builder = TestSuiteBuilder (
230+ included_suites = suites if suites else None ,
231+ rpa = rpa_mode ,
232+ lang = languages ,
342233 )
343234 else :
344- builder = MyTestSuiteBuilder (included_suites = suites if suites else None , rpa = rpa_mode )
235+ builder = TestSuiteBuilder (included_suites = suites if suites else None , rpa = rpa_mode )
345236
346237 suite : Optional [TestSuite ] = builder .build (* valid_paths ) if valid_paths else None
347238 suite_item = [generate (suite )] if suite else []
@@ -370,11 +261,13 @@ def nonexisting_paths(paths: List[str]) -> Iterator[str]:
370261 ]
371262 else :
372263 if get_robot_version () >= (6 , 0 ):
373- builder = MyTestSuiteBuilder (
374- included_suites = suites if suites else None , rpa = rpa_mode , lang = languages
264+ builder = TestSuiteBuilder (
265+ included_suites = suites if suites else None ,
266+ rpa = rpa_mode ,
267+ lang = languages ,
375268 )
376269 else :
377- builder = MyTestSuiteBuilder (included_suites = suites if suites else None , rpa = rpa_mode )
270+ builder = TestSuiteBuilder (included_suites = suites if suites else None , rpa = rpa_mode )
378271 return [generate (builder .build (str (workspace_path )))]
379272 except (SystemExit , KeyboardInterrupt ):
380273 raise
0 commit comments