Merge pull request #7220 from nicoddemus/issue-6428
This commit is contained in:
parent
b7b729298c
commit
e1a21e46b0
|
@ -0,0 +1,2 @@
|
||||||
|
Paths appearing in error messages are now correct in case the current working directory has
|
||||||
|
changed since the start of the session.
|
|
@ -29,6 +29,7 @@ from _pytest.mark.structures import Mark
|
||||||
from _pytest.mark.structures import MarkDecorator
|
from _pytest.mark.structures import MarkDecorator
|
||||||
from _pytest.mark.structures import NodeKeywords
|
from _pytest.mark.structures import NodeKeywords
|
||||||
from _pytest.outcomes import fail
|
from _pytest.outcomes import fail
|
||||||
|
from _pytest.pathlib import Path
|
||||||
from _pytest.store import Store
|
from _pytest.store import Store
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
@ -348,9 +349,14 @@ class Node(metaclass=NodeMeta):
|
||||||
else:
|
else:
|
||||||
truncate_locals = True
|
truncate_locals = True
|
||||||
|
|
||||||
|
# excinfo.getrepr() formats paths relative to the CWD if `abspath` is False.
|
||||||
|
# It is possible for a fixture/test to change the CWD while this code runs, which
|
||||||
|
# would then result in the user seeing confusing paths in the failure message.
|
||||||
|
# To fix this, if the CWD changed, always display the full absolute path.
|
||||||
|
# It will be better to just always display paths relative to invocation_dir, but
|
||||||
|
# this requires a lot of plumbing (#6428).
|
||||||
try:
|
try:
|
||||||
os.getcwd()
|
abspath = Path(os.getcwd()) != Path(self.config.invocation_dir)
|
||||||
abspath = False
|
|
||||||
except OSError:
|
except OSError:
|
||||||
abspath = True
|
abspath = True
|
||||||
|
|
||||||
|
|
|
@ -58,3 +58,30 @@ def test__check_initialpaths_for_relpath():
|
||||||
|
|
||||||
outside = py.path.local("/outside")
|
outside = py.path.local("/outside")
|
||||||
assert nodes._check_initialpaths_for_relpath(FakeSession, outside) is None
|
assert nodes._check_initialpaths_for_relpath(FakeSession, outside) is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_failure_with_changed_cwd(testdir):
|
||||||
|
"""
|
||||||
|
Test failure lines should use absolute paths if cwd has changed since
|
||||||
|
invocation, so the path is correct (#6428).
|
||||||
|
"""
|
||||||
|
p = testdir.makepyfile(
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def private_dir():
|
||||||
|
out_dir = 'ddd'
|
||||||
|
os.mkdir(out_dir)
|
||||||
|
old_dir = os.getcwd()
|
||||||
|
os.chdir(out_dir)
|
||||||
|
yield out_dir
|
||||||
|
os.chdir(old_dir)
|
||||||
|
|
||||||
|
def test_show_wrong_path(private_dir):
|
||||||
|
assert False
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
result = testdir.runpytest()
|
||||||
|
result.stdout.fnmatch_lines([str(p) + ":*: AssertionError", "*1 failed in *"])
|
||||||
|
|
Loading…
Reference in New Issue