From: Tim Peters Date: Sat, 22 Sep 2001 05:31:03 +0000 (+0000) Subject: Since the most likely failure mode for an expected-output test is a change X-Git-Tag: v2.2.1c1~1679 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c377b16d12ba325bb108eca575447d66f19294c0;p=python Since the most likely failure mode for an expected-output test is a change somewhere inside a line, use ndiff so that intraline difference marking can point out what changed within a line. I don't remember diff-style abbreviations either (haven't used it since '94, except to produce patches), so say the rest in English too. --- diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 79ee3b1d3d..d13ff4cfb9 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -349,38 +349,45 @@ def runtest(test, generate, verbose, quiet, testdir = None): return 0 def reportdiff(expected, output): - print "*" * 70 import difflib - a = expected.splitlines() - b = output.splitlines() + print "*" * 70 + a = expected.splitlines(1) + b = output.splitlines(1) sm = difflib.SequenceMatcher(a=a, b=b) tuples = sm.get_opcodes() + def pair(x0, x1): + # x0:x1 are 0-based slice indices; convert to 1-based line indices. x0 += 1 if x0 >= x1: - return str(x0) + return "line " + str(x0) else: - return "%d,%d" % (x0, x1) + return "lines %d-%d" % (x0, x1) + for op, a0, a1, b0, b1 in tuples: if op == 'equal': pass + elif op == 'delete': - print pair(a0, a1) + "d" + pair(b0, b1) + print "***", pair(a0, a1), "of expected output missing:" for line in a[a0:a1]: - print "<", line + print "-", line, + elif op == 'replace': - print pair(a0, a1) + "c" + pair(b0, b1) - for line in a[a0:a1]: - print "<", line - print "---" - for line in b[b0:b1]: - print ">", line + print "*** mismatch between", pair(a0, a1), "of expected", \ + "output and", pair(b0, b1), "of actual output:" + for line in difflib.ndiff(a[a0:a1], b[b0:b1]): + print line, + elif op == 'insert': - print str(a0) + "a" + pair(b0, b1) + print "***", pair(b0, b1), "of actual output doesn't appear", \ + "in expected output after line", str(a1)+":" for line in b[b0:b1]: - print ">", line + print "+", line, + else: print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1) + print "*" * 70 def findtestdir():