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

Unified Diff: tests/git_cl_test.py

Issue 9178019: Overhaul breakpad to optionally disable output. Add git-cl dcommit unit test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 8 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « git_cl.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/git_cl_test.py
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index 7d32648601d2cb51c0cb71cf1098d26fdc6c1b11..8b46eba0a52717412185ac32cb28929bbd9eb89a 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -18,49 +18,47 @@ import git_cl
import subprocess2
+class PresubmitMock(object):
+ def __init__(self, *args, **kwargs):
+ self.reviewers = []
+ @staticmethod
+ def should_continue():
+ return True
+
+
+class RietveldMock(object):
+ def __init__(self, *args, **kwargs):
+ pass
+ @staticmethod
+ def get_description(issue):
+ return 'Issue: %d' % issue
+
+
+class WatchlistsMock(object):
+ def __init__(self, _):
+ pass
+ @staticmethod
+ def GetWatchersForPaths(_):
+ return ['joe@example.com']
+
+
class TestGitCl(TestCase):
def setUp(self):
super(TestGitCl, self).setUp()
self.calls = []
self._calls_done = 0
- def mock_call(args, **kwargs):
- expected_args, result = self.calls.pop(0)
- self.assertEquals(
- expected_args,
- args,
- '@%d Expected: %r Actual: %r' % (
- self._calls_done, expected_args, args))
- self._calls_done += 1
- return result
- self.mock(subprocess2, 'call', mock_call)
- self.mock(subprocess2, 'check_call', mock_call)
- self.mock(subprocess2, 'check_output', mock_call)
- self.mock(subprocess2, 'communicate', mock_call)
- self.mock(subprocess2, 'Popen', mock_call)
-
+ self.mock(subprocess2, 'call', self._mocked_call)
+ self.mock(subprocess2, 'check_call', self._mocked_call)
+ self.mock(subprocess2, 'check_output', self._mocked_call)
+ self.mock(subprocess2, 'communicate', self._mocked_call)
+ self.mock(subprocess2, 'Popen', self._mocked_call)
self.mock(git_cl, 'FindCodereviewSettingsFile', lambda: '')
-
- class PresubmitMock(object):
- def __init__(self, *args, **kwargs):
- self.reviewers = []
- @staticmethod
- def should_continue():
- return True
+ self.mock(git_cl, 'ask_for_data', self._mocked_call)
+ self.mock(git_cl.breakpad, 'post', self._mocked_call)
+ self.mock(git_cl.breakpad, 'SendStack', self._mocked_call)
self.mock(git_cl.presubmit_support, 'DoPresubmitChecks', PresubmitMock)
-
- class RietveldMock(object):
- def __init__(self, *args, **kwargs):
- pass
self.mock(git_cl.rietveld, 'Rietveld', RietveldMock)
-
self.mock(git_cl.upload, 'RealMain', self.fail)
-
- class WatchlistsMock(object):
- def __init__(self, _):
- pass
- @staticmethod
- def GetWatchersForPaths(_):
- return ['joe@example.com']
self.mock(git_cl.watchlists, 'Watchlists', WatchlistsMock)
# It's important to reset settings to not have inter-tests interference.
git_cl.settings = None
@@ -70,6 +68,19 @@ class TestGitCl(TestCase):
self.assertEquals([], self.calls)
super(TestGitCl, self).tearDown()
+ def _mocked_call(self, *args, **kwargs):
+ self.assertTrue(
+ self.calls,
+ '@%d Expected: <Missing> Actual: %r' % (self._calls_done, args))
+ expected_args, result = self.calls.pop(0)
+ self.assertEquals(
+ expected_args,
+ args,
+ '@%d Expected: %r Actual: %r' % (
+ self._calls_done, expected_args, args))
+ self._calls_done += 1
+ return result
+
@classmethod
def _upload_calls(cls):
return cls._git_base_calls() + cls._git_upload_calls()
@@ -77,38 +88,116 @@ class TestGitCl(TestCase):
@staticmethod
def _git_base_calls():
return [
- (['git', 'update-index', '--refresh', '-q'], ''),
- (['git', 'diff-index', 'HEAD'], ''),
- (['git', 'config', 'rietveld.server'], 'codereview.example.com'),
- (['git', 'symbolic-ref', 'HEAD'], 'master'),
- (['git', 'config', 'branch.master.merge'], 'master'),
- (['git', 'config', 'branch.master.remote'], 'origin'),
- (['git', 'rev-parse', '--show-cdup'], ''),
- (['git', 'rev-parse', 'HEAD'], '12345'),
- (['git', 'diff', '--name-status', '-r', 'master...', '.'],
- 'M\t.gitignore\n'),
- (['git', 'rev-parse', '--git-dir'], '.git'),
- (['git', 'config', 'branch.master.rietveldissue'], ''),
- (['git', 'config', 'branch.master.rietveldpatchset'], ''),
- (['git', 'log', '--pretty=format:%s%n%n%b', 'master...'], 'foo'),
- (['git', 'config', 'user.email'], 'me@example.com'),
- (['git', 'diff', '--no-ext-diff', '--stat', '-M', 'master...'], '+dat'),
- (['git', 'log', '--pretty=format:%s\n\n%b', 'master..'], 'desc\n'),
+ ((['git', 'update-index', '--refresh', '-q'],), ''),
+ ((['git', 'diff-index', 'HEAD'],), ''),
+ ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'),
+ ((['git', 'symbolic-ref', 'HEAD'],), 'master'),
+ ((['git', 'config', 'branch.master.merge'],), 'master'),
+ ((['git', 'config', 'branch.master.remote'],), 'origin'),
+ ((['git', 'rev-parse', '--show-cdup'],), ''),
+ ((['git', 'rev-parse', 'HEAD'],), '12345'),
+ ((['git', 'diff', '--name-status', '-r', 'master...', '.'],),
+ 'M\t.gitignore\n'),
+ ((['git', 'rev-parse', '--git-dir'],), '.git'),
+ ((['git', 'config', 'branch.master.rietveldissue'],), ''),
+ ((['git', 'config', 'branch.master.rietveldpatchset'],), ''),
+ ((['git', 'log', '--pretty=format:%s%n%n%b', 'master...'],), 'foo'),
+ ((['git', 'config', 'user.email'],), 'me@example.com'),
+ ((['git', 'diff', '--no-ext-diff', '--stat', '-M', 'master...'],),
+ '+dat'),
+ ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],), 'desc\n'),
]
@staticmethod
def _git_upload_calls():
return [
- (['git', 'config', 'rietveld.cc'], ''),
- (['git', 'config', '--get-regexp', '^svn-remote\\.'], (('', None), 0)),
- (['git', 'rev-parse', '--show-cdup'], ''),
- (['git', 'svn', 'info'], ''),
- (['git', 'config', 'branch.master.rietveldissue', '1'], ''),
- (['git', 'config', 'branch.master.rietveldserver',
- 'https://codereview.example.com'], ''),
- (['git', 'config', 'branch.master.rietveldpatchset', '2'], ''),
+ ((['git', 'config', 'rietveld.cc'],), ''),
+ ((['git', 'config', '--get-regexp', '^svn-remote\\.'],),
+ (('', None), 0)),
+ ((['git', 'rev-parse', '--show-cdup'],), ''),
+ ((['git', 'svn', 'info'],), ''),
+ ((['git', 'config', 'branch.master.rietveldissue', '1'],), ''),
+ ((['git', 'config', 'branch.master.rietveldserver',
+ 'https://codereview.example.com'],), ''),
+ ((['git', 'config', 'branch.master.rietveldpatchset', '2'],), ''),
]
+ @classmethod
+ def _dcommit_calls_1(cls):
+ return [
+ ((['git', 'config', '--get-regexp', '^svn-remote\\.'],),
+ ((('svn-remote.svn.url svn://svn.chromium.org/chrome\n'
+ 'svn-remote.svn.fetch trunk/src:refs/remotes/origin/master'),
+ None),
+ 0)),
+ ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'),
+ ((['git', 'symbolic-ref', 'HEAD'],), 'refs/heads/working'),
+ ((['git', 'config', 'branch.working.merge'],), 'refs/heads/master'),
+ ((['git', 'config', 'branch.working.remote'],), 'origin'),
+ ((['git', 'update-index', '--refresh', '-q'],), ''),
+ ((['git', 'diff-index', 'HEAD'],), ''),
+ ((['git', 'rev-list', '^refs/heads/working',
+ 'refs/remotes/origin/master'],),
+ ''),
+ ((['git', 'log', '--grep=^git-svn-id:', '-1', '--pretty=format:%H'],),
+ '3fc18b62c4966193eb435baabe2d18a3810ec82e'),
+ ((['git', 'rev-list', '^3fc18b62c4966193eb435baabe2d18a3810ec82e',
+ 'refs/remotes/origin/master'],), ''),
+ ]
+
+ @classmethod
+ def _dcommit_calls_normal(cls):
+ return [
+ ((['git', 'rev-parse', '--show-cdup'],), ''),
+ ((['git', 'rev-parse', 'HEAD'],),
+ '00ff397798ea57439712ed7e04ab96e13969ef40'),
+ ((['git', 'diff', '--name-status', '-r', 'refs/remotes/origin/master...',
+ '.'],),
+ 'M\tPRESUBMIT.py'),
+ ((['git', 'rev-parse', '--git-dir'],), '.git'),
+ ((['git', 'config', 'branch.working.rietveldissue'],), '12345'),
+ ((['git', 'config', 'branch.working.rietveldserver'],),
+ 'codereview.example.com'),
+ ((['git', 'config', 'branch.working.rietveldpatchset'],), '31137'),
+ ((['git', 'config', 'user.email'],), 'author@example.com'),
+ ((['git', 'config', 'rietveld.tree-status-url'],), ''),
+ ]
+
+ @classmethod
+ def _dcommit_calls_bypassed(cls):
+ return [
+ ((['git', 'rev-parse', '--git-dir'],), '.git'),
+ ((['git', 'config', 'branch.working.rietveldissue'],), '12345'),
+ ((['git', 'config', 'branch.working.rietveldserver'],),
+ 'codereview.example.com'),
+ (('GitClHooksBypassedCommit',
+ 'Issue https://codereview.example.com/12345 bypassed hook when '
+ 'committing'), None),
+ ]
+
+ @classmethod
+ def _dcommit_calls_3(cls):
+ return [
+ ((['git', 'diff', '--stat', 'refs/remotes/origin/master',
+ 'refs/heads/working'],),
+ (' PRESUBMIT.py | 2 +-\n'
+ ' 1 files changed, 1 insertions(+), 1 deletions(-)\n')),
+ (('About to commit; enter to confirm.',), None),
+ ((['git', 'show-ref', '--quiet', '--verify',
+ 'refs/heads/git-cl-commit'],),
+ (('', None), 0)),
+ ((['git', 'branch', '-D', 'git-cl-commit'],), ''),
+ ((['git', 'rev-parse', '--show-cdup'],), '\n'),
+ ((['git', 'checkout', '-q', '-b', 'git-cl-commit'],), ''),
+ ((['git', 'reset', '--soft', 'refs/remotes/origin/master'],), ''),
+ ((['git', 'commit', '-m',
+ 'Issue: 12345\n\nReview URL: https://codereview.example.com/12345'],),
+ ''),
+ ((['git', 'svn', 'dcommit', '--no-rebase', '--rmdir'],), (('', None), 0)),
+ ((['git', 'checkout', '-q', 'working'],), ''),
+ ((['git', 'branch', '-D', 'git-cl-commit'],), ''),
+ ]
+
@staticmethod
def _cmd_line(description, args):
"""Returns the upload command line passed to upload.RealMain()."""
@@ -217,6 +306,20 @@ class TestGitCl(TestCase):
self.assertEquals(
'Must specify reviewers to send email.\n', mock.buf.getvalue())
+ def test_dcommit(self):
+ self.calls = (
+ self._dcommit_calls_1() +
+ self._dcommit_calls_normal() +
+ self._dcommit_calls_3())
+ git_cl.main(['dcommit'])
+
+ def test_dcommit_bypass_hooks(self):
+ self.calls = (
+ self._dcommit_calls_1() +
+ self._dcommit_calls_bypassed() +
+ self._dcommit_calls_3())
+ git_cl.main(['dcommit', '--bypass-hooks'])
+
if __name__ == '__main__':
unittest.main()
« no previous file with comments | « git_cl.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698