From 396045e53f111dc3f9ec0c7307e1ada7755d2180 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Fri, 20 Jul 2012 14:16:49 +0200 Subject: [PATCH] allow registration of "funcarg" marked factories --- _pytest/main.py | 19 ++++++++++++++----- testing/test_python.py | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/_pytest/main.py b/_pytest/main.py index 72715aa1d..ad4910afc 100644 --- a/_pytest/main.py +++ b/_pytest/main.py @@ -463,11 +463,20 @@ class FuncargManager: self._holderobjseen.add(holderobj) for name in dir(holderobj): #print "check", holderobj, name - if name.startswith(self._argprefix): - fname = name[len(self._argprefix):] - faclist = self.arg2facspec.setdefault(fname, []) - obj = getattr(holderobj, name) - faclist.append((nodeid, obj)) + obj = getattr(holderobj, name) + # funcarg factories either have a pytest_funcarg__ prefix + # or are "funcarg" marked + if hasattr(obj, "funcarg"): + if name.startswith(self._argprefix): + argname = name[len(self._argprefix):] + else: + argname = name + elif name.startswith(self._argprefix): + argname = name[len(self._argprefix):] + else: + continue + faclist = self.arg2facspec.setdefault(argname, []) + faclist.append((nodeid, obj)) def getfactorylist(self, argname, nodeid, function, raising=True): try: diff --git a/testing/test_python.py b/testing/test_python.py index 03c305ae1..10d5dcbb8 100644 --- a/testing/test_python.py +++ b/testing/test_python.py @@ -1805,3 +1805,25 @@ class TestFuncargMarker: "*ScopeMismatch*You tried*function*from*session*", ]) + def test_register_only_with_mark(self, testdir): + testdir.makeconftest(""" + import pytest + finalized = [] + created = [] + @pytest.mark.funcarg + def arg(request): + return 1 + """) + testdir.makepyfile( + test_mod1=""" + import pytest + @pytest.mark.funcarg + def arg(request): + return request.getfuncargvalue("arg") + 1 + def test_1(arg): + assert arg == 2 + """) + reprec = testdir.inline_run() + reprec.assertoutcome(passed=1) + +