fix a bug with funcarg setup and remove XXX comment because "scope=module" now would work but leaving it as session for now.

--HG--
branch : trunk
This commit is contained in:
holger krekel 2009-09-09 23:07:42 +02:00
parent 6d84da39e4
commit 22c1ad9f7b
4 changed files with 28 additions and 6 deletions

View File

@ -1,6 +1,9 @@
Changes between 1.0.x and 'trunk'
=====================================
* fix a funcarg cached_setup bug probably only occuring
in distributed testing and "module" scope with teardown.
* consolidate builtins implementation to be compatible with >=2.3,
add helpers to ease keeping 2 and 3k compatible code

View File

@ -126,7 +126,10 @@ class FuncargRequest:
val = setup()
cache[cachekey] = val
if teardown is not None:
self._addfinalizer(lambda: teardown(val), scope=scope)
def finalizer():
del cache[cachekey]
teardown(val)
self._addfinalizer(finalizer, scope=scope)
return val
def getfuncargvalue(self, argname):
@ -157,7 +160,8 @@ class FuncargRequest:
def _addfinalizer(self, finalizer, scope):
colitem = self._getscopeitem(scope)
self.config._setupstate.addfinalizer(finalizer=finalizer, colitem=colitem)
self.config._setupstate.addfinalizer(
finalizer=finalizer, colitem=colitem)
def addfinalizer(self, finalizer):
""" call the given finalizer after test function finished execution. """
@ -179,6 +183,3 @@ class FuncargRequest:
msg = "funcargument %r not found for: %s" %(argname, line)
msg += "\n available funcargs: %s" %(", ".join(available),)
raise self.Error(msg)

View File

@ -10,7 +10,7 @@ def pytest_generate_tests(metafunc):
metafunc.addcall(id=gwtype, param=gwtype)
def pytest_funcarg__gw(request):
scope = "session" # XXX module causes problems with -n 3!
scope = "session"
if request.param == "popen":
return request.cached_setup(
setup=py.execnet.PopenGateway,

View File

@ -240,6 +240,24 @@ class TestRequestCachedSetup:
assert ret1 == ret1b
assert ret2 == ret2b
def test_request_cachedsetup_cache_deletion(self, testdir):
item1 = testdir.getitem("def test_func(): pass")
req1 = funcargs.FuncargRequest(item1)
l = []
def setup():
l.append("setup")
def teardown(val):
l.append("teardown")
ret1 = req1.cached_setup(setup, teardown, scope="function")
assert l == ['setup']
# artificial call of finalizer
req1.config._setupstate._callfinalizers(item1)
assert l == ["setup", "teardown"]
ret2 = req1.cached_setup(setup, teardown, scope="function")
assert l == ["setup", "teardown", "setup"]
req1.config._setupstate._callfinalizers(item1)
assert l == ["setup", "teardown", "setup", "teardown"]
def test_request_cached_setup_functional(self, testdir):
testdir.makepyfile(test_0="""
l = []