merging pedronis-branch changes to resolve issue 15 for now.

This introduces py.test.collect._fillfuncargs which can
operate on Function like objects.

--HG--
branch : trunk
This commit is contained in:
holger krekel 2009-05-21 20:29:37 +02:00
commit 4bc352cc7d
3 changed files with 13 additions and 1 deletions

View File

@ -89,6 +89,7 @@ initpkg(__name__,
'test.collect.Instance' : ('./test/pycollect.py', 'Instance'), 'test.collect.Instance' : ('./test/pycollect.py', 'Instance'),
'test.collect.Generator' : ('./test/pycollect.py', 'Generator'), 'test.collect.Generator' : ('./test/pycollect.py', 'Generator'),
'test.collect.Function' : ('./test/pycollect.py', 'Function'), 'test.collect.Function' : ('./test/pycollect.py', 'Function'),
'test.collect._fillfuncargs' : ('./test/funcargs.py', 'fillfuncargs'),
# thread related API (still in early design phase) # thread related API (still in early design phase)
'_thread.WorkerPool' : ('./thread/pool.py', 'WorkerPool'), '_thread.WorkerPool' : ('./thread/pool.py', 'WorkerPool'),

View File

@ -95,7 +95,7 @@ class FuncargRequest:
def _fillfuncargs(self): def _fillfuncargs(self):
argnames = getfuncargnames(self.function) argnames = getfuncargnames(self.function)
if argnames: if argnames:
assert not self._pyfuncitem._args, "yielded functions cannot have funcargs" assert not getattr(self._pyfuncitem, '_args', None), "yielded functions cannot have funcargs"
for argname in argnames: for argname in argnames:
if argname not in self._pyfuncitem.funcargs: if argname not in self._pyfuncitem.funcargs:
self._pyfuncitem.funcargs[argname] = self.getfuncargvalue(argname) self._pyfuncitem.funcargs[argname] = self.getfuncargvalue(argname)

View File

@ -79,6 +79,17 @@ class TestFillFuncArgs:
"*1 passed*" "*1 passed*"
]) ])
def test_fillfuncargs_exposed(self, testdir):
item = testdir.getitem("def test_func(some, other=42): pass")
class Provider:
def pytest_funcarg__some(self, request):
return request.function.__name__
item.config.pluginmanager.register(Provider())
if hasattr(item, '_args'):
del item._args
py.test.collect._fillfuncargs(item)
assert len(item.funcargs) == 1
class TestRequest: class TestRequest:
def test_request_attributes(self, testdir): def test_request_attributes(self, testdir):
item = testdir.getitem(""" item = testdir.getitem("""