def _setup_fixtures(self): def func(): pass self.funcargs = {} fm = self.session._fixturemanager self._fixtureinfo = fm.getfixtureinfo(node=self, func=func, cls=None, funcargs=False) fixture_request = FixtureRequest(self) fixture_request._fillfixtures() return fixture_request
def _setup_fixtures(doctest_item): """ Used by DoctestTextfile and DoctestItem to setup fixture information. """ def func(): pass doctest_item.funcargs = {} fm = doctest_item.session._fixturemanager doctest_item._fixtureinfo = fm.getfixtureinfo(node=doctest_item, func=func, cls=None, funcargs=False) fixture_request = FixtureRequest(doctest_item) fixture_request._fillfixtures() return fixture_request
def _setup_fixtures(doctest_item: DoctestItem) -> FixtureRequest: """Used by DoctestTextfile and DoctestItem to setup fixture information.""" def func() -> None: pass doctest_item.funcargs = {} # type: ignore[attr-defined] fm = doctest_item.session._fixturemanager doctest_item._fixtureinfo = fm.getfixtureinfo( # type: ignore[attr-defined] node=doctest_item, func=func, cls=None, funcargs=False ) fixture_request = FixtureRequest(doctest_item, _ispytest=True) fixture_request._fillfixtures() return fixture_request
class TestItem(pytest.Item): def __init__(self, parent, data: Optional[dict] = None, name: Optional[str] = None, wdl: Optional[str] = None, inputs: Optional[dict] = None, expected: Optional[dict] = None, tags: Optional[Sequence] = None, **kwargs): if not all((name, wdl)): raise ValueError("Every test must have 'name' and 'wdl' keys") super().__init__(name, parent) self._wdl = wdl self._inputs = inputs self._expected = expected self._tags = tags # TODO: add tags as marks self._workflow_runner_kwargs = kwargs self._data = data self._fixture_request = None def setup(self): """ This method is black magic - uses internal pytest APIs to create a FixtureRequest that can be used to access fixtures in `runtest()`. Copied from https://github.com/pytest-dev/pytest/blob/master/src/_pytest/doctest.py. """ def func(): pass self.funcargs = {} fm = self.session._fixturemanager self._fixtureinfo = fm.getfixtureinfo(node=self, func=func, cls=None, funcargs=False) self._fixture_request = FixtureRequest(self) self._fixture_request._fillfixtures() def runtest(self): # Get/create DataManager if self._data: config = self._fixture_request.getfixturevalue("user_config") data_resolver = DataResolver(self._data, config) data_dirs = DataDirs( ensure_path(self._fixture_request.fspath.dirpath(), canonicalize=True), function=self.name, module=None, # TODO: support a top-level key for module name cls=None, # TODO: support test groupings ) workflow_data = DataManager(data_resolver, data_dirs) else: workflow_data = self._fixture_request.getfixturevalue( "workflow_data") # Build the arguments to workflow_runner workflow_runner_kwargs = self._workflow_runner_kwargs # Resolve test data requests in the inputs and outputs if self._inputs: workflow_runner_kwargs["inputs"] = _resolve_test_data( self._inputs, workflow_data) if self._expected: workflow_runner_kwargs["expected"] = _resolve_test_data( self._expected, workflow_data) # Run the test workflow_runner = self._fixture_request.getfixturevalue( "workflow_runner") return workflow_runner(self._wdl, **workflow_runner_kwargs)