make sessionfinish hooks execute with the same cwd-context as at

session start (helps fix plugin behaviour which write output files
with relative path such as pytest-cov)
This commit is contained in:
holger krekel 2013-06-10 10:09:28 +02:00
parent 2951c3ace9
commit ac3d8800fd
3 changed files with 20 additions and 0 deletions

View File

@ -1,6 +1,10 @@
Changes between 2.3.5 and 2.4.DEV Changes between 2.3.5 and 2.4.DEV
----------------------------------- -----------------------------------
- make sessionfinish hooks execute with the same cwd-context as at
session start (helps fix plugin behaviour which write output files
with relative path such as pytest-cov)
- fix issue316 - properly reference collection hooks in docs - fix issue316 - properly reference collection hooks in docs
- fix issue 308 - allow to mark/xfail/skip individual parameter sets - fix issue 308 - allow to mark/xfail/skip individual parameter sets

View File

@ -97,6 +97,7 @@ def wrap_session(config, doit):
if session._testsfailed: if session._testsfailed:
session.exitstatus = EXIT_TESTSFAILED session.exitstatus = EXIT_TESTSFAILED
finally: finally:
session.startdir.chdir()
if initstate >= 2: if initstate >= 2:
config.hook.pytest_sessionfinish( config.hook.pytest_sessionfinish(
session=session, session=session,
@ -452,6 +453,7 @@ class Session(FSCollector):
self.shouldstop = False self.shouldstop = False
self.trace = config.trace.root.get("collection") self.trace = config.trace.root.get("collection")
self._norecursepatterns = config.getini("norecursedirs") self._norecursepatterns = config.getini("norecursedirs")
self.startdir = py.path.local()
def pytest_collectstart(self): def pytest_collectstart(self):
if self.shouldstop: if self.shouldstop:

View File

@ -226,3 +226,17 @@ def test_exclude(testdir):
assert result.ret == 0 assert result.ret == 0
result.stdout.fnmatch_lines(["*1 passed*"]) result.stdout.fnmatch_lines(["*1 passed*"])
def test_sessionfinish_with_start(testdir):
testdir.makeconftest("""
import os
l = []
def pytest_sessionstart():
l.append(os.getcwd())
os.chdir("..")
def pytest_sessionfinish():
assert l[0] == os.getcwd()
""")
res = testdir.runpytest("--collectonly")
assert res.ret == 0