mirror of
https://github.com/python/cpython
synced 2024-10-14 09:58:30 +00:00
_do_a_fancy_diff(): Pay no attention to the ellipses behind the curtain.
While a fancy diff can be confusing in the presence of ellipses, so far I'm finding (2-0-0) that it's much more a major aid in narrowing down the possibilities when an ellipsis-slinging test fails. So we no longer refuse to do a fancy diff just because of ellipses. This isn't ideal; it's just better.
This commit is contained in:
parent
f33683fd40
commit
5b799c1f3d
|
@ -1596,14 +1596,20 @@ def _do_a_fancy_diff(self, want, got, optionflags):
|
|||
REPORT_CDIFF |
|
||||
REPORT_NDIFF):
|
||||
return False
|
||||
|
||||
# If expected output uses ellipsis, a meaningful fancy diff is
|
||||
# too hard.
|
||||
if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
|
||||
return False
|
||||
# too hard ... or maybe not. In two real-life failures Tim saw,
|
||||
# a diff was a major help anyway, so this is commented out.
|
||||
# [todo] _ellipsis_match() knows which pieces do and don't match,
|
||||
# and could be the basis for a kick-ass diff in this case.
|
||||
##if optionflags & ELLIPSIS and ELLIPSIS_MARKER in want:
|
||||
## return False
|
||||
|
||||
# ndiff does intraline difference marking, so can be useful even
|
||||
# for 1-line inputs.
|
||||
# for 1-line differences.
|
||||
if optionflags & REPORT_NDIFF:
|
||||
return True
|
||||
|
||||
# The other diff types need at least a few lines to be helpful.
|
||||
return want.count('\n') > 2 and got.count('\n') > 2
|
||||
|
||||
|
@ -1620,9 +1626,7 @@ def output_difference(self, example, got, optionflags):
|
|||
if not (optionflags & DONT_ACCEPT_BLANKLINE):
|
||||
got = re.sub('(?m)^[ ]*(?=\n)', BLANKLINE_MARKER, got)
|
||||
|
||||
# Check if we should use diff. Don't use diff if the actual
|
||||
# or expected outputs are too short, or if the expected output
|
||||
# contains an ellipsis marker.
|
||||
# Check if we should use diff.
|
||||
if self._do_a_fancy_diff(want, got, optionflags):
|
||||
# Split want & got into lines.
|
||||
want_lines = [l+'\n' for l in want.split('\n')]
|
||||
|
|
Loading…
Reference in a new issue