OLD | NEW |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |