Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions Lib/test/test_difflib.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ def test_one_delete(self):
('delete', 40, 41, 40, 40),
('equal', 41, 81, 40, 80)])

def test_opcode_caching(self):
sm = difflib.SequenceMatcher(None, 'b' * 100, 'a' + 'b' * 100)
opcode = sm.get_opcodes()
self.assertEqual(opcode,
[ ('insert', 0, 0, 0, 1),
('equal', 0, 100, 1, 101)])
# Implementation detail: opcodes are cached;
# `get_opcodes()` returns the same object
self.assertIs(opcode, sm.get_opcodes())

def test_bjunk(self):
sm = difflib.SequenceMatcher(isjunk=lambda x: x == ' ',
a='a' * 40 + 'b' * 40, b='a' * 44 + 'b' * 40)
Expand Down Expand Up @@ -273,6 +283,15 @@ def test_make_file_usascii_charset_with_nonascii_input(self):
self.assertIn('ımplıcıt', output)


def test_one_insert(self):
m = difflib.Differ().compare('b' * 2, 'a' + 'b' * 2)
self.assertEqual(list(m), ['+ a', ' b', ' b'])

def test_one_delete(self):
m = difflib.Differ().compare('a' + 'b' * 2, 'b' * 2)
self.assertEqual(list(m), ['- a', ' b', ' b'])


class TestOutputFormat(unittest.TestCase):
def test_tab_delimiter(self):
args = ['one', 'two', 'Original', 'Current',
Expand Down Expand Up @@ -547,6 +566,26 @@ def test_longest_match_with_popular_chars(self):
self.assertFalse(self.longer_match_exists(a, b, match.size))


class TestCloseMatches(unittest.TestCase):
# Happy paths are tested in the doctests of `difflib.get_close_matches`.

def test_invalid_inputs(self):
self.assertRaises(ValueError, difflib.get_close_matches, "spam", ['egg'], n=0)
self.assertRaises(ValueError, difflib.get_close_matches, "spam", ['egg'], n=-1)
self.assertRaises(ValueError, difflib.get_close_matches, "spam", ['egg'], cutoff=1.1)
self.assertRaises(ValueError, difflib.get_close_matches, "spam", ['egg'], cutoff=-0.1)


class TestRestore(unittest.TestCase):
# Happy paths are tested in the doctests of `difflib.restore`.

def test_invalid_input(self):
with self.assertRaises(ValueError):
''.join(difflib.restore([], 0))
with self.assertRaises(ValueError):
''.join(difflib.restore([], 3))


def setUpModule():
difflib.HtmlDiff._default_prefix = 0

Expand Down
Loading