diff --git a/changelog/7534.bugfix.rst b/changelog/7534.bugfix.rst new file mode 100644 index 00000000000..7c1f31360a3 --- /dev/null +++ b/changelog/7534.bugfix.rst @@ -0,0 +1 @@ +Restored the previous formatting of ``TracebackEntry.__str__`` which was changed by accident. diff --git a/src/_pytest/_code/code.py b/src/_pytest/_code/code.py index 218b5ad6311..219ebb68ff5 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -262,7 +262,15 @@ def __str__(self) -> str: raise except BaseException: line = "???" - return " File %r:%d in %s\n %s\n" % (self.path, self.lineno + 1, name, line) + # This output does not quite match Python's repr for traceback entries, + # but changing it to do so would break certain plugins. See + # https://github.com/pytest-dev/pytest/pull/7535/ for details. + return " File %r:%d in %s\n %s\n" % ( + str(self.path), + self.lineno + 1, + name, + line, + ) @property def name(self) -> str: diff --git a/testing/code/test_code.py b/testing/code/test_code.py index 25a3e9aeb59..bae86be347f 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -1,3 +1,4 @@ +import re import sys from types import FrameType from unittest import mock @@ -170,6 +171,15 @@ def test_getsource(self) -> None: assert len(source) == 6 assert "assert False" in source[5] + def test_tb_entry_str(self): + try: + assert False + except AssertionError: + exci = ExceptionInfo.from_current() + pattern = r" File '.*test_code.py':\d+ in test_tb_entry_str\n assert False" + entry = str(exci.traceback[0]) + assert re.match(pattern, entry) + class TestReprFuncArgs: def test_not_raise_exception_with_mixed_encoding(self, tw_mock) -> None: