Skip to content

Commit bc1e17e

Browse files
authored
Obey verbosity level when printing 'msg' part of assertions (#12662)
Seems like we just missed that case when more fine-grained verbosity levels were added. Fixes #6682, #12307
1 parent 1d72031 commit bc1e17e

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

changelog/6682.bugfix.rst

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed bug where the verbosity levels where not being respected when printing the "msg" part of failed assertion (as in ``assert condition, msg``).

src/_pytest/assertion/rewrite.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ def _format_assertmsg(obj: object) -> str:
451451
# However in either case we want to preserve the newline.
452452
replaces = [("\n", "\n~"), ("%", "%%")]
453453
if not isinstance(obj, str):
454-
obj = saferepr(obj)
454+
obj = saferepr(obj, _get_maxsize_for_saferepr(util._config))
455455
replaces.append(("\\n", "\n~"))
456456

457457
for r1, r2 in replaces:

testing/test_assertrewrite.py

+28
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,34 @@ def test_assertion_messages_bytes(self, pytester: Pytester) -> None:
341341
assert result.ret == 1
342342
result.stdout.fnmatch_lines(["*AssertionError: b'ohai!'", "*assert False"])
343343

344+
def test_assertion_message_verbosity(self, pytester: Pytester) -> None:
345+
"""
346+
Obey verbosity levels when printing the "message" part of assertions, when they are
347+
non-strings (#6682).
348+
"""
349+
pytester.makepyfile(
350+
"""
351+
class LongRepr:
352+
353+
def __repr__(self):
354+
return "A" * 500
355+
356+
def test_assertion_verbosity():
357+
assert False, LongRepr()
358+
"""
359+
)
360+
# Normal verbosity: assertion message gets abbreviated.
361+
result = pytester.runpytest()
362+
assert result.ret == 1
363+
result.stdout.re_match_lines(
364+
[r".*AssertionError: A+\.\.\.A+$", ".*assert False"]
365+
)
366+
367+
# High-verbosity: do not abbreviate the assertion message.
368+
result = pytester.runpytest("-vv")
369+
assert result.ret == 1
370+
result.stdout.re_match_lines([r".*AssertionError: A+$", ".*assert False"])
371+
344372
def test_boolop(self) -> None:
345373
def f1() -> None:
346374
f = g = False

0 commit comments

Comments
 (0)