| 
									
										
										
										
											2006-03-01 06:19:04 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This file is for everybody to add tests for bugs that aren't | 
					
						
							|  |  |  | # fixed yet. Please add a test case and appropriate bug description. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # When you fix one of the bugs, please move the test to the correct | 
					
						
							|  |  |  | # test_ module. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | from test import test_support | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-28 13:11:41 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2007-03-18 18:28:25 +00:00
										 |  |  | # One test case for outstanding bugs at the moment: | 
					
						
							| 
									
										
										
										
											2006-10-28 13:11:41 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2006-03-01 06:19:04 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-18 18:28:25 +00:00
										 |  |  | class TestDifflibLongestMatch(unittest.TestCase): | 
					
						
							|  |  |  |     # From Patch #1678339: | 
					
						
							|  |  |  |     # The find_longest_match method in the difflib's SequenceMatcher has a bug. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The bug is in turn caused by a problem with creating a b2j mapping which | 
					
						
							|  |  |  |     # should contain a list of indices for each of the list elements in b. | 
					
						
							|  |  |  |     # However, when the b2j mapping is being created (this is being done in | 
					
						
							|  |  |  |     # __chain_b method in the SequenceMatcher) the mapping becomes broken. The | 
					
						
							|  |  |  |     # cause of this is that for the frequently used elements the list of indices | 
					
						
							|  |  |  |     # is removed and the element is being enlisted in the populardict mapping. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The test case tries to match two strings like: | 
					
						
							|  |  |  |     # abbbbbb.... and ...bbbbbbc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The number of b is equal and the find_longest_match should have returned | 
					
						
							|  |  |  |     # the proper amount. However, in case the number of "b"s is large enough, the | 
					
						
							|  |  |  |     # method reports that the length of the longest common substring is 0. It | 
					
						
							|  |  |  |     # simply can't find it. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # A bug was raised some time ago on this matter. It's ID is 1528074. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_find_longest_match(self): | 
					
						
							|  |  |  |         import difflib | 
					
						
							|  |  |  |         for i in (190, 200, 210): | 
					
						
							|  |  |  |             text1 = "a" + "b"*i | 
					
						
							|  |  |  |             text2 = "b"*i + "c" | 
					
						
							|  |  |  |             m = difflib.SequenceMatcher(None, text1, text2) | 
					
						
							|  |  |  |             (aptr, bptr, l) = m.find_longest_match(0, len(text1), 0, len(text2)) | 
					
						
							|  |  |  |             self.assertEquals(i, l) | 
					
						
							|  |  |  |             self.assertEquals(aptr, 1) | 
					
						
							|  |  |  |             self.assertEquals(bptr, 0) | 
					
						
							|  |  |  |   | 
					
						
							| 
									
										
										
										
											2006-03-01 06:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							| 
									
										
										
										
											2007-03-18 18:28:25 +00:00
										 |  |  |     test_support.run_unittest(TestDifflibLongestMatch) | 
					
						
							| 
									
										
										
										
											2006-03-01 06:19:04 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     test_main() |