Index: tests/patch_test.py |
diff --git a/tests/patch_test.py b/tests/patch_test.py |
index 4ca45e7e5d630417582741a9c29f96b9c7d90e28..dd4b72efebf0c333113a9fb866100611f6682400 100755 |
--- a/tests/patch_test.py |
+++ b/tests/patch_test.py |
@@ -5,6 +5,7 @@ |
"""Unit tests for patch.py.""" |
+import logging |
import os |
import sys |
import unittest |
@@ -125,21 +126,30 @@ GIT_NEW = ( |
'+bar\n') |
+NEW = ( |
+ '--- /dev/null\n' |
+ '+++ foo\n' |
+ '@@ -0,0 +1 @@\n' |
+ '+bar\n') |
+ |
+ |
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') |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.is_delete, True) |
+ self.assertEquals(c.is_new, False) |
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') |
+ self.assertEquals(c.is_binary, True) |
+ self.assertEquals(c.is_delete, True) |
+ self.assertEquals(c.is_new, False) |
try: |
c.get() |
self.fail() |
@@ -147,59 +157,97 @@ class PatchTest(unittest.TestCase): |
pass |
def testFilePatchBinary(self): |
- c = patch.FilePatchBinary('foo', 'data', []) |
- self.assertEquals(c.is_delete, False) |
+ c = patch.FilePatchBinary('foo', 'data', [], is_new=False) |
+ self.assertEquals(c.filename, 'foo') |
self.assertEquals(c.is_binary, True) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_new, False) |
+ self.assertEquals(c.get(), 'data') |
+ |
+ def testFilePatchBinaryNew(self): |
+ c = patch.FilePatchBinary('foo', 'data', [], is_new=True) |
self.assertEquals(c.filename, 'foo') |
+ self.assertEquals(c.is_binary, True) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_new, True) |
self.assertEquals(c.get(), 'data') |
def testFilePatchDiff(self): |
c = patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []) |
- self.assertEquals(c.is_delete, False) |
- self.assertEquals(c.is_binary, False) |
self.assertEquals(c.filename, 'chrome/file.cc') |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.is_delete, False) |
self.assertEquals(c.is_git_diff, False) |
+ self.assertEquals(c.is_new, False) |
self.assertEquals(c.patchlevel, 0) |
self.assertEquals(c.get(), SVN_PATCH) |
+ |
+ def testFilePatchDiffHeaderMode(self): |
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_binary, False) |
+ self.assertEquals(c.is_delete, False) |
self.assertEquals(c.is_git_diff, True) |
+ self.assertEquals(c.is_new, False) |
self.assertEquals(c.patchlevel, 1) |
self.assertEquals(c.get(), diff) |
+ |
+ def testFilePatchDiffHeaderModeIndex(self): |
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_binary, False) |
+ self.assertEquals(c.is_delete, False) |
self.assertEquals(c.is_git_diff, True) |
+ self.assertEquals(c.is_new, False) |
self.assertEquals(c.patchlevel, 1) |
self.assertEquals(c.get(), diff) |
- def testFilePatchBadDiff(self): |
+ def testFilePatchDiffSvnNew(self): |
+ # The code path is different for git and svn. |
+ c = patch.FilePatchDiff('foo', NEW, []) |
+ self.assertEquals(c.filename, 'foo') |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_git_diff, False) |
+ self.assertEquals(c.is_new, True) |
+ self.assertEquals(c.patchlevel, 0) |
+ self.assertEquals(c.get(), NEW) |
+ |
+ def testFilePatchDiffGitNew(self): |
+ # The code path is different for git and svn. |
+ c = patch.FilePatchDiff('foo', GIT_NEW, []) |
+ self.assertEquals(c.filename, 'foo') |
+ self.assertEquals(c.is_binary, False) |
+ self.assertEquals(c.is_delete, False) |
+ self.assertEquals(c.is_git_diff, True) |
+ self.assertEquals(c.is_new, True) |
+ self.assertEquals(c.patchlevel, 1) |
+ self.assertEquals(c.get(), GIT_NEW) |
+ |
+ def testFilePatchDiffBad(self): |
try: |
patch.FilePatchDiff('foo', 'data', []) |
self.fail() |
except patch.UnsupportedPatchFormat: |
pass |
- def testFilePatchNoDiff(self): |
+ def testFilePatchDiffEmpty(self): |
try: |
patch.FilePatchDiff('foo', '', []) |
self.fail() |
except patch.UnsupportedPatchFormat: |
pass |
- def testFilePatchNoneDiff(self): |
+ def testFilePatchDiffNone(self): |
try: |
patch.FilePatchDiff('foo', None, []) |
self.fail() |
@@ -210,10 +258,60 @@ class PatchTest(unittest.TestCase): |
try: |
patch.FilePatchDiff('foo', SVN_PATCH, []) |
self.fail() |
+ except patch.UnsupportedPatchFormat, e: |
+ self.assertEquals( |
+ "Can't process patch for file foo.\nUnexpected diff: chrome/file.cc.", |
+ str(e)) |
+ |
+ def testFilePatchDiffBadHeader(self): |
+ try: |
+ diff = ( |
+ '+++ b/foo\n' |
+ '@@ -0,0 +1 @@\n' |
+ '+bar\n') |
+ patch.FilePatchDiff('foo', diff, []) |
+ self.fail() |
except patch.UnsupportedPatchFormat: |
pass |
- def testInvalidFilePatchDiffGit(self): |
+ def testFilePatchDiffBadGitHeader(self): |
+ try: |
+ diff = ( |
+ 'diff --git a/foo b/foo\n' |
+ '+++ b/foo\n' |
+ '@@ -0,0 +1 @@\n' |
+ '+bar\n') |
+ patch.FilePatchDiff('foo', diff, []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ |
+ def testFilePatchDiffBadHeaderReversed(self): |
+ try: |
+ diff = ( |
+ '+++ b/foo\n' |
+ '--- b/foo\n' |
+ '@@ -0,0 +1 @@\n' |
+ '+bar\n') |
+ patch.FilePatchDiff('foo', diff, []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ |
+ def testFilePatchDiffGitBadHeaderReversed(self): |
+ try: |
+ diff = ( |
+ 'diff --git a/foo b/foo\n' |
+ '+++ b/foo\n' |
+ '--- b/foo\n' |
+ '@@ -0,0 +1 @@\n' |
+ '+bar\n') |
+ patch.FilePatchDiff('foo', diff, []) |
+ self.fail() |
+ except patch.UnsupportedPatchFormat: |
+ pass |
+ |
+ def testFilePatchDiffInvalidGit(self): |
try: |
patch.FilePatchDiff('svn_utils_test.txt', ( |
'diff --git a/tests/svn_utils_test_data/svn_utils_test.txt ' |
@@ -291,7 +389,7 @@ class PatchTest(unittest.TestCase): |
patch.FilePatchDiff('pp', GIT_COPY, []), |
patch.FilePatchDiff('foo', GIT_NEW, []), |
patch.FilePatchDelete('other/place/foo', True), |
- patch.FilePatchBinary('bar', 'data', []), |
+ patch.FilePatchBinary('bar', 'data', [], is_new=False), |
]) |
expected = [ |
'chrome/file.cc', 'tools/clang_check/README.chromium', |
@@ -326,6 +424,16 @@ class PatchTest(unittest.TestCase): |
except patch.UnsupportedPatchFormat: |
pass |
+ def testRelPathEmpty(self): |
+ patches = patch.PatchSet([ |
+ patch.FilePatchDiff('chrome\\file.cc', SVN_PATCH, []), |
+ patch.FilePatchDelete('other\\place\\foo', True), |
+ ]) |
+ patches.set_relpath('') |
+ self.assertEquals( |
+ ['chrome/file.cc', 'other/place/foo'], |
+ [f.filename for f in patches]) |
+ |
def testBackSlash(self): |
mangled_patch = SVN_PATCH.replace('chrome/', 'chrome\\') |
patches = patch.PatchSet([ |
@@ -407,4 +515,7 @@ class PatchTest(unittest.TestCase): |
if __name__ == '__main__': |
+ logging.basicConfig(level= |
+ [logging.WARNING, logging.INFO, logging.DEBUG][ |
+ min(2, sys.argv.count('-v'))]) |
unittest.main() |