Skip to content

Commit d91ff0a

Browse files
committed
assertrepr_compare: use safeformat with -vv
1 parent fbb7f66 commit d91ff0a

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

changelog/5936.feature.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Display untruncated assertion message with ``-vv``.

src/_pytest/assertion/util.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import _pytest._code
99
from _pytest import outcomes
10+
from _pytest._io.saferepr import safeformat
1011
from _pytest._io.saferepr import saferepr
1112
from _pytest.compat import ATTRS_EQ_FIELD
1213

@@ -123,13 +124,21 @@ def isiterable(obj):
123124

124125
def assertrepr_compare(config, op, left, right):
125126
"""Return specialised explanations for some operators/operands"""
126-
maxsize = (80 - 15 - len(op) - 2) // 2 # 15 chars indentation, 1 space around op
127-
left_repr = saferepr(left, maxsize=maxsize)
128-
right_repr = saferepr(right, maxsize=maxsize)
127+
verbose = config.getoption("verbose")
128+
if verbose > 1:
129+
left_repr = safeformat(left)
130+
right_repr = safeformat(right)
131+
else:
132+
# XXX: "15 chars indentation" is wrong
133+
# ("E AssertionError: assert "); should use term width.
134+
maxsize = (
135+
80 - 15 - len(op) - 2
136+
) // 2 # 15 chars indentation, 1 space around op
137+
left_repr = saferepr(left, maxsize=maxsize)
138+
right_repr = saferepr(right, maxsize=maxsize)
129139

130140
summary = "{} {} {}".format(left_repr, op, right_repr)
131141

132-
verbose = config.getoption("verbose")
133142
explanation = None
134143
try:
135144
if op == "==":

testing/test_assertrewrite.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,12 @@ class X:
190190
pass
191191

192192
msg = getmsg(f, {"cls": X}).splitlines()
193-
if verbose > 0:
194-
193+
if verbose > 1:
194+
assert msg == ["assert {!r} == 42".format(X), " -{!r}".format(X), " +42"]
195+
elif verbose > 0:
195196
assert msg == [
196197
"assert <class 'test_...e.<locals>.X'> == 42",
197-
" -<class 'test_assertrewrite.TestAssertionRewrite.test_name.<locals>.X'>",
198+
" -{!r}".format(X),
198199
" +42",
199200
]
200201
else:
@@ -206,9 +207,17 @@ def test_assertrepr_compare_same_width(self, request):
206207
def f():
207208
assert "1234567890" * 5 + "A" == "1234567890" * 5 + "B"
208209

209-
assert getmsg(f).splitlines()[0] == (
210-
"assert '123456789012...901234567890A' == '123456789012...901234567890B'"
211-
)
210+
msg = getmsg(f).splitlines()[0]
211+
if request.config.getoption("verbose") > 1:
212+
assert msg == (
213+
"assert '12345678901234567890123456789012345678901234567890A' "
214+
"== '12345678901234567890123456789012345678901234567890B'"
215+
)
216+
else:
217+
assert msg == (
218+
"assert '123456789012...901234567890A' "
219+
"== '123456789012...901234567890B'"
220+
)
212221

213222
def test_dont_rewrite_if_hasattr_fails(self, request):
214223
class Y:

0 commit comments

Comments
 (0)