From a0457d525e6145070394db14d2b0510a8c12e156 Mon Sep 17 00:00:00 2001 From: Zac-HD Date: Fri, 24 Jul 2020 00:11:43 +1000 Subject: [PATCH 1/3] Revert change to traceback repr --- src/_pytest/_code/code.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/_pytest/_code/code.py b/src/_pytest/_code/code.py index 218b5ad631..46b58b77d1 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -262,7 +262,12 @@ def __str__(self) -> str: raise except BaseException: line = "???" - return " File %r:%d in %s\n %s\n" % (self.path, self.lineno + 1, name, line) + return " File %r:%d in %s\n %s\n" % ( + str(self.path), + self.lineno + 1, + name, + line, + ) @property def name(self) -> str: From 4054469aa3567e4f5220116825d1505926866d56 Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Thu, 23 Jul 2020 18:41:31 -0300 Subject: [PATCH 2/3] Add test and changelog entry --- changelog/7534.bugfix.rst | 1 + src/_pytest/_code/code.py | 2 +- testing/code/test_code.py | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 changelog/7534.bugfix.rst diff --git a/changelog/7534.bugfix.rst b/changelog/7534.bugfix.rst new file mode 100644 index 0000000000..7c1f31360a --- /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 46b58b77d1..2501cfe3d5 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -262,7 +262,7 @@ def __str__(self) -> str: raise except BaseException: line = "???" - return " File %r:%d in %s\n %s\n" % ( + return " File '%s':%d in %s\n %s\n" % ( str(self.path), self.lineno + 1, name, diff --git a/testing/code/test_code.py b/testing/code/test_code.py index 25a3e9aeb5..775760ed7f 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,18 @@ 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() + entry = exci.traceback[0] + s = str(entry) + print(repr(s)) + assert re.match( + r" File '.*test_code.py':\d+ in test_tb_entry_str\n assert False", s + ) + class TestReprFuncArgs: def test_not_raise_exception_with_mixed_encoding(self, tw_mock) -> None: From fd9584c6e1125446cedfd61f5b37fbe2201af469 Mon Sep 17 00:00:00 2001 From: Zac-HD Date: Fri, 24 Jul 2020 12:41:07 +1000 Subject: [PATCH 3/3] Restore *exact* prev output --- src/_pytest/_code/code.py | 5 ++++- testing/code/test_code.py | 9 +++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/_pytest/_code/code.py b/src/_pytest/_code/code.py index 2501cfe3d5..219ebb68ff 100644 --- a/src/_pytest/_code/code.py +++ b/src/_pytest/_code/code.py @@ -262,7 +262,10 @@ def __str__(self) -> str: raise except BaseException: line = "???" - return " File '%s':%d in %s\n %s\n" % ( + # 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, diff --git a/testing/code/test_code.py b/testing/code/test_code.py index 775760ed7f..bae86be347 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -176,12 +176,9 @@ def test_tb_entry_str(self): assert False except AssertionError: exci = ExceptionInfo.from_current() - entry = exci.traceback[0] - s = str(entry) - print(repr(s)) - assert re.match( - r" File '.*test_code.py':\d+ in test_tb_entry_str\n assert False", s - ) + 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: