OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 git_cl.py.""" | 6 """Unit tests for git_cl.py.""" |
7 | 7 |
8 import os | 8 import os |
9 import StringIO | 9 import StringIO |
10 import stat | 10 import stat |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 # diagnose. | 102 # diagnose. |
103 if expected_args != args: | 103 if expected_args != args: |
104 msg = '@%d Expected: %r Actual: %r' % ( | 104 msg = '@%d Expected: %r Actual: %r' % ( |
105 self._calls_done, expected_args, args) | 105 self._calls_done, expected_args, args) |
106 git_cl.logging.error(msg) | 106 git_cl.logging.error(msg) |
107 self.fail(msg) | 107 self.fail(msg) |
108 self._calls_done += 1 | 108 self._calls_done += 1 |
109 return result | 109 return result |
110 | 110 |
111 @classmethod | 111 @classmethod |
112 def _upload_calls(cls, similarity, find_copies): | 112 def _upload_calls(cls, similarity, find_copies, private): |
113 return (cls._git_base_calls(similarity, find_copies) + | 113 return (cls._git_base_calls(similarity, find_copies) + |
114 cls._git_upload_calls()) | 114 cls._git_upload_calls(private)) |
115 | 115 |
116 @classmethod | 116 @classmethod |
117 def _upload_no_rev_calls(cls, similarity, find_copies): | 117 def _upload_no_rev_calls(cls, similarity, find_copies): |
118 return (cls._git_base_calls(similarity, find_copies) + | 118 return (cls._git_base_calls(similarity, find_copies) + |
119 cls._git_upload_no_rev_calls()) | 119 cls._git_upload_no_rev_calls()) |
120 | 120 |
121 @classmethod | 121 @classmethod |
122 def _git_base_calls(cls, similarity, find_copies): | 122 def _git_base_calls(cls, similarity, find_copies): |
123 if similarity is None: | 123 if similarity is None: |
124 similarity = '50' | 124 similarity = '50' |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 'desc\n'), | 179 'desc\n'), |
180 ] | 180 ] |
181 | 181 |
182 @classmethod | 182 @classmethod |
183 def _git_upload_no_rev_calls(cls): | 183 def _git_upload_no_rev_calls(cls): |
184 return [ | 184 return [ |
185 ((['git', '--no-pager', 'config', 'core.editor'],), ''), | 185 ((['git', '--no-pager', 'config', 'core.editor'],), ''), |
186 ] | 186 ] |
187 | 187 |
188 @classmethod | 188 @classmethod |
189 def _git_upload_calls(cls): | 189 def _git_upload_calls(cls, private): |
| 190 if private: |
| 191 private_call = [] |
| 192 else: |
| 193 private_call = [ |
| 194 ((['git', '--no-pager', 'config', 'rietveld.private'],), '')] |
| 195 |
190 return [ | 196 return [ |
191 ((['git', '--no-pager', 'config', 'core.editor'],), ''), | 197 ((['git', '--no-pager', 'config', 'core.editor'],), ''), |
192 ((['git', '--no-pager', 'config', 'rietveld.cc'],), ''), | 198 ((['git', '--no-pager', 'config', 'rietveld.cc'],), '') |
193 ((['git', '--no-pager', 'config', 'branch.master.base-url'],), ''), | 199 ] + private_call + [ |
194 ((['git', '--no-pager', | 200 ((['git', '--no-pager', 'config', 'branch.master.base-url'],), ''), |
195 'config', '--local', '--get-regexp', '^svn-remote\\.'],), | 201 ((['git', '--no-pager', |
196 (('', None), 0)), | 202 'config', '--local', '--get-regexp', '^svn-remote\\.'],), |
197 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), | 203 (('', None), 0)), |
198 ((['git', '--no-pager', 'svn', 'info'],), ''), | 204 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
199 ((['git', '--no-pager', | 205 ((['git', '--no-pager', 'svn', 'info'],), ''), |
200 'config', 'branch.master.rietveldissue', '1'],), ''), | 206 ((['git', '--no-pager', |
201 ((['git', '--no-pager', 'config', 'branch.master.rietveldserver', | 207 'config', 'branch.master.rietveldissue', '1'],), ''), |
202 'https://codereview.example.com'],), ''), | 208 ((['git', '--no-pager', 'config', 'branch.master.rietveldserver', |
203 ((['git', '--no-pager', | 209 'https://codereview.example.com'],), ''), |
204 'config', 'branch.master.rietveldpatchset', '2'],), ''), | 210 ((['git', '--no-pager', |
205 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), 'hash'), | 211 'config', 'branch.master.rietveldpatchset', '2'],), ''), |
206 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'hash'), | 212 ((['git', '--no-pager', 'rev-parse', 'HEAD'],), 'hash'), |
207 ((['git', '--no-pager', | 213 ((['git', '--no-pager', 'symbolic-ref', 'HEAD'],), 'hash'), |
208 'config', 'branch.hash.last-upload-hash', 'hash'],), ''), | 214 ((['git', '--no-pager', |
| 215 'config', 'branch.hash.last-upload-hash', 'hash'],), ''), |
209 ] | 216 ] |
210 | 217 |
211 @staticmethod | 218 @staticmethod |
212 def _git_sanity_checks(diff_base, working_branch): | 219 def _git_sanity_checks(diff_base, working_branch): |
213 fake_ancestor = 'fake_ancestor' | 220 fake_ancestor = 'fake_ancestor' |
214 fake_cl = 'fake_cl_for_patch' | 221 fake_cl = 'fake_cl_for_patch' |
215 return [ | 222 return [ |
216 # Calls to verify branch point is ancestor | 223 # Calls to verify branch point is ancestor |
217 ((['git', '--no-pager', | 224 ((['git', '--no-pager', |
218 'rev-parse', '--verify', diff_base],), fake_ancestor), | 225 'rev-parse', '--verify', diff_base],), fake_ancestor), |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 'Review URL: https://codereview.example.com/12345'],), | 336 'Review URL: https://codereview.example.com/12345'],), |
330 ''), | 337 ''), |
331 ((['git', '--no-pager', | 338 ((['git', '--no-pager', |
332 'svn', 'dcommit', '-C50', '--no-rebase', '--rmdir'],), | 339 'svn', 'dcommit', '-C50', '--no-rebase', '--rmdir'],), |
333 (('', None), 0)), | 340 (('', None), 0)), |
334 ((['git', '--no-pager', 'checkout', '-q', 'working'],), ''), | 341 ((['git', '--no-pager', 'checkout', '-q', 'working'],), ''), |
335 ((['git', '--no-pager', 'branch', '-D', 'git-cl-commit'],), ''), | 342 ((['git', '--no-pager', 'branch', '-D', 'git-cl-commit'],), ''), |
336 ] | 343 ] |
337 | 344 |
338 @staticmethod | 345 @staticmethod |
339 def _cmd_line(description, args, similarity, find_copies): | 346 def _cmd_line(description, args, similarity, find_copies, private): |
340 """Returns the upload command line passed to upload.RealMain().""" | 347 """Returns the upload command line passed to upload.RealMain().""" |
341 return [ | 348 return [ |
342 'upload', '--assume_yes', '--server', | 349 'upload', '--assume_yes', '--server', |
343 'https://codereview.example.com', | 350 'https://codereview.example.com', |
344 '--message', description | 351 '--message', description |
345 ] + args + [ | 352 ] + args + [ |
346 '--cc', 'joe@example.com', | 353 '--cc', 'joe@example.com', |
| 354 ] + (['--private'] if private else []) + [ |
347 '--git_similarity', similarity or '50' | 355 '--git_similarity', similarity or '50' |
348 ] + (['--git_no_find_copies'] if find_copies == False else []) + [ | 356 ] + (['--git_no_find_copies'] if find_copies == False else []) + [ |
349 'fake_ancestor_sha', 'HEAD' | 357 'fake_ancestor_sha', 'HEAD' |
350 ] | 358 ] |
351 | 359 |
352 def _run_reviewer_test( | 360 def _run_reviewer_test( |
353 self, | 361 self, |
354 upload_args, | 362 upload_args, |
355 expected_description, | 363 expected_description, |
356 returned_description, | 364 returned_description, |
357 final_description, | 365 final_description, |
358 reviewers): | 366 reviewers, |
| 367 private=False): |
359 """Generic reviewer test framework.""" | 368 """Generic reviewer test framework.""" |
360 try: | 369 try: |
361 similarity = upload_args[upload_args.index('--similarity')+1] | 370 similarity = upload_args[upload_args.index('--similarity')+1] |
362 except ValueError: | 371 except ValueError: |
363 similarity = None | 372 similarity = None |
364 | 373 |
365 if '--find-copies' in upload_args: | 374 if '--find-copies' in upload_args: |
366 find_copies = True | 375 find_copies = True |
367 elif '--no-find-copies' in upload_args: | 376 elif '--no-find-copies' in upload_args: |
368 find_copies = False | 377 find_copies = False |
369 else: | 378 else: |
370 find_copies = None | 379 find_copies = None |
371 | 380 |
372 self.calls = self._upload_calls(similarity, find_copies) | 381 private = '--private' in upload_args |
| 382 |
| 383 self.calls = self._upload_calls(similarity, find_copies, private) |
373 def RunEditor(desc, _, **kwargs): | 384 def RunEditor(desc, _, **kwargs): |
374 self.assertEquals( | 385 self.assertEquals( |
375 '# Enter a description of the change.\n' | 386 '# Enter a description of the change.\n' |
376 '# This will be displayed on the codereview site.\n' | 387 '# This will be displayed on the codereview site.\n' |
377 '# The first line will also be used as the subject of the review.\n' + | 388 '# The first line will also be used as the subject of the review.\n' + |
378 expected_description, | 389 expected_description, |
379 desc) | 390 desc) |
380 return returned_description | 391 return returned_description |
381 self.mock(git_cl.gclient_utils, 'RunEditor', RunEditor) | 392 self.mock(git_cl.gclient_utils, 'RunEditor', RunEditor) |
382 def check_upload(args): | 393 def check_upload(args): |
383 cmd_line = self._cmd_line(final_description, reviewers, similarity, | 394 cmd_line = self._cmd_line(final_description, reviewers, similarity, |
384 find_copies) | 395 find_copies, private) |
385 self.assertEquals(cmd_line, args) | 396 self.assertEquals(cmd_line, args) |
386 return 1, 2 | 397 return 1, 2 |
387 self.mock(git_cl.upload, 'RealMain', check_upload) | 398 self.mock(git_cl.upload, 'RealMain', check_upload) |
388 git_cl.main(['upload'] + upload_args) | 399 git_cl.main(['upload'] + upload_args) |
389 | 400 |
390 def test_no_reviewer(self): | 401 def test_no_reviewer(self): |
391 self._run_reviewer_test( | 402 self._run_reviewer_test( |
392 [], | 403 [], |
393 'desc\n\nBUG=', | 404 'desc\n\nBUG=', |
394 '# Blah blah comment.\ndesc\n\nBUG=', | 405 '# Blah blah comment.\ndesc\n\nBUG=', |
395 'desc\n\nBUG=', | 406 'desc\n\nBUG=', |
396 []) | 407 []) |
397 | 408 |
398 def test_keep_similarity(self): | 409 def test_keep_similarity(self): |
399 self._run_reviewer_test( | 410 self._run_reviewer_test( |
400 ['--similarity', '70'], | 411 ['--similarity', '70'], |
401 'desc\n\nBUG=', | 412 'desc\n\nBUG=', |
402 '# Blah blah comment.\ndesc\n\nBUG=', | 413 '# Blah blah comment.\ndesc\n\nBUG=', |
403 'desc\n\nBUG=', | 414 'desc\n\nBUG=', |
404 []) | 415 []) |
405 | 416 |
406 def test_keep_find_copies(self): | 417 def test_keep_find_copies(self): |
407 self._run_reviewer_test( | 418 self._run_reviewer_test( |
408 ['--no-find-copies'], | 419 ['--no-find-copies'], |
409 'desc\n\nBUG=', | 420 'desc\n\nBUG=', |
410 '# Blah blah comment.\ndesc\n\nBUG=\n', | 421 '# Blah blah comment.\ndesc\n\nBUG=\n', |
411 'desc\n\nBUG=', | 422 'desc\n\nBUG=', |
412 []) | 423 []) |
413 | 424 |
| 425 def test_private(self): |
| 426 self._run_reviewer_test( |
| 427 ['--private'], |
| 428 'desc\n\nBUG=', |
| 429 '# Blah blah comment.\ndesc\n\nBUG=\n', |
| 430 'desc\n\nBUG=', |
| 431 []) |
| 432 |
414 def test_reviewers_cmd_line(self): | 433 def test_reviewers_cmd_line(self): |
415 # Reviewer is passed as-is | 434 # Reviewer is passed as-is |
416 description = 'desc\n\nR=foo@example.com\nBUG=' | 435 description = 'desc\n\nR=foo@example.com\nBUG=' |
417 self._run_reviewer_test( | 436 self._run_reviewer_test( |
418 ['-r' 'foo@example.com'], | 437 ['-r' 'foo@example.com'], |
419 description, | 438 description, |
420 '\n%s\n' % description, | 439 '\n%s\n' % description, |
421 description, | 440 description, |
422 ['--reviewers=foo@example.com']) | 441 ['--reviewers=foo@example.com']) |
423 | 442 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 return False | 643 return False |
625 # others paths, such as /usr/share/locale/.... | 644 # others paths, such as /usr/share/locale/.... |
626 return True | 645 return True |
627 self.mock(git_cl.os.path, 'exists', Exists) | 646 self.mock(git_cl.os.path, 'exists', Exists) |
628 self.mock(git_cl, 'urlretrieve', self._mocked_call) | 647 self.mock(git_cl, 'urlretrieve', self._mocked_call) |
629 self.calls = [ | 648 self.calls = [ |
630 ((['git', '--no-pager', 'config', 'rietveld.server', | 649 ((['git', '--no-pager', 'config', 'rietveld.server', |
631 'gerrit.chromium.org'],), ''), | 650 'gerrit.chromium.org'],), ''), |
632 ((['git', '--no-pager', 'config', '--unset-all', 'rietveld.cc'],), ''), | 651 ((['git', '--no-pager', 'config', '--unset-all', 'rietveld.cc'],), ''), |
633 ((['git', '--no-pager', 'config', '--unset-all', | 652 ((['git', '--no-pager', 'config', '--unset-all', |
| 653 'rietveld.private'],), ''), |
| 654 ((['git', '--no-pager', 'config', '--unset-all', |
634 'rietveld.tree-status-url'],), ''), | 655 'rietveld.tree-status-url'],), ''), |
635 ((['git', '--no-pager', 'config', '--unset-all', | 656 ((['git', '--no-pager', 'config', '--unset-all', |
636 'rietveld.viewvc-url'],), ''), | 657 'rietveld.viewvc-url'],), ''), |
637 ((['git', '--no-pager', 'config', 'gerrit.host', | 658 ((['git', '--no-pager', 'config', 'gerrit.host', |
638 'gerrit.chromium.org'],), ''), | 659 'gerrit.chromium.org'],), ''), |
639 ((['git', '--no-pager', 'config', 'gerrit.port', '29418'],), ''), | 660 ((['git', '--no-pager', 'config', 'gerrit.port', '29418'],), ''), |
640 # DownloadHooks(False) | 661 # DownloadHooks(False) |
641 ((['git', '--no-pager', 'config', 'gerrit.host'],), | 662 ((['git', '--no-pager', 'config', 'gerrit.host'],), |
642 'gerrit.chromium.org'), | 663 'gerrit.chromium.org'), |
643 ((['git', '--no-pager', 'config', 'rietveld.server'],), | 664 ((['git', '--no-pager', 'config', 'rietveld.server'],), |
644 'gerrit.chromium.org'), | 665 'gerrit.chromium.org'), |
645 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), | 666 ((['git', '--no-pager', 'rev-parse', '--show-cdup'],), ''), |
646 ((commit_msg_path, os.X_OK,), False), | 667 ((commit_msg_path, os.X_OK,), False), |
647 (('https://gerrit.chromium.org/tools/hooks/commit-msg', | 668 (('https://gerrit.chromium.org/tools/hooks/commit-msg', |
648 commit_msg_path,), ''), | 669 commit_msg_path,), ''), |
649 ((commit_msg_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR,), ''), | 670 ((commit_msg_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR,), ''), |
650 # GetCodereviewSettingsInteractively | 671 # GetCodereviewSettingsInteractively |
651 ((['git', '--no-pager', 'config', 'rietveld.server'],), | 672 ((['git', '--no-pager', 'config', 'rietveld.server'],), |
652 'gerrit.chromium.org'), | 673 'gerrit.chromium.org'), |
653 (('Rietveld server (host[:port]) [https://gerrit.chromium.org]:',), | 674 (('Rietveld server (host[:port]) [https://gerrit.chromium.org]:',), |
654 ''), | 675 ''), |
655 ((['git', '--no-pager', 'config', 'rietveld.cc'],), ''), | 676 ((['git', '--no-pager', 'config', 'rietveld.cc'],), ''), |
656 (('CC list:',), ''), | 677 (('CC list:',), ''), |
| 678 ((['git', '--no-pager', 'config', 'rietveld.private'],), ''), |
| 679 (('Private flag (rietveld only):',), ''), |
657 ((['git', '--no-pager', 'config', 'rietveld.tree-status-url'],), ''), | 680 ((['git', '--no-pager', 'config', 'rietveld.tree-status-url'],), ''), |
658 (('Tree status URL:',), ''), | 681 (('Tree status URL:',), ''), |
659 ((['git', '--no-pager', 'config', 'rietveld.viewvc-url'],), ''), | 682 ((['git', '--no-pager', 'config', 'rietveld.viewvc-url'],), ''), |
660 (('ViewVC URL:',), ''), | 683 (('ViewVC URL:',), ''), |
661 # DownloadHooks(True) | 684 # DownloadHooks(True) |
662 ((commit_msg_path, os.X_OK,), True), | 685 ((commit_msg_path, os.X_OK,), True), |
663 ] | 686 ] |
664 git_cl.main(['config']) | 687 git_cl.main(['config']) |
665 | 688 |
666 def test_update_reviewers(self): | 689 def test_update_reviewers(self): |
(...skipping 19 matching lines...) Expand all Loading... |
686 obj = git_cl.ChangeDescription(orig) | 709 obj = git_cl.ChangeDescription(orig) |
687 obj.update_reviewers(reviewers) | 710 obj.update_reviewers(reviewers) |
688 actual.append(obj.description) | 711 actual.append(obj.description) |
689 self.assertEqual(expected, actual) | 712 self.assertEqual(expected, actual) |
690 | 713 |
691 | 714 |
692 if __name__ == '__main__': | 715 if __name__ == '__main__': |
693 git_cl.logging.basicConfig( | 716 git_cl.logging.basicConfig( |
694 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) | 717 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) |
695 unittest.main() | 718 unittest.main() |
OLD | NEW |