| 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 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 ((['git', 'config', 'user.email'],), 'me@example.com'), | 751 ((['git', 'config', 'user.email'],), 'me@example.com'), |
| 752 ((['git', | 752 ((['git', |
| 753 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', | 753 'diff', '--no-ext-diff', '--stat', '--find-copies-harder', |
| 754 '-l100000', '-C50', 'fake_ancestor_sha', 'HEAD'],), | 754 '-l100000', '-C50', 'fake_ancestor_sha', 'HEAD'],), |
| 755 '+dat'), | 755 '+dat'), |
| 756 ] | 756 ] |
| 757 | 757 |
| 758 @classmethod | 758 @classmethod |
| 759 def _gerrit_upload_calls(cls, description, reviewers, squash, | 759 def _gerrit_upload_calls(cls, description, reviewers, squash, |
| 760 expected_upstream_ref='origin/refs/heads/master', | 760 expected_upstream_ref='origin/refs/heads/master', |
| 761 ref_suffix='', | 761 ref_suffix='', notify=False, |
| 762 post_amend_description=None, issue=None): | 762 post_amend_description=None, issue=None): |
| 763 if post_amend_description is None: | 763 if post_amend_description is None: |
| 764 post_amend_description = description | 764 post_amend_description = description |
| 765 | 765 |
| 766 calls = [ | 766 calls = [ |
| 767 ((['git', 'config', '--bool', 'gerrit.squash-uploads'],), 'false'), | 767 ((['git', 'config', '--bool', 'gerrit.squash-uploads'],), 'false'), |
| 768 ] | 768 ] |
| 769 # If issue is given, then description is fetched from Gerrit instead. | 769 # If issue is given, then description is fetched from Gerrit instead. |
| 770 if issue is None: | 770 if issue is None: |
| 771 if squash: | 771 if squash: |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 ((['git', 'rev-list', | 820 ((['git', 'rev-list', |
| 821 expected_upstream_ref + '..' + ref_to_push],), ''), | 821 expected_upstream_ref + '..' + ref_to_push],), ''), |
| 822 ((['git', 'config', 'rietveld.cc'],), '') | 822 ((['git', 'config', 'rietveld.cc'],), '') |
| 823 ] | 823 ] |
| 824 # Add cc from watch list. | 824 # Add cc from watch list. |
| 825 # TODO(tandrii): bring this back after http://crbug.com/604377. | 825 # TODO(tandrii): bring this back after http://crbug.com/604377. |
| 826 # if ref_suffix == '': | 826 # if ref_suffix == '': |
| 827 # ref_suffix = '%cc=joe@example.com' | 827 # ref_suffix = '%cc=joe@example.com' |
| 828 # else: | 828 # else: |
| 829 # ref_suffix += ',cc=joe@example.com' | 829 # ref_suffix += ',cc=joe@example.com' |
| 830 |
| 831 notify_suffix = 'notify=%s' % ('ALL' if notify else 'NONE') |
| 832 if ref_suffix: |
| 833 ref_suffix += ',' + notify_suffix |
| 834 else: |
| 835 ref_suffix = '%' + notify_suffix |
| 830 if reviewers: | 836 if reviewers: |
| 831 if ref_suffix: | 837 ref_suffix += ',' + ','.join('r=%s' % email |
| 832 ref_suffix += ',' | 838 for email in sorted(reviewers)) |
| 833 else: | |
| 834 ref_suffix = '%' | |
| 835 ref_suffix += ','.join('r=%s' % email for email in sorted(reviewers)) | |
| 836 calls += [ | 839 calls += [ |
| 837 ((['git', 'push', 'origin', | 840 ((['git', 'push', 'origin', |
| 838 ref_to_push + ':refs/for/refs/heads/master' + ref_suffix],), | 841 ref_to_push + ':refs/for/refs/heads/master' + ref_suffix],), |
| 839 ('remote:\n' | 842 ('remote:\n' |
| 840 'remote: Processing changes: (\)\n' | 843 'remote: Processing changes: (\)\n' |
| 841 'remote: Processing changes: (|)\n' | 844 'remote: Processing changes: (|)\n' |
| 842 'remote: Processing changes: (/)\n' | 845 'remote: Processing changes: (/)\n' |
| 843 'remote: Processing changes: (-)\n' | 846 'remote: Processing changes: (-)\n' |
| 844 'remote: Processing changes: new: 1 (/)\n' | 847 'remote: Processing changes: new: 1 (/)\n' |
| 845 'remote: Processing changes: new: 1, done\n' | 848 'remote: Processing changes: new: 1, done\n' |
| (...skipping 16 matching lines...) Expand all Loading... |
| 862 return calls | 865 return calls |
| 863 | 866 |
| 864 def _run_gerrit_upload_test( | 867 def _run_gerrit_upload_test( |
| 865 self, | 868 self, |
| 866 upload_args, | 869 upload_args, |
| 867 description, | 870 description, |
| 868 reviewers=None, | 871 reviewers=None, |
| 869 squash=False, | 872 squash=False, |
| 870 expected_upstream_ref='origin/refs/heads/master', | 873 expected_upstream_ref='origin/refs/heads/master', |
| 871 ref_suffix='', | 874 ref_suffix='', |
| 875 notify=False, |
| 872 post_amend_description=None, | 876 post_amend_description=None, |
| 873 issue=None): | 877 issue=None): |
| 874 """Generic gerrit upload test framework.""" | 878 """Generic gerrit upload test framework.""" |
| 875 reviewers = reviewers or [] | 879 reviewers = reviewers or [] |
| 876 self.mock(git_cl.sys, 'stdout', StringIO.StringIO()) | 880 self.mock(git_cl.sys, 'stdout', StringIO.StringIO()) |
| 877 self.mock(git_cl.gerrit_util, "CookiesAuthenticator", | 881 self.mock(git_cl.gerrit_util, "CookiesAuthenticator", |
| 878 CookiesAuthenticatorMockFactory(same_cookie='same_cred')) | 882 CookiesAuthenticatorMockFactory(same_cookie='same_cred')) |
| 879 self.calls = self._gerrit_base_calls(issue=issue) | 883 self.calls = self._gerrit_base_calls(issue=issue) |
| 880 self.calls += self._gerrit_upload_calls( | 884 self.calls += self._gerrit_upload_calls( |
| 881 description, reviewers, squash, | 885 description, reviewers, squash, |
| 882 expected_upstream_ref=expected_upstream_ref, | 886 expected_upstream_ref=expected_upstream_ref, |
| 883 ref_suffix=ref_suffix, | 887 ref_suffix=ref_suffix, notify=notify, |
| 884 post_amend_description=post_amend_description, | 888 post_amend_description=post_amend_description, |
| 885 issue=issue) | 889 issue=issue) |
| 886 # Uncomment when debugging. | 890 # Uncomment when debugging. |
| 887 # print '\n'.join(map(lambda x: '%2i: %s' % x, enumerate(self.calls))) | 891 # print '\n'.join(map(lambda x: '%2i: %s' % x, enumerate(self.calls))) |
| 888 git_cl.main(['upload'] + upload_args) | 892 git_cl.main(['upload'] + upload_args) |
| 889 | 893 |
| 890 def test_gerrit_upload_without_change_id(self): | 894 def test_gerrit_upload_without_change_id(self): |
| 891 self.mock(git_cl, 'DownloadGerritHook', self._mocked_call) | 895 self.mock(git_cl, 'DownloadGerritHook', self._mocked_call) |
| 892 self._run_gerrit_upload_test( | 896 self._run_gerrit_upload_test( |
| 893 [], | 897 [], |
| 894 'desc\n\nBUG=\n', | 898 'desc\n\nBUG=\n', |
| 895 [], | 899 [], |
| 896 post_amend_description='desc\n\nBUG=\n\nChange-Id: Ixxx') | 900 post_amend_description='desc\n\nBUG=\n\nChange-Id: Ixxx') |
| 897 | 901 |
| 898 def test_gerrit_no_reviewer(self): | 902 def test_gerrit_no_reviewer(self): |
| 899 self._run_gerrit_upload_test( | 903 self._run_gerrit_upload_test( |
| 900 [], | 904 [], |
| 901 'desc\n\nBUG=\n\nChange-Id: I123456789\n', | 905 'desc\n\nBUG=\n\nChange-Id: I123456789\n', |
| 902 []) | 906 []) |
| 903 | 907 |
| 904 def test_gerrit_patch_title(self): | 908 def test_gerrit_patch_title(self): |
| 905 self._run_gerrit_upload_test( | 909 self._run_gerrit_upload_test( |
| 906 ['-t', 'Don\'t put under_scores as they become spaces'], | 910 ['-t', 'Don\'t put under_scores as they become spaces'], |
| 907 'desc\n\nBUG=\n\nChange-Id: I123456789', | 911 'desc\n\nBUG=\n\nChange-Id: I123456789', |
| 908 ref_suffix='%m=Don\'t_put_under_scores_as_they_become_spaces') | 912 ref_suffix='%m=Don\'t_put_under_scores_as_they_become_spaces') |
| 909 | 913 |
| 910 def test_gerrit_reviewers_cmd_line(self): | 914 def test_gerrit_reviewers_cmd_line(self): |
| 911 self._run_gerrit_upload_test( | 915 self._run_gerrit_upload_test( |
| 912 ['-r', 'foo@example.com'], | 916 ['-r', 'foo@example.com', '--send-mail'], |
| 913 'desc\n\nBUG=\n\nChange-Id: I123456789', | 917 'desc\n\nBUG=\n\nChange-Id: I123456789', |
| 914 ['foo@example.com']) | 918 ['foo@example.com'], |
| 919 notify=True) |
| 915 | 920 |
| 916 def test_gerrit_reviewer_multiple(self): | 921 def test_gerrit_reviewer_multiple(self): |
| 917 self._run_gerrit_upload_test( | 922 self._run_gerrit_upload_test( |
| 918 [], | 923 [], |
| 919 'desc\nTBR=reviewer@example.com\nBUG=\nR=another@example.com\n\n' | 924 'desc\nTBR=reviewer@example.com\nBUG=\nR=another@example.com\n\n' |
| 920 'Change-Id: 123456789\n', | 925 'Change-Id: 123456789\n', |
| 921 ['reviewer@example.com', 'another@example.com']) | 926 ['reviewer@example.com', 'another@example.com']) |
| 922 | 927 |
| 923 def test_gerrit_upload_squash_first(self): | 928 def test_gerrit_upload_squash_first(self): |
| 924 # Mock Gerrit CL description to indicate the first upload. | 929 # Mock Gerrit CL description to indicate the first upload. |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1447 self.mock(git_cl.sys, 'stdin', StringIO.StringIO('hi \r\n\t there\n\nman')) | 1452 self.mock(git_cl.sys, 'stdin', StringIO.StringIO('hi \r\n\t there\n\nman')) |
| 1448 | 1453 |
| 1449 self.assertEqual(0, git_cl.main(['description', '-n', '-'])) | 1454 self.assertEqual(0, git_cl.main(['description', '-n', '-'])) |
| 1450 self.assertEqual('hi\n\t there\n\nman', ChangelistMock.desc) | 1455 self.assertEqual('hi\n\t there\n\nman', ChangelistMock.desc) |
| 1451 | 1456 |
| 1452 | 1457 |
| 1453 if __name__ == '__main__': | 1458 if __name__ == '__main__': |
| 1454 git_cl.logging.basicConfig( | 1459 git_cl.logging.basicConfig( |
| 1455 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) | 1460 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) |
| 1456 unittest.main() | 1461 unittest.main() |
| OLD | NEW |