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

Side by Side Diff: tests/patch_test.py

Issue 7828017: Improve is_delete detection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: rebase against HEAD Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « patch.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Unit tests for patch.py.""" 6 """Unit tests for patch.py."""
7 7
8 import logging 8 import logging
9 import os 9 import os
10 import sys 10 import sys
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 '+bar\n') 126 '+bar\n')
127 127
128 128
129 NEW = ( 129 NEW = (
130 '--- /dev/null\n' 130 '--- /dev/null\n'
131 '+++ foo\n' 131 '+++ foo\n'
132 '@@ -0,0 +1 @@\n' 132 '@@ -0,0 +1 @@\n'
133 '+bar\n') 133 '+bar\n')
134 134
135 135
136 DELETE = (
137 '--- tools/clang_check/README.chromium\n'
138 '+++ /dev/null\n'
139 '@@ -1,1 +0,0 @@\n'
140 '-bar\n')
141
142
136 class PatchTest(unittest.TestCase): 143 class PatchTest(unittest.TestCase):
137 def testFilePatchDelete(self): 144 def testFilePatchDelete(self):
138 c = patch.FilePatchDelete('foo', False) 145 p = patch.FilePatchDelete('foo', False)
139 self.assertEquals(c.filename, 'foo') 146 self.assertEquals(p.filename, 'foo')
140 self.assertEquals(c.is_binary, False) 147 self.assertEquals(p.is_binary, False)
141 self.assertEquals(c.is_delete, True) 148 self.assertEquals(p.is_delete, True)
142 self.assertEquals(c.is_new, False) 149 self.assertEquals(p.is_new, False)
143 try: 150 try:
144 c.get() 151 p.get()
145 self.fail() 152 self.fail()
146 except NotImplementedError: 153 except NotImplementedError:
147 pass 154 pass
148 c = patch.FilePatchDelete('foo', True) 155 p = patch.FilePatchDelete('foo', True)
149 self.assertEquals(c.filename, 'foo') 156 self.assertEquals(p.filename, 'foo')
150 self.assertEquals(c.is_binary, True) 157 self.assertEquals(p.is_binary, True)
151 self.assertEquals(c.is_delete, True) 158 self.assertEquals(p.is_delete, True)
152 self.assertEquals(c.is_new, False) 159 self.assertEquals(p.is_new, False)
153 try: 160 try:
154 c.get() 161 p.get()
155 self.fail() 162 self.fail()
156 except NotImplementedError: 163 except NotImplementedError:
157 pass 164 pass
158 165
159 def testFilePatchBinary(self): 166 def testFilePatchBinary(self):
160 c = patch.FilePatchBinary('foo', 'data', [], is_new=False) 167 p = patch.FilePatchBinary('foo', 'data', [], is_new=False)
161 self.assertEquals(c.filename, 'foo') 168 self.assertEquals(p.filename, 'foo')
162 self.assertEquals(c.is_binary, True) 169 self.assertEquals(p.is_binary, True)
163 self.assertEquals(c.is_delete, False) 170 self.assertEquals(p.is_delete, False)
164 self.assertEquals(c.is_new, False) 171 self.assertEquals(p.is_new, False)
165 self.assertEquals(c.get(), 'data') 172 self.assertEquals(p.get(), 'data')
166 173
167 def testFilePatchBinaryNew(self): 174 def testFilePatchBinaryNew(self):
168 c = patch.FilePatchBinary('foo', 'data', [], is_new=True) 175 p = patch.FilePatchBinary('foo', 'data', [], is_new=True)
169 self.assertEquals(c.filename, 'foo') 176 self.assertEquals(p.filename, 'foo')
170 self.assertEquals(c.is_binary, True) 177 self.assertEquals(p.is_binary, True)
171 self.assertEquals(c.is_delete, False) 178 self.assertEquals(p.is_delete, False)
172 self.assertEquals(c.is_new, True) 179 self.assertEquals(p.is_new, True)
173 self.assertEquals(c.get(), 'data') 180 self.assertEquals(p.get(), 'data')
174 181
175 def testFilePatchDiff(self): 182 def testFilePatchDiff(self):
176 c = patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, []) 183 p = patch.FilePatchDiff('chrome/file.cc', SVN_PATCH, [])
177 self.assertEquals(c.filename, 'chrome/file.cc') 184 self.assertEquals(p.filename, 'chrome/file.cc')
178 self.assertEquals(c.is_binary, False) 185 self.assertEquals(p.is_binary, False)
179 self.assertEquals(c.is_delete, False) 186 self.assertEquals(p.is_delete, False)
180 self.assertEquals(c.is_git_diff, False) 187 self.assertEquals(p.is_git_diff, False)
181 self.assertEquals(c.is_new, False) 188 self.assertEquals(p.is_new, False)
182 self.assertEquals(c.patchlevel, 0) 189 self.assertEquals(p.patchlevel, 0)
183 self.assertEquals(c.get(), SVN_PATCH) 190 self.assertEquals(p.get(), SVN_PATCH)
184 191
185 def testFilePatchDiffHeaderMode(self): 192 def testFilePatchDiffHeaderMode(self):
186 diff = ( 193 diff = (
187 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' 194 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n'
188 'old mode 100644\n' 195 'old mode 100644\n'
189 'new mode 100755\n') 196 'new mode 100755\n')
190 c = patch.FilePatchDiff('git_cl/git-cl', diff, []) 197 p = patch.FilePatchDiff('git_cl/git-cl', diff, [])
191 self.assertEquals(c.filename, 'git_cl/git-cl') 198 self.assertEquals(p.filename, 'git_cl/git-cl')
192 self.assertEquals(c.is_binary, False) 199 self.assertEquals(p.is_binary, False)
193 self.assertEquals(c.is_delete, False) 200 self.assertEquals(p.is_delete, False)
194 self.assertEquals(c.is_git_diff, True) 201 self.assertEquals(p.is_git_diff, True)
195 self.assertEquals(c.is_new, False) 202 self.assertEquals(p.is_new, False)
196 self.assertEquals(c.patchlevel, 1) 203 self.assertEquals(p.patchlevel, 1)
197 self.assertEquals(c.get(), diff) 204 self.assertEquals(p.get(), diff)
205 self.assertEquals([('svn:executable', '*')], p.svn_properties)
198 206
199 def testFilePatchDiffHeaderModeIndex(self): 207 def testFilePatchDiffHeaderModeIndex(self):
200 diff = ( 208 diff = (
201 'Index: Junk\n' 209 'Index: Junk\n'
202 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n' 210 'diff --git a/git_cl/git-cl b/git_cl/git-cl\n'
203 'old mode 100644\n' 211 'old mode 100644\n'
204 'new mode 100755\n') 212 'new mode 100755\n')
205 c = patch.FilePatchDiff('git_cl/git-cl', diff, []) 213 p = patch.FilePatchDiff('git_cl/git-cl', diff, [])
206 self.assertEquals(c.filename, 'git_cl/git-cl') 214 self.assertEquals(p.filename, 'git_cl/git-cl')
207 self.assertEquals(c.is_binary, False) 215 self.assertEquals(p.is_binary, False)
208 self.assertEquals(c.is_delete, False) 216 self.assertEquals(p.is_delete, False)
209 self.assertEquals(c.is_git_diff, True) 217 self.assertEquals(p.is_git_diff, True)
210 self.assertEquals(c.is_new, False) 218 self.assertEquals(p.is_new, False)
211 self.assertEquals(c.patchlevel, 1) 219 self.assertEquals(p.patchlevel, 1)
212 self.assertEquals(c.get(), diff) 220 self.assertEquals(p.get(), diff)
213 221
214 def testFilePatchDiffSvnNew(self): 222 def testFilePatchDiffSvnNew(self):
215 # The code path is different for git and svn. 223 # The code path is different for git and svn.
216 c = patch.FilePatchDiff('foo', NEW, []) 224 p = patch.FilePatchDiff('foo', NEW, [])
217 self.assertEquals(c.filename, 'foo') 225 self.assertEquals(p.filename, 'foo')
218 self.assertEquals(c.is_binary, False) 226 self.assertEquals(p.is_binary, False)
219 self.assertEquals(c.is_delete, False) 227 self.assertEquals(p.is_delete, False)
220 self.assertEquals(c.is_git_diff, False) 228 self.assertEquals(p.is_git_diff, False)
221 self.assertEquals(c.is_new, True) 229 self.assertEquals(p.is_new, True)
222 self.assertEquals(c.patchlevel, 0) 230 self.assertEquals(p.patchlevel, 0)
223 self.assertEquals(c.get(), NEW) 231 self.assertEquals(p.get(), NEW)
224 232
225 def testFilePatchDiffGitNew(self): 233 def testFilePatchDiffGitNew(self):
226 # The code path is different for git and svn. 234 # The code path is different for git and svn.
227 c = patch.FilePatchDiff('foo', GIT_NEW, []) 235 p = patch.FilePatchDiff('foo', GIT_NEW, [])
228 self.assertEquals(c.filename, 'foo') 236 self.assertEquals(p.filename, 'foo')
229 self.assertEquals(c.is_binary, False) 237 self.assertEquals(p.is_binary, False)
230 self.assertEquals(c.is_delete, False) 238 self.assertEquals(p.is_delete, False)
231 self.assertEquals(c.is_git_diff, True) 239 self.assertEquals(p.is_git_diff, True)
232 self.assertEquals(c.is_new, True) 240 self.assertEquals(p.is_new, True)
233 self.assertEquals(c.patchlevel, 1) 241 self.assertEquals(p.patchlevel, 1)
234 self.assertEquals(c.get(), GIT_NEW) 242 self.assertEquals(p.get(), GIT_NEW)
235 243
236 def testFilePatchDiffBad(self): 244 def testFilePatchDiffBad(self):
237 try: 245 try:
238 patch.FilePatchDiff('foo', 'data', []) 246 patch.FilePatchDiff('foo', 'data', [])
239 self.fail() 247 self.fail()
240 except patch.UnsupportedPatchFormat: 248 except patch.UnsupportedPatchFormat:
241 pass 249 pass
242 250
243 def testFilePatchDiffEmpty(self): 251 def testFilePatchDiffEmpty(self):
244 try: 252 try:
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 def testBackSlash(self): 445 def testBackSlash(self):
438 mangled_patch = SVN_PATCH.replace('chrome/', 'chrome\\') 446 mangled_patch = SVN_PATCH.replace('chrome/', 'chrome\\')
439 patches = patch.PatchSet([ 447 patches = patch.PatchSet([
440 patch.FilePatchDiff('chrome\\file.cc', mangled_patch, []), 448 patch.FilePatchDiff('chrome\\file.cc', mangled_patch, []),
441 patch.FilePatchDelete('other\\place\\foo', True), 449 patch.FilePatchDelete('other\\place\\foo', True),
442 ]) 450 ])
443 expected = ['chrome/file.cc', 'other/place/foo'] 451 expected = ['chrome/file.cc', 'other/place/foo']
444 self.assertEquals(expected, patches.filenames) 452 self.assertEquals(expected, patches.filenames)
445 self.assertEquals(SVN_PATCH, patches.patches[0].get()) 453 self.assertEquals(SVN_PATCH, patches.patches[0].get())
446 454
447 def testGitPatches(self): 455 def testDelete(self):
448 # Shouldn't throw. 456 p = patch.FilePatchDiff('tools/clang_check/README.chromium', DELETE, [])
449 patch.FilePatchDiff('tools/clang_check/README.chromium', GIT_DELETE, []) 457 self.assertEquals(p.filename, 'tools/clang_check/README.chromium')
450 patch.FilePatchDiff('tools/run_local_server.sh', GIT_RENAME, []) 458 self.assertEquals(p.is_binary, False)
451 patch.FilePatchDiff( 459 self.assertEquals(p.is_delete, True)
460 self.assertEquals(p.is_new, False)
461 self.assertEquals(p.get(), DELETE)
462 self.assertEquals([], p.svn_properties)
463
464 def testGitDelete(self):
465 p = patch.FilePatchDiff('tools/clang_check/README.chromium', GIT_DELETE, [])
466 self.assertEquals(p.filename, 'tools/clang_check/README.chromium')
467 self.assertEquals(p.is_binary, False)
468 self.assertEquals(p.is_delete, True)
469 self.assertEquals(p.is_new, False)
470 self.assertEquals(p.get(), GIT_DELETE)
471 self.assertEquals([], p.svn_properties)
472
473 def testGitRename(self):
474 p = patch.FilePatchDiff('tools/run_local_server.sh', GIT_RENAME, [])
475 self.assertEquals(p.filename, 'tools/run_local_server.sh')
476 self.assertEquals(p.is_binary, False)
477 self.assertEquals(p.is_delete, False)
478 self.assertEquals(p.is_new, False)
479 self.assertEquals(p.get(), GIT_RENAME)
480 self.assertEquals([], p.svn_properties)
481
482 def testGitRenamePartial(self):
483 p = patch.FilePatchDiff(
452 'chrome/browser/chromeos/views/webui_menu_widget.h', 484 'chrome/browser/chromeos/views/webui_menu_widget.h',
453 GIT_RENAME_PARTIAL, []) 485 GIT_RENAME_PARTIAL, [])
454 patch.FilePatchDiff('pp', GIT_COPY, []) 486 self.assertEquals(
455 patch.FilePatchDiff('foo', GIT_NEW, []) 487 p.filename, 'chrome/browser/chromeos/views/webui_menu_widget.h')
456 self.assertTrue(True) 488 self.assertEquals(p.is_binary, False)
489 self.assertEquals(p.is_delete, False)
490 self.assertEquals(p.is_new, False)
491 self.assertEquals(p.get(), GIT_RENAME_PARTIAL)
492 self.assertEquals([], p.svn_properties)
493
494 def testGitCopy(self):
495 p = patch.FilePatchDiff('pp', GIT_COPY, [])
496 self.assertEquals(p.filename, 'pp')
497 self.assertEquals(p.is_binary, False)
498 self.assertEquals(p.is_delete, False)
499 self.assertEquals(p.is_new, False)
500 self.assertEquals(p.get(), GIT_COPY)
501 self.assertEquals([], p.svn_properties)
502
503 def testGitNew(self):
504 p = patch.FilePatchDiff('foo', GIT_NEW, [])
505 self.assertEquals(p.filename, 'foo')
506 self.assertEquals(p.is_binary, False)
507 self.assertEquals(p.is_delete, False)
508 self.assertEquals(p.is_new, True)
509 self.assertEquals(p.get(), GIT_NEW)
510 self.assertEquals([], p.svn_properties)
457 511
458 def testOnlyHeader(self): 512 def testOnlyHeader(self):
459 p = patch.FilePatchDiff('file_a', '--- file_a\n+++ file_a\n', []) 513 p = patch.FilePatchDiff('file_a', '--- file_a\n+++ file_a\n', [])
460 self.assertTrue(p) 514 self.assertTrue(p)
461 515
462 def testSmallest(self): 516 def testSmallest(self):
463 p = patch.FilePatchDiff( 517 p = patch.FilePatchDiff(
464 'file_a', '--- file_a\n+++ file_a\n@@ -0,0 +1 @@\n+foo\n', []) 518 'file_a', '--- file_a\n+++ file_a\n@@ -0,0 +1 @@\n+foo\n', [])
465 self.assertTrue(p) 519 self.assertTrue(p)
466 520
467 def testInverted(self): 521 def testInverted(self):
468 try: 522 try:
469 patch.FilePatchDiff( 523 patch.FilePatchDiff(
470 'file_a', '+++ file_a\n--- file_a\n@@ -0,0 +1 @@\n+foo\n', []) 524 'file_a', '+++ file_a\n--- file_a\n@@ -0,0 +1 @@\n+foo\n', [])
471 self.fail() 525 self.fail()
472 except patch.UnsupportedPatchFormat: 526 except patch.UnsupportedPatchFormat:
473 pass 527 pass
474 528
475 def testInvertedOnlyHeader(self): 529 def testInvertedOnlyHeader(self):
476 try: 530 try:
477 patch.FilePatchDiff('file_a', '+++ file_a\n--- file_a\n', []) 531 patch.FilePatchDiff('file_a', '+++ file_a\n--- file_a\n', [])
478 self.fail() 532 self.fail()
479 except patch.UnsupportedPatchFormat: 533 except patch.UnsupportedPatchFormat:
480 pass 534 pass
481 535
482 def testRenameOnlyHeader(self): 536 def testRenameOnlyHeader(self):
483 p = patch.FilePatchDiff('file_b', '--- file_a\n+++ file_b\n', []) 537 p = patch.FilePatchDiff('file_b', '--- file_a\n+++ file_b\n', [])
484 self.assertTrue(p) 538 self.assertEquals(p.filename, 'file_b')
539 self.assertEquals(p.is_binary, False)
540 self.assertEquals(p.is_delete, False)
541 # Should it be marked as new?
542 self.assertEquals(p.is_new, False)
543 self.assertEquals(p.get(), '--- file_a\n+++ file_b\n')
544 self.assertEquals([], p.svn_properties)
485 545
486 def testGitCopy(self): 546 def testGitCopyPartial(self):
487 diff = ( 547 diff = (
488 'diff --git a/wtf b/wtf2\n' 548 'diff --git a/wtf b/wtf2\n'
489 'similarity index 98%\n' 549 'similarity index 98%\n'
490 'copy from wtf\n' 550 'copy from wtf\n'
491 'copy to wtf2\n' 551 'copy to wtf2\n'
492 'index 79fbaf3..3560689 100755\n' 552 'index 79fbaf3..3560689 100755\n'
493 '--- a/wtf\n' 553 '--- a/wtf\n'
494 '+++ b/wtf2\n' 554 '+++ b/wtf2\n'
495 '@@ -1,4 +1,4 @@\n' 555 '@@ -1,4 +1,4 @@\n'
496 '-#!/usr/bin/env python\n' 556 '-#!/usr/bin/env python\n'
497 '+#!/usr/bin/env python1.3\n' 557 '+#!/usr/bin/env python1.3\n'
498 ' # Copyright (c) 2010 The Chromium Authors. All rights reserved.\n' 558 ' # Copyright (c) 2010 The Chromium Authors. All rights reserved.\n'
499 ' # blah blah blah as\n' 559 ' # blah blah blah as\n'
500 ' # found in the LICENSE file.\n') 560 ' # found in the LICENSE file.\n')
501 p = patch.FilePatchDiff('wtf2', diff, []) 561 p = patch.FilePatchDiff('wtf2', diff, [])
502 self.assertTrue(p) 562 self.assertEquals(p.filename, 'wtf2')
563 self.assertEquals(p.is_binary, False)
564 self.assertEquals(p.is_delete, False)
565 # Should it be marked as new?
566 self.assertEquals(p.is_new, False)
567 self.assertEquals(p.get(), diff)
568 self.assertEquals([], p.svn_properties)
503 569
504 def testGitExe(self): 570 def testGitExe(self):
505 diff = ( 571 diff = (
506 'diff --git a/natsort_test.py b/natsort_test.py\n' 572 'diff --git a/natsort_test.py b/natsort_test.py\n'
507 'new file mode 100755\n' 573 'new file mode 100755\n'
508 '--- /dev/null\n' 574 '--- /dev/null\n'
509 '+++ b/natsort_test.py\n' 575 '+++ b/natsort_test.py\n'
510 '@@ -0,0 +1,1 @@\n' 576 '@@ -0,0 +1,1 @@\n'
511 '+#!/usr/bin/env python\n') 577 '+#!/usr/bin/env python\n')
512 self.assertEquals( 578 p = patch.FilePatchDiff('natsort_test.py', diff, [])
513 [('svn:executable', '*')], 579 self.assertEquals(p.filename, 'natsort_test.py')
514 patch.FilePatchDiff('natsort_test.py', diff, []).svn_properties) 580 self.assertEquals(p.is_binary, False)
581 self.assertEquals(p.is_delete, False)
582 self.assertEquals(p.is_new, True)
583 self.assertEquals(p.get(), diff)
584 self.assertEquals([('svn:executable', '*')], p.svn_properties)
585
586 def testGitExe2(self):
515 diff = ( 587 diff = (
516 'diff --git a/natsort_test.py b/natsort_test.py\n' 588 'diff --git a/natsort_test.py b/natsort_test.py\n'
517 'new file mode 100644\n' 589 'new file mode 100644\n'
518 '--- /dev/null\n' 590 '--- /dev/null\n'
519 '+++ b/natsort_test.py\n' 591 '+++ b/natsort_test.py\n'
520 '@@ -0,0 +1,1 @@\n' 592 '@@ -0,0 +1,1 @@\n'
521 '+#!/usr/bin/env python\n') 593 '+#!/usr/bin/env python\n')
522 self.assertEquals( 594 p = patch.FilePatchDiff('natsort_test.py', diff, [])
523 [], patch.FilePatchDiff('natsort_test.py', diff, []).svn_properties) 595 self.assertEquals(p.filename, 'natsort_test.py')
596 self.assertEquals(p.is_binary, False)
597 self.assertEquals(p.is_delete, False)
598 self.assertEquals(p.is_new, True)
599 self.assertEquals(p.get(), diff)
600 self.assertEquals([], p.svn_properties)
524 601
525 602
526 if __name__ == '__main__': 603 if __name__ == '__main__':
527 logging.basicConfig(level= 604 logging.basicConfig(level=
528 [logging.WARNING, logging.INFO, logging.DEBUG][ 605 [logging.WARNING, logging.INFO, logging.DEBUG][
529 min(2, sys.argv.count('-v'))]) 606 min(2, sys.argv.count('-v'))])
530 unittest.main() 607 unittest.main()
OLDNEW
« no previous file with comments | « patch.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698