| Index: tests/git_cl_test.py
 | 
| ===================================================================
 | 
| --- tests/git_cl_test.py	(revision 120273)
 | 
| +++ tests/git_cl_test.py	(working copy)
 | 
| @@ -88,6 +88,7 @@
 | 
|    @staticmethod
 | 
|    def _git_base_calls():
 | 
|      return [
 | 
| +      ((['git', 'config', 'gerrit.host'],), ''),
 | 
|        ((['git', 'update-index', '--refresh', '-q'],), ''),
 | 
|        ((['git', 'diff-index', 'HEAD'],), ''),
 | 
|        ((['git', 'config', 'rietveld.server'],), 'codereview.example.com'),
 | 
| @@ -321,5 +322,76 @@
 | 
|      git_cl.main(['dcommit', '--bypass-hooks'])
 | 
|  
 | 
|  
 | 
| +  @staticmethod
 | 
| +  def _gerrit_base_calls():
 | 
| +    return [
 | 
| +        ((['git', 'config', 'gerrit.host'],), 'gerrit.example.com'),
 | 
| +        ((['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'),
 | 
| +        ]
 | 
| +
 | 
| +  @staticmethod
 | 
| +  def _gerrit_upload_calls(description, reviewers):
 | 
| +    calls = [
 | 
| +        ((['git', 'log', '--pretty=format:%s\n\n%b', 'master..'],),
 | 
| +         description),
 | 
| +        ((['git', 'config', 'rietveld.cc'],), '')
 | 
| +        ]
 | 
| +    receive_pack = '--receive-pack="git receive-pack '
 | 
| +    receive_pack += '--cc=joe@example.com'  # from watch list
 | 
| +    if reviewers:
 | 
| +      receive_pack += ' '
 | 
| +      receive_pack += ' '.join(['--reviewer=' + email for email in reviewers])
 | 
| +    receive_pack += '"'
 | 
| +    calls += [
 | 
| +        ((['git', 'push', receive_pack, 'origin', 'HEAD:refs/for/master'],),
 | 
| +         '')
 | 
| +        ]
 | 
| +    return calls
 | 
| +
 | 
| +  def _run_gerrit_reviewer_test(
 | 
| +      self,
 | 
| +      upload_args,
 | 
| +      description,
 | 
| +      reviewers):
 | 
| +    """Generic gerrit reviewer test framework."""
 | 
| +    self.calls = self._gerrit_base_calls()
 | 
| +    self.calls += self._gerrit_upload_calls(description, reviewers)
 | 
| +    git_cl.main(['upload'] + upload_args)
 | 
| +
 | 
| +  def test_gerrit_no_reviewer(self):
 | 
| +    self._run_gerrit_reviewer_test(
 | 
| +        [],
 | 
| +        'desc\n\nBUG=\nTEST=\n',
 | 
| +        [])
 | 
| +
 | 
| +  def test_gerrit_reviewers_cmd_line(self):
 | 
| +    self._run_gerrit_reviewer_test(
 | 
| +        ['-r', 'foo@example.com'],
 | 
| +        'desc\n\nBUG=\nTEST=\n',
 | 
| +        ['foo@example.com'])
 | 
| +
 | 
| +  def test_gerrit_reviewer_multiple(self):
 | 
| +    self._run_gerrit_reviewer_test(
 | 
| +        [],
 | 
| +        'desc\nTBR=reviewer@example.com\nBUG=\nR=another@example.com\n',
 | 
| +        ['reviewer@example.com', 'another@example.com'])
 | 
| +
 | 
| +
 | 
|  if __name__ == '__main__':
 | 
|    unittest.main()
 | 
| 
 |