reportdiff(): print a "plain diff" style diff.

XXX This should really be a unified diff, but I can't be bothered.
This commit is contained in:
Guido van Rossum 2001-09-21 21:06:22 +00:00
parent 0a07639779
commit cf691935bb
1 changed files with 30 additions and 4 deletions

View File

@ -351,10 +351,36 @@ def runtest(test, generate, verbose, quiet, testdir = None):
def reportdiff(expected, output):
print "*" * 70
import difflib
a = expected.splitlines(1)
b = output.splitlines(1)
diff = difflib.ndiff(a, b)
print ''.join(diff),
a = expected.splitlines()
b = output.splitlines()
sm = difflib.SequenceMatcher(a=a, b=b)
tuples = sm.get_opcodes()
def pair(x0, x1):
x0 += 1
if x0 >= x1:
return str(x0)
else:
return "%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)
for line in a[a0:a1]:
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
elif op == 'insert':
print str(a0) + "a" + pair(b0, b1)
for line in b[b0:b1]:
print ">", line
else:
print "get_opcodes() returned bad tuple?!?!", (op, a0, a1, b0, b1)
print "*" * 70
def findtestdir():