Index: tests/patch_test.py |
diff --git a/tests/patch_test.py b/tests/patch_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..c030b883b5f64f66111fec9a7fd1647456198e28 |
--- /dev/null |
+++ b/tests/patch_test.py |
@@ -0,0 +1,163 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Unit tests for patch.py.""" |
+ |
+import os |
+import sys |
+import unittest |
+ |
+ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) |
+sys.path.insert(0, os.path.join(ROOT_DIR, '..')) |
+ |
+import patch |
+ |
+ |
+class PatchTest(unittest.TestCase): |
+ def testFilePatchDelete(self): |
+ c = patch.FilePatchDelete('foo', False) |
+ self.assertEquals(c.is_delete, True) |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.filename, 'foo') |
+ try: |
+ c.get() |
+ self.fail() |
+ except NotImplementedError: |
+ pass |
+ c = patch.FilePatchDelete('foo', True) |
+ self.assertEquals(c.is_delete, True) |
+ self.assertEquals(c.is_binary, True) |
+ self.assertEquals(c.filename, 'foo') |
+ try: |
+ c.get() |
+ self.fail() |
+ except NotImplementedError: |
+ pass |
+ |
+ def testFilePatchBinary(self): |
+ c = patch.FilePatchBinary('foo', 'data', []) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_binary, True) |
+ self.assertEquals(c.filename, 'foo') |
+ self.assertEquals(c.get(), 'data') |
+ |
+ def testFilePatchDiff(self): |
+ c = patch.FilePatchDiff('foo', 'data', []) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.filename, 'foo') |
+ self.assertEquals(c.is_git_diff, False) |
+ self.assertEquals(c.patchlevel, 0) |
+ self.assertEquals(c.get(), 'data') |
+ diff = ( |
+ 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' |
+ 'old mode 100644\n' |
+ 'new mode 100755\n') |
+ c = patch.FilePatchDiff('git_cl/git-cl', diff, []) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.filename, 'git_cl/git-cl') |
+ self.assertEquals(c.is_git_diff, True) |
+ self.assertEquals(c.patchlevel, 1) |
+ self.assertEquals(c.get(), diff) |
+ diff = ( |
+ 'Index: Junk\n' |
+ 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' |
+ 'old mode 100644\n' |
+ 'new mode 100755\n') |
+ c = patch.FilePatchDiff('git_cl/git-cl', diff, []) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.filename, 'git_cl/git-cl') |
+ self.assertEquals(c.is_git_diff, True) |
+ self.assertEquals(c.patchlevel, 1) |
+ self.assertEquals(c.get(), diff) |
+ |
+ def testInvalidFilePatchDiffGit(self): |
+ try: |
+ patch.FilePatchDiff('svn_utils_test.txt', ( |
+ 'diff --git a/tests/svn_utils_test_data/svn_utils_test.txt ' |
+ 'b/tests/svn_utils_test_data/svn_utils_test.txt\n' |
+ 'index 0e4de76..8320059 100644\n' |
+ '--- a/svn_utils_test.txt\n' |
+ '+++ b/svn_utils_test.txt\n' |
+ '@@ -3,6 +3,7 @@ bb\n' |
+ 'ccc\n' |
+ 'dd\n' |
+ 'e\n' |
+ '+FOO!\n' |
+ 'ff\n' |
+ 'ggg\n' |
+ 'hh\n'), |
+ []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ try: |
+ patch.FilePatchDiff('svn_utils_test2.txt', ( |
+ 'diff --git a/svn_utils_test_data/svn_utils_test.txt ' |
+ 'b/svn_utils_test.txt\n' |
+ 'index 0e4de76..8320059 100644\n' |
+ '--- a/svn_utils_test.txt\n' |
+ '+++ b/svn_utils_test.txt\n' |
+ '@@ -3,6 +3,7 @@ bb\n' |
+ 'ccc\n' |
+ 'dd\n' |
+ 'e\n' |
+ '+FOO!\n' |
+ 'ff\n' |
+ 'ggg\n' |
+ 'hh\n'), |
+ []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ |
+ def testInvalidFilePatchDiffSvn(self): |
+ try: |
+ patch.FilePatchDiff('svn_utils_test.txt', ( |
+ '--- svn_utils_test.txt2\n' |
+ '+++ svn_utils_test.txt\n' |
+ '@@ -3,6 +3,7 @@ bb\n' |
+ 'ccc\n' |
+ 'dd\n' |
+ 'e\n' |
+ '+FOO!\n' |
+ 'ff\n' |
+ 'ggg\n' |
+ 'hh\n'), |
+ []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ |
+ def testValidSvn(self): |
+ # pylint: disable=R0201 |
+ # Method could be a function |
+ # Should not throw. |
+ patch.FilePatchDiff('chrome/file.cc', ( |
+ 'Index: chrome/file.cc\n' |
+ '===================================================================\n' |
+ '--- chrome/file.cc\t(revision 74690)\n' |
+ '+++ chrome/file.cc\t(working copy)\n' |
+ '@@ -80,10 +80,13 @@\n' |
+ ' // Foo\n' |
+ ' // Bar\n' |
+ ' void foo() {\n' |
+ '- return bar;\n' |
+ '+ return foo;\n' |
+ ' }\n' |
+ ' \n' |
+ ' \n'), []) |
+ patch.FilePatchDiff('chrome/file.cc', ( |
+ '--- /dev/null\t2\n' |
+ '+++ chrome/file.cc\tfoo\n'), []) |
+ patch.FilePatchDiff('chrome/file.cc', ( |
+ '--- chrome/file.cc\tbar\n' |
+ '+++ /dev/null\tfoo\n'), []) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |