Ejemplo n.º 1
0
    def _genfunctions(self, name, funcobj):
        fm = self.session._fixturemanager
        cls = None
        definition = FunctionDefinition(self.nodeid,
                                        parent=self,
                                        callobj=funcobj)
        fixtureinfo = fm.getfixtureinfo(definition, funcobj, cls)

        metafunc = Metafunc(definition,
                            fixtureinfo,
                            self.config,
                            cls=cls,
                            module=None)
        self.ihook.pytest_generate_tests(metafunc=metafunc)
        if not metafunc._calls:
            yield YAMLItem(name, parent=self)
        else:
            # add funcargs() as fixturedefs to fixtureinfo.arg2fixturedefs
            fixtures.add_funcarg_pseudo_fixture_def(self, metafunc, fm)
            fixtureinfo.prune_dependency_tree()

            for callspec in metafunc._calls:
                subname = "%s[%s]" % (name, callspec.id)
                yield YAMLItem(subname,
                               parent=self,
                               callspec=callspec,
                               keywords={callspec.id: True},
                               originalname=name)
Ejemplo n.º 2
0
 def _parametrize(
     self, cls: Optional[Type], definition: FunctionDefinition, fixtureinfo: FuncFixtureInfo
 ) -> Metafunc:
     module = self.getparent(Module).obj
     metafunc = Metafunc(definition, fixtureinfo, self.config, cls=cls, module=module)
     methods = []
     if hasattr(module, "pytest_generate_tests"):
         methods.append(module.pytest_generate_tests)
     if hasattr(cls, "pytest_generate_tests"):
         cls = cast(Type, cls)
         methods.append(cls().pytest_generate_tests)
     self.ihook.pytest_generate_tests.call_extra(methods, {"metafunc": metafunc})
     return metafunc
Ejemplo n.º 3
0
 def _dummy_item(self, item, context_param=""):
     # TODO support class methods
     def dummy(request):
         pass
     fixtureinfo = self.session._fixturemanager.getfixtureinfo(item, dummy, cls=None)
     if hasattr(pytest.Function, "from_parent"):
         func = pytest.Function.from_parent(
             item,
             name="dummy",
             callobj=dummy,
             fixtureinfo=fixtureinfo,
         )
     else:  # TODO remove with pytest >= 5.4
         func = pytest.Function(
             name="dummy",
             parent=item,
             callobj=dummy,
             fixtureinfo=fixtureinfo,
         )
     if hasattr(FunctionDefinition, "from_parent"):
         definition = FunctionDefinition.from_parent(
             item,
             name="dummy",
             callobj=dummy,
         )
     else:  # TODO remove with pytest >= 5.4
         definition = FunctionDefinition(
             name="dummy",
             parent=item,
             callobj=dummy,
         )
     metafunc = Metafunc(
         definition,
         fixtureinfo,
         self.config,
         cls=None,
         module=item.getparent(pytest.Module).obj,
     )
     func.callspec = CallSpec2(metafunc)
     self.config.hook.pytest_generate_tests(metafunc=metafunc)
     if context_param != "":
         for callspec in metafunc._calls:
             if callspec.id == context_param:
                 if hasattr(pytest.Function, "from_parent"):
                     return pytest.Function.from_parent(
                         item,
                         name=f"{func.name}[{context_param}]",
                         callspec=callspec,
                         callobj=dummy,
                         fixtureinfo=fixtureinfo,
                         keywords={callspec.id: True},
                         originalname=func.name,
                     )
                 else:  # TODO remove with pytest >= 5.4
                     return pytest.Function(
                         name=f"{func.name}[{context_param}]",
                         parent=item,
                         callspec=callspec,
                         callobj=dummy,
                         fixtureinfo=fixtureinfo,
                         keywords={callspec.id: True},
                         originalname=func.name,
                     )
         suggestions = [callspec.id for callspec in metafunc._calls]
         raise ValueError(
             f"Could not find context parametrization {context_param}, possible values: {suggestions}"
         )
     return func