From d2c5b4b549b24e637b16c60bdfae7292e1e75c06 Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Sat, 10 Jul 2004 23:54:07 +0000 Subject: SequenceMatcher(None, [], []).get_grouped_opcodes() now returns a generator that behaves as if both lists has an empty string in each of them. Closes bug #979794 (and duplicate bug #980117). --- Lib/difflib.py | 2 ++ Lib/test/test_difflib.py | 7 +++++++ Misc/NEWS | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/Lib/difflib.py b/Lib/difflib.py index 529c786..e82c703 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -572,6 +572,8 @@ class SequenceMatcher: """ codes = self.get_opcodes() + if not codes: + codes = [("equal", 0, 1, 0, 1)] # Fixup leading and trailing groups if they show no changes. if codes[0][0] == 'equal': tag, i1, i2, j1, j2 = codes[0] diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py index 1703754..9819c84 100644 --- a/Lib/test/test_difflib.py +++ b/Lib/test/test_difflib.py @@ -12,6 +12,13 @@ class TestSFbugs(unittest.TestCase): self.assertEqual(s.quick_ratio(), 1) self.assertEqual(s.real_quick_ratio(), 1) + def test_comparing_empty_lists(self): + # Check fix for bug #979794 + group_gen = difflib.SequenceMatcher(None, [], []).get_grouped_opcodes() + self.assertRaises(StopIteration, group_gen.next) + diff_gen = difflib.unified_diff([], []) + self.assertRaises(StopIteration, diff_gen.next) + Doctests = doctest.DocTestSuite(difflib) test_support.run_unittest(TestSFbugs, Doctests) diff --git a/Misc/NEWS b/Misc/NEWS index 73abaa4..507c7a5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,10 @@ Extension modules Library ------- +- Bug #979794: difflib.get_grouped_opcodes() now handles the case of when it is + comparing two empty lists. Was affecting both context_diff() and + unified_diff(). Was also a duplicate of bug #980117. + - Bug #980938: smtplib now prints debug output to sys.stderr. - Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by -- cgit v0.12