Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(262)

Unified Diff: tests/patch_test.py

Issue 7054048: Increase coverage to 91%; Much stricter about header parsing. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Address review comments Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/checkout_test.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
« no previous file with comments | « tests/checkout_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698