test and implement showing verbose assert repr for py.test -vv

This commit is contained in:
Ronny Pfannschmidt 2012-06-27 17:26:55 +02:00
parent ecec653e98
commit 74e55493d1
4 changed files with 29 additions and 3 deletions

View File

@ -46,6 +46,8 @@ Changes between 2.2.4 and 2.3.0.dev
- don't show deselected reason line if there is none
- py.test -vv will show all of assert comparisations instead of truncating
Changes between 2.2.3 and 2.2.4
-----------------------------------

View File

@ -73,8 +73,12 @@ def pytest_runtest_setup(item):
def callbinrepr(op, left, right):
hook_result = item.ihook.pytest_assertrepr_compare(
config=item.config, op=op, left=left, right=right)
for new_expl in hook_result:
if new_expl:
# Don't include pageloads of data unless we are very verbose (-vv)
if len(''.join(new_expl[1:])) > 80*8 and item.config.option.verbose < 2:
new_expl[1:] = ['Detailed information too verbose, truncated']
res = '\n~'.join(new_expl)
if item.config.getvalue("assertmode") == "rewrite":
# The result will be fed back a python % formatting

View File

@ -121,9 +121,6 @@ def assertrepr_compare(op, left, right):
if not explanation:
return None
# Don't include pageloads of data, should be configurable
if len(''.join(explanation)) > 80*8:
explanation = ['Detailed information too verbose, truncated']
return [summary] + explanation

View File

@ -150,6 +150,29 @@ def test_sequence_comparison_uses_repr(testdir):
"*E*'y'*",
])
def test_assert_compare_truncate_longmessage(testdir):
testdir.makepyfile(r"""
def test_long():
a = list(range(200))
b = a[::2]
a = '\n'.join(map(str, a))
b = '\n'.join(map(str, b))
assert a == b
""")
result = testdir.runpytest()
result.stdout.fnmatch_lines([
"*too verbose, truncated*",
])
result = testdir.runpytest('-vv')
result.stdout.fnmatch_lines([
"*- 197",
])
@needsnewassert
def test_assertrepr_loaded_per_dir(testdir):
testdir.makepyfile(test_base=['def test_base(): assert 1 == 2'])