@@ -501,12 +501,58 @@ def test_is_character_junk_false(self):
501501 for char in ['a' , '#' , '\n ' , '\f ' , '\r ' , '\v ' ]:
502502 self .assertFalse (difflib .IS_CHARACTER_JUNK (char ), repr (char ))
503503
504+ class TestFindLongest (unittest .TestCase ):
505+ def longer_match_exists (self , a , b , n ):
506+ return any (b_part in a for b_part in
507+ [b [i :i + n + 1 ] for i in range (0 , len (b ) - n - 1 )])
508+
509+ def test_default_args (self ):
510+ a = 'foo bar'
511+ b = 'foo baz bar'
512+ sm = difflib .SequenceMatcher (a = a , b = b )
513+ match = sm .find_longest_match ()
514+ self .assertEqual (match .a , 0 )
515+ self .assertEqual (match .b , 0 )
516+ self .assertEqual (match .size , 6 )
517+ self .assertEqual (a [match .a : match .a + match .size ],
518+ b [match .b : match .b + match .size ])
519+ self .assertFalse (self .longer_match_exists (a , b , match .size ))
520+
521+ match = sm .find_longest_match (alo = 2 , blo = 4 )
522+ self .assertEqual (match .a , 3 )
523+ self .assertEqual (match .b , 7 )
524+ self .assertEqual (match .size , 4 )
525+ self .assertEqual (a [match .a : match .a + match .size ],
526+ b [match .b : match .b + match .size ])
527+ self .assertFalse (self .longer_match_exists (a [2 :], b [4 :], match .size ))
528+
529+ match = sm .find_longest_match (bhi = 5 , blo = 1 )
530+ self .assertEqual (match .a , 1 )
531+ self .assertEqual (match .b , 1 )
532+ self .assertEqual (match .size , 4 )
533+ self .assertEqual (a [match .a : match .a + match .size ],
534+ b [match .b : match .b + match .size ])
535+ self .assertFalse (self .longer_match_exists (a , b [1 :5 ], match .size ))
536+
537+ def test_longest_match_with_popular_chars (self ):
538+ a = 'dabcd'
539+ b = 'd' * 100 + 'abc' + 'd' * 100 # length over 200 so popular used
540+ sm = difflib .SequenceMatcher (a = a , b = b )
541+ match = sm .find_longest_match (0 , len (a ), 0 , len (b ))
542+ self .assertEqual (match .a , 0 )
543+ self .assertEqual (match .b , 99 )
544+ self .assertEqual (match .size , 5 )
545+ self .assertEqual (a [match .a : match .a + match .size ],
546+ b [match .b : match .b + match .size ])
547+ self .assertFalse (self .longer_match_exists (a , b , match .size ))
548+
549+
504550def test_main ():
505551 difflib .HtmlDiff ._default_prefix = 0
506552 Doctests = doctest .DocTestSuite (difflib )
507553 run_unittest (
508554 TestWithAscii , TestAutojunk , TestSFpatches , TestSFbugs ,
509- TestOutputFormat , TestBytes , TestJunkAPIs , Doctests )
555+ TestOutputFormat , TestBytes , TestJunkAPIs , TestFindLongest , Doctests )
510556
511557if __name__ == '__main__' :
512558 test_main ()
0 commit comments