Пример #1
0
    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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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)