From ac3d8800fdf9750080a9c70843e14825f4c59ec9 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Mon, 10 Jun 2013 10:09:28 +0200 Subject: [PATCH] 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) --- CHANGELOG | 4 ++++ _pytest/main.py | 2 ++ testing/test_session.py | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 1fb52a037..ccffa39cb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,10 @@ 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 issue 308 - allow to mark/xfail/skip individual parameter sets diff --git a/_pytest/main.py b/_pytest/main.py index 9ef47faf9..775294c7d 100644 --- a/_pytest/main.py +++ b/_pytest/main.py @@ -97,6 +97,7 @@ def wrap_session(config, doit): if session._testsfailed: session.exitstatus = EXIT_TESTSFAILED finally: + session.startdir.chdir() if initstate >= 2: config.hook.pytest_sessionfinish( session=session, @@ -452,6 +453,7 @@ class Session(FSCollector): self.shouldstop = False self.trace = config.trace.root.get("collection") self._norecursepatterns = config.getini("norecursedirs") + self.startdir = py.path.local() def pytest_collectstart(self): if self.shouldstop: diff --git a/testing/test_session.py b/testing/test_session.py index 0a475b814..df7463e02 100644 --- a/testing/test_session.py +++ b/testing/test_session.py @@ -226,3 +226,17 @@ def test_exclude(testdir): assert result.ret == 0 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