コード例 #1
0
def pytest_pycollect_makeitem(collector, name, obj):
    if collector.istestfunction(obj,
                                name) and asyncio.iscoroutinefunction(obj):
        module = collector.getparent(pytest.Module).obj
        clscol = collector.getparent(pytest.Class)
        cls = clscol and clscol.obj or None
        fm = collector.session._fixturemanager

        definition = py.FunctionDefinition(name=name,
                                           parent=collector,
                                           callobj=obj)
        fixinfo = fm.getfixtureinfo(definition, obj, cls)

        metafunc = py.Metafunc(definition,
                               fixinfo,
                               collector.config,
                               cls=cls,
                               module=module)

        if not metafunc._calls:
            return AsyncFunction(name, parent=collector, fixtureinfo=fixinfo)
        else:
            output = []
            for callspec in metafunc._calls:
                subname = f"{name}[{callspec.id}]"
                output.append(
                    AsyncFunction(name=subname,
                                  parent=collector,
                                  callspec=callspec,
                                  callobj=obj,
                                  fixtureinfo=fixinfo,
                                  keywords={callspec.id: True},
                                  originalname=name))
            return output
コード例 #2
0
 def Metafunc(self, func):
     # the unit tests of this class check if things work correctly
     # on the funcarg level, so we don't need a full blown
     # initiliazation
     class FixtureInfo:
         name2fixturedefs = None
         def __init__(self, names):
             self.names_closure = names
     names = fixtures.getfuncargnames(func)
     fixtureinfo = FixtureInfo(names)
     return python.Metafunc(func, fixtureinfo, None)