| 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()
|
|
|