diff examples/trac/trac/versioncontrol/tests/diff.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/examples/trac/trac/versioncontrol/tests/diff.py
@@ -0,0 +1,104 @@
+from trac.versioncontrol import diff
+
+import unittest
+
+
+class DiffTestCase(unittest.TestCase):
+
+    def test_get_change_extent(self):
+        self.assertEqual((3, 0), diff._get_change_extent('xxx', 'xxx'))
+        self.assertEqual((0, 0), diff._get_change_extent('', 'xxx'))
+        self.assertEqual((0, 0), diff._get_change_extent('xxx', ''))
+        self.assertEqual((0, 0), diff._get_change_extent('xxx', 'yyy'))
+        self.assertEqual((1, -1), diff._get_change_extent('xxx', 'xyx'))
+        self.assertEqual((1, -1), diff._get_change_extent('xxx', 'xyyyx'))
+        self.assertEqual((1, 0), diff._get_change_extent('xy', 'xzz'))
+        self.assertEqual((1, -1), diff._get_change_extent('xyx', 'xzzx'))
+        self.assertEqual((1, -1), diff._get_change_extent('xzzx', 'xyx'))
+
+    def test_insert_blank_line(self):
+        opcodes = diff._get_opcodes(['A', 'B'], ['A', 'B', ''],
+                                     ignore_blank_lines=0)
+        self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
+        self.assertEqual(('insert', 2, 2, 2, 3), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B'], ['A', 'B', ''],
+                                     ignore_blank_lines=1)
+        self.assertEqual(('equal', 0, 2, 0, 3), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A'], ['A', 'B', ''],
+                                     ignore_blank_lines=1)
+        self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
+        self.assertEqual(('insert', 1, 1, 1, 3), opcodes.next())
+
+    def test_delete_blank_line(self):
+        opcodes = diff._get_opcodes(['A', 'B', ''], ['A', 'B'],
+                                     ignore_blank_lines=0)
+        self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
+        self.assertEqual(('delete', 2, 3, 2, 2), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B', ''], ['A', 'B'],
+                                     ignore_blank_lines=1)
+        self.assertEqual(('equal', 0, 3, 0, 2), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B', ''], ['A'],
+                                     ignore_blank_lines=1)
+        self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
+        self.assertEqual(('delete', 1, 3, 1, 1), opcodes.next())
+
+    def test_space_changes(self):
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B  b'],
+                                     ignore_space_changes=0)
+        self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
+        self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B  b'],
+                                     ignore_space_changes=1)
+        self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
+
+    def test_case_changes(self):
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
+                                     ignore_case=0)
+        self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
+        self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B B'],
+                                     ignore_case=1)
+        self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
+
+    def test_space_and_case_changes(self):
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B  B'],
+                                     ignore_case=0, ignore_space_changes=0)
+        self.assertEqual(('equal', 0, 1, 0, 1), opcodes.next())
+        self.assertEqual(('replace', 1, 2, 1, 2), opcodes.next())
+
+        opcodes = diff._get_opcodes(['A', 'B b'], ['A', 'B  B'],
+                                     ignore_case=1, ignore_space_changes=1)
+        self.assertEqual(('equal', 0, 2, 0, 2), opcodes.next())
+
+    def test_grouped_opcodes_context1(self):
+        opcodes = diff._get_opcodes(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
+                                    ['A', 'B', 'C', 'd', 'e', 'f', 'G', 'H'])
+        groups = diff._group_opcodes(opcodes, n=1)
+        group = groups.next()
+        self.assertEqual(('equal', 2, 3, 2, 3), group[0])
+        self.assertEqual(('replace', 3, 6, 3, 6), group[1])
+        self.assertEqual(('equal', 6, 7, 6, 7), group[2])
+
+    def test_grouped_opcodes_insert_blank_line_at_top(self):
+        """
+        Regression test for #2090. Make sure that the equal block following an
+        insert at the top of a file is correct.
+        """
+        opcodes = diff._get_opcodes(['B', 'C', 'D', 'E', 'F', 'G'],
+                                    ['A', 'B', 'C', 'D', 'E', 'F', 'G'])
+        groups = diff._group_opcodes(opcodes, n=3)
+        self.assertEqual([('insert', 0, 0, 0, 1), ('equal', 0, 3, 1, 4)],
+                         groups.next())
+    
+
+def suite():
+    return unittest.makeSuite(DiffTestCase, 'test')
+
+if __name__ == '__main__':
+    unittest.main()
Copyright (C) 2012-2017 Edgewall Software