| 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 |
| 11 import sys | 11 import sys |
| 12 import unittest | 12 import unittest |
| 13 | 13 |
| 14 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | 14 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) |
| 15 | 15 |
| 16 from testing_support.auto_stub import TestCase | 16 from testing_support.auto_stub import TestCase |
| 17 | 17 |
| 18 import git_cl | 18 import git_cl |
| 19 import git_common |
| 19 import subprocess2 | 20 import subprocess2 |
| 20 | 21 |
| 21 | 22 |
| 22 class PresubmitMock(object): | 23 class PresubmitMock(object): |
| 23 def __init__(self, *args, **kwargs): | 24 def __init__(self, *args, **kwargs): |
| 24 self.reviewers = [] | 25 self.reviewers = [] |
| 25 @staticmethod | 26 @staticmethod |
| 26 def should_continue(): | 27 def should_continue(): |
| 27 return True | 28 return True |
| 28 | 29 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 class TestGitCl(TestCase): | 70 class TestGitCl(TestCase): |
| 70 def setUp(self): | 71 def setUp(self): |
| 71 super(TestGitCl, self).setUp() | 72 super(TestGitCl, self).setUp() |
| 72 self.calls = [] | 73 self.calls = [] |
| 73 self._calls_done = 0 | 74 self._calls_done = 0 |
| 74 self.mock(subprocess2, 'call', self._mocked_call) | 75 self.mock(subprocess2, 'call', self._mocked_call) |
| 75 self.mock(subprocess2, 'check_call', self._mocked_call) | 76 self.mock(subprocess2, 'check_call', self._mocked_call) |
| 76 self.mock(subprocess2, 'check_output', self._mocked_call) | 77 self.mock(subprocess2, 'check_output', self._mocked_call) |
| 77 self.mock(subprocess2, 'communicate', self._mocked_call) | 78 self.mock(subprocess2, 'communicate', self._mocked_call) |
| 78 self.mock(subprocess2, 'Popen', self._mocked_call) | 79 self.mock(subprocess2, 'Popen', self._mocked_call) |
| 80 self.mock(git_common, 'get_or_create_merge_base', |
| 81 lambda *a: ( |
| 82 self._mocked_call(['get_or_create_merge_base']+list(a)))) |
| 79 self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '') | 83 self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '') |
| 80 self.mock(git_cl, 'ask_for_data', self._mocked_call) | 84 self.mock(git_cl, 'ask_for_data', self._mocked_call) |
| 81 self.mock(git_cl.breakpad, 'post', self._mocked_call) | 85 self.mock(git_cl.breakpad, 'post', self._mocked_call) |
| 82 self.mock(git_cl.breakpad, 'SendStack', self._mocked_call) | 86 self.mock(git_cl.breakpad, 'SendStack', self._mocked_call) |
| 83 self.mock(git_cl.presubmit_support, 'DoPresubmitChecks', PresubmitMock) | 87 self.mock(git_cl.presubmit_support, 'DoPresubmitChecks', PresubmitMock) |
| 84 self.mock(git_cl.rietveld, 'Rietveld', RietveldMock) | 88 self.mock(git_cl.rietveld, 'Rietveld', RietveldMock) |
| 85 self.mock(git_cl.rietveld, 'CachingRietveld', RietveldMock) | 89 self.mock(git_cl.rietveld, 'CachingRietveld', RietveldMock) |
| 86 self.mock(git_cl.upload, 'RealMain', self.fail) | 90 self.mock(git_cl.upload, 'RealMain', self.fail) |
| 87 self.mock(git_cl.watchlists, 'Watchlists', WatchlistsMock) | 91 self.mock(git_cl.watchlists, 'Watchlists', WatchlistsMock) |
| 88 # It's important to reset settings to not have inter-tests interference. | 92 # It's important to reset settings to not have inter-tests interference. |
| 89 git_cl.settings = None | 93 git_cl.settings = None |
| 90 | 94 |
| 91 def tearDown(self): | 95 def tearDown(self): |
| 92 if not self.has_failed(): | 96 if not self.has_failed(): |
| 93 self.assertEquals([], self.calls) | 97 self.assertEquals([], self.calls) |
| 94 super(TestGitCl, self).tearDown() | 98 super(TestGitCl, self).tearDown() |
| 95 | 99 |
| 96 def _mocked_call(self, *args, **kwargs): | 100 def _mocked_call(self, *args, **_kwargs): |
| 97 self.assertTrue( | 101 self.assertTrue( |
| 98 self.calls, | 102 self.calls, |
| 99 '@%d Expected: <Missing> Actual: %r' % (self._calls_done, args)) | 103 '@%d Expected: <Missing> Actual: %r' % (self._calls_done, args)) |
| 100 expected_args, result = self.calls.pop(0) | 104 expected_args, result = self.calls.pop(0) |
| 101 # Also logs otherwise it could get caught in a try/finally and be hard to | 105 # Also logs otherwise it could get caught in a try/finally and be hard to |
| 102 # diagnose. | 106 # diagnose. |
| 103 if expected_args != args: | 107 if expected_args != args: |
| 104 msg = '@%d Expected: %r Actual: %r' % ( | 108 msg = '@%d Expected: %r Actual: %r' % ( |
| 105 self._calls_done, expected_args, args) | 109 self._calls_done, expected_args, args) |
| 106 git_cl.logging.error(msg) | 110 git_cl.logging.error(msg) |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 'codereview.example.com'), | 155 'codereview.example.com'), |
| 152 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 156 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
| 153 similarity_call, | 157 similarity_call, |
| 154 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 158 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
| 155 find_copies_call, | 159 find_copies_call, |
| 156 ((['git', 'update-index', '--refresh', '-q'],), ''), | 160 ((['git', 'update-index', '--refresh', '-q'],), ''), |
| 157 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), | 161 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), |
| 158 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 162 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
| 159 ((['git', 'config', 'branch.master.merge'],), 'master'), | 163 ((['git', 'config', 'branch.master.merge'],), 'master'), |
| 160 ((['git', 'config', 'branch.master.remote'],), 'origin'), | 164 ((['git', 'config', 'branch.master.remote'],), 'origin'), |
| 161 ((['git', 'merge-base', 'master', 'HEAD'],), | 165 ((['get_or_create_merge_base', 'master', 'master'],), |
| 162 'fake_ancestor_sha'), | 166 'fake_ancestor_sha'), |
| 163 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ | 167 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
| 164 ((['git', 'rev-parse', '--show-cdup'],), ''), | 168 ((['git', 'rev-parse', '--show-cdup'],), ''), |
| 165 ((['git', 'rev-parse', 'HEAD'],), '12345'), | 169 ((['git', 'rev-parse', 'HEAD'],), '12345'), |
| 166 ((['git', 'diff', '--name-status', '--no-renames', '-r', | 170 ((['git', 'diff', '--name-status', '--no-renames', '-r', |
| 167 'fake_ancestor_sha...', '.'],), | 171 'fake_ancestor_sha...', '.'],), |
| 168 'M\t.gitignore\n'), | 172 'M\t.gitignore\n'), |
| 169 ((['git', 'config', 'branch.master.rietveldissue'],), ''), | 173 ((['git', 'config', 'branch.master.rietveldissue'],), ''), |
| 170 ((['git', 'config', 'branch.master.rietveldpatchset'],), | 174 ((['git', 'config', 'branch.master.rietveldpatchset'],), |
| 171 ''), | 175 ''), |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 ((['git', 'config', '--int', '--get', | 535 ((['git', 'config', '--int', '--get', |
| 532 'branch.master.git-cl-similarity'],), ''), | 536 'branch.master.git-cl-similarity'],), ''), |
| 533 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 537 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
| 534 ((['git', 'config', '--int', '--get', | 538 ((['git', 'config', '--int', '--get', |
| 535 'branch.master.git-find-copies'],), ''), | 539 'branch.master.git-find-copies'],), ''), |
| 536 ((['git', 'update-index', '--refresh', '-q'],), ''), | 540 ((['git', 'update-index', '--refresh', '-q'],), ''), |
| 537 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), | 541 ((['git', 'diff-index', '--name-status', 'HEAD'],), ''), |
| 538 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), | 542 ((['git', 'symbolic-ref', 'HEAD'],), 'master'), |
| 539 ((['git', 'config', 'branch.master.merge'],), 'master'), | 543 ((['git', 'config', 'branch.master.merge'],), 'master'), |
| 540 ((['git', 'config', 'branch.master.remote'],), 'origin'), | 544 ((['git', 'config', 'branch.master.remote'],), 'origin'), |
| 541 ((['git', | 545 ((['get_or_create_merge_base', 'master', 'master'],), |
| 542 'merge-base', 'master', 'HEAD'],), 'fake_ancestor_sha'), | 546 'fake_ancestor_sha'), |
| 543 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ | 547 ] + cls._git_sanity_checks('fake_ancestor_sha', 'master') + [ |
| 544 ((['git', 'rev-parse', '--show-cdup'],), ''), | 548 ((['git', 'rev-parse', '--show-cdup'],), ''), |
| 545 ((['git', 'rev-parse', 'HEAD'],), '12345'), | 549 ((['git', 'rev-parse', 'HEAD'],), '12345'), |
| 546 ((['git', | 550 ((['git', |
| 547 'diff', '--name-status', '--no-renames', '-r', | 551 'diff', '--name-status', '--no-renames', '-r', |
| 548 'fake_ancestor_sha...', '.'],), | 552 'fake_ancestor_sha...', '.'],), |
| 549 'M\t.gitignore\n'), | 553 'M\t.gitignore\n'), |
| 550 ((['git', 'config', 'branch.master.rietveldissue'],), ''), | 554 ((['git', 'config', 'branch.master.rietveldissue'],), ''), |
| 551 ((['git', | 555 ((['git', |
| 552 'config', 'branch.master.rietveldpatchset'],), ''), | 556 'config', 'branch.master.rietveldpatchset'],), ''), |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 obj = git_cl.ChangeDescription(orig) | 741 obj = git_cl.ChangeDescription(orig) |
| 738 obj.update_reviewers(reviewers) | 742 obj.update_reviewers(reviewers) |
| 739 actual.append(obj.description) | 743 actual.append(obj.description) |
| 740 self.assertEqual(expected, actual) | 744 self.assertEqual(expected, actual) |
| 741 | 745 |
| 742 | 746 |
| 743 if __name__ == '__main__': | 747 if __name__ == '__main__': |
| 744 git_cl.logging.basicConfig( | 748 git_cl.logging.basicConfig( |
| 745 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) | 749 level=git_cl.logging.DEBUG if '-v' in sys.argv else git_cl.logging.ERROR) |
| 746 unittest.main() | 750 unittest.main() |
| OLD | NEW |