Index: tests/gcl_unittest.py |
=================================================================== |
--- tests/gcl_unittest.py (revision 78602) |
+++ tests/gcl_unittest.py (working copy) |
@@ -34,7 +34,37 @@ |
def tearDown(self): |
gcl.CODEREVIEW_SETTINGS = self.old_review_settings |
+ def fakeChange(self, files=None): |
+ if files == None: |
+ files = [('A', 'aa'), ('M', 'bb')] |
+ change_info = self.mox.CreateMock(gcl.ChangeInfo) |
+ change_info.name = 'naame' |
+ change_info.issue = 1 |
+ change_info.patchset = 0 |
+ change_info.description = 'deescription' |
+ change_info.files = files |
+ change_info.GetFiles = lambda : change_info.files |
+ change_info.GetIssueDescription = lambda : change_info.description |
+ change_info.GetFileNames = lambda : [f[1] for f in change_info.files] |
+ change_info.GetLocalRoot = lambda : 'proout' |
+ change_info.patch = None |
+ change_info.rietveld = 'my_server' |
+ change_info.reviewers = None |
+ change_info._closed = False |
+ change_info._deleted = False |
+ |
+ def Delete(): |
+ change_info._deleted = True |
+ change_info.Delete = Delete |
+ |
+ def CloseIssue(): |
+ change_info._closed = True |
+ change_info.CloseIssue = CloseIssue |
+ |
+ return change_info |
+ |
+ |
class GclUnittest(GclTestsBase): |
"""General gcl.py tests.""" |
def tearDown(self): |
@@ -420,26 +450,14 @@ |
'*** Upload does not submit a try; use gcl try to submit a try. ***\n') |
def testSuggestReviewers(self): |
- change_info = self.mox.CreateMock(gcl.ChangeInfo) |
- change_info.name = 'naame' |
- change_info.issue = 1 |
- change_info.patchset = 0 |
- change_info.description = 'deescription', |
- change_info.files = [('A', 'aa'), ('M', 'bb')] |
- change_info.patch = None |
- change_info.rietveld = 'my_server' |
- change_info.reviewers = None |
- files = [item[1] for item in change_info.files] |
+ change_info = self.fakeChange() |
output = presubmit_support.PresubmitOutput() |
output.reviewers = ['foo@example.com', 'bar@example.com'] |
gcl.DoPresubmitChecks(change_info, False, True).AndReturn(output) |
#gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
gcl.os.getcwd().AndReturn('somewhere') |
- change_info.GetFiles().AndReturn(change_info.files) |
- change_info.GetLocalRoot().AndReturn('proout') |
gcl.os.chdir('proout') |
- change_info.GetFileNames().AndReturn(files) |
- gcl.GenerateDiff(files) |
+ gcl.GenerateDiff(change_info.GetFileNames()) |
gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
'--reviewers=foo@example.com,bar@example.com', |
'--message=\'\'', '--issue=1'], |
@@ -461,6 +479,91 @@ |
'*** Upload does not submit a try; use gcl try to submit a try. ***\n') |
+class CMDCommitUnittest(GclTestsBase): |
+ def mockLoad(self, files=None): |
+ self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') |
+ self.mox.StubOutWithMock(gcl.ChangeInfo, 'Load') |
+ gcl.GetRepositoryRoot().AndReturn(self.fake_root_dir) |
+ change_info = self.fakeChange(files) |
+ gcl.ChangeInfo.Load('naame', self.fake_root_dir, True, True |
+ ).AndReturn(change_info) |
+ return change_info |
+ |
+ def mockPresubmit(self, change_info, fail): |
+ self.mox.StubOutWithMock(gcl, 'OptionallyDoPresubmitChecks') |
+ output = presubmit_support.PresubmitOutput() |
+ if fail: |
+ output.fail() |
+ gcl.OptionallyDoPresubmitChecks(change_info, True, []).AndReturn(output) |
+ |
+ def mockCommit(self, change_info, commit_message, shell_output): |
+ gcl.tempfile.mkstemp(text=True).AndReturn((42, 'commit')) |
+ gcl.os.write(42, commit_message) |
+ gcl.os.close(42) |
+ gcl.tempfile.mkstemp(text=True).AndReturn((43, 'files')) |
+ gcl.os.write(43, '\n'.join(change_info.GetFileNames())) |
+ gcl.os.close(43) |
+ |
+ gcl.os.getcwd().AndReturn('prev') |
+ gcl.os.chdir(change_info.GetLocalRoot()) |
+ gcl.RunShell(['svn', 'commit', '--file=commit', '--targets=files'], |
+ True).AndReturn(shell_output) |
+ if 'Committed' in shell_output: |
+ self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') |
+ gcl.GetCodeReviewSetting('VIEW_VC').AndReturn('http://view/') |
+ |
+ gcl.os.remove('commit') |
+ gcl.os.remove('files') |
+ gcl.os.chdir('prev') |
+ |
+ def testPresubmitEmpty(self): |
+ self.mockLoad(files=[]) |
+ self.mox.ReplayAll() |
+ |
+ retval = gcl.CMDcommit(['naame']) |
+ |
+ self.assertEquals(retval, 1) |
+ |
+ def testPresubmitFails(self): |
+ change_info = self.mockLoad() |
+ self.mockPresubmit(change_info, fail=True) |
+ self.mox.ReplayAll() |
+ |
+ retval = gcl.CMDcommit(['naame']) |
+ |
+ self.assertEquals(retval, 1) |
+ |
+ def testPresubmitSucceeds(self): |
+ change_info = self.mockLoad() |
+ self.mockPresubmit(change_info, fail=False) |
+ self.mockCommit(change_info, 'deescription\nReview URL: http://my_server/1', |
+ '') |
+ |
+ self.mox.ReplayAll() |
+ |
+ retval = gcl.CMDcommit(['naame']) |
+ |
+ self.assertEquals(retval, 0) |
+ self.assertEquals(change_info.description, 'deescription') |
+ self.assertFalse(change_info._deleted) |
+ self.assertFalse(change_info._closed) |
+ |
+ def testPresubmitSucceedsWithCommittedMessage(self): |
+ change_info = self.mockLoad() |
+ self.mockPresubmit(change_info, fail=False) |
+ self.mockCommit(change_info, 'deescription\nReview URL: http://my_server/1', |
+ '\nCommitted revision 12345') |
+ |
+ self.mox.ReplayAll() |
+ |
+ retval = gcl.CMDcommit(['naame']) |
+ self.assertEquals(retval, 0) |
+ self.assertEquals(change_info.description, |
+ 'deescription\n\nCommitted: http://view/12345') |
+ self.assertTrue(change_info._deleted) |
+ self.assertTrue(change_info._closed) |
+ |
+ |
if __name__ == '__main__': |
import unittest |
unittest.main() |