Index: tests/presubmit_unittest.py |
diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py |
index 8f39b39b94c31959f3bb832a035273b5aa94ba8c..1d390bd8dfad296413dfb996708ad8787fa70809 100755 |
--- a/tests/presubmit_unittest.py |
+++ b/tests/presubmit_unittest.py |
@@ -138,7 +138,7 @@ class PresubmitUnittest(PresubmitTestsBase): |
'GetTrySlavesExecuter', 'GitAffectedFile', 'GitChange', |
'InputApi', 'ListRelevantPresubmitFiles', 'Main', |
'NotImplementedException', 'OutputApi', 'ParseFiles', |
- 'PresubmitExecuter', 'PromptYesNo', 'ScanSubDirs', |
+ 'PresubmitExecuter', 'PresubmitOutput', 'ScanSubDirs', |
'SvnAffectedFile', 'SvnChange', 'cPickle', 'cStringIO', |
'exceptions', 'fnmatch', 'gclient_utils', 'glob', 'json', |
'logging', 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle', |
@@ -411,14 +411,14 @@ class PresubmitUnittest(PresubmitTestsBase): |
presubmit.random.randint(0, 4).AndReturn(1) |
self.mox.ReplayAll() |
- output = StringIO.StringIO() |
input_buf = StringIO.StringIO('y\n') |
change = presubmit.Change('mychange', '\n'.join(description_lines), |
self.fake_root_dir, files, 0, 0) |
- self.failIf(presubmit.DoPresubmitChecks( |
- change, False, True, output, input_buf, None, False)) |
+ output = presubmit.DoPresubmitChecks( |
+ change, False, True, None, input_buf, None, False) |
+ self.failIf(output.should_continue()) |
self.assertEqual(output.getvalue().count('!!'), 2) |
- self.checkstdout('Running presubmit hooks...\n') |
+ self.assertEqual(output.getvalue().count('Running presubmit hooks...\n'), 1) |
def testDoPresubmitChecksPromptsAfterWarnings(self): |
join = presubmit.os.path.join |
@@ -444,20 +444,20 @@ class PresubmitUnittest(PresubmitTestsBase): |
presubmit.random.randint(0, 4).AndReturn(1) |
self.mox.ReplayAll() |
- output = StringIO.StringIO() |
input_buf = StringIO.StringIO('n\n') # say no to the warning |
change = presubmit.Change('mychange', '\n'.join(description_lines), |
self.fake_root_dir, files, 0, 0) |
- self.failIf(presubmit.DoPresubmitChecks( |
- change, False, True, output, input_buf, None, True)) |
+ output = presubmit.DoPresubmitChecks( |
+ change, False, True, None, input_buf, None, True) |
+ self.failIf(output.should_continue()) |
self.assertEqual(output.getvalue().count('??'), 2) |
- output = StringIO.StringIO() |
input_buf = StringIO.StringIO('y\n') # say yes to the warning |
- self.failUnless(presubmit.DoPresubmitChecks( |
- change, False, True, output, input_buf, None, True)) |
+ output = presubmit.DoPresubmitChecks( |
+ change, False, True, None, input_buf, None, True) |
+ self.failUnless(output.should_continue()) |
self.assertEquals(output.getvalue().count('??'), 2) |
- self.checkstdout('Running presubmit hooks...\nRunning presubmit hooks...\n') |
+ self.assertEqual(output.getvalue().count('Running presubmit hooks...\n'), 1) |
def testDoPresubmitChecksNoWarningPromptIfErrors(self): |
join = presubmit.os.path.join |
@@ -483,16 +483,14 @@ class PresubmitUnittest(PresubmitTestsBase): |
presubmit.random.randint(0, 4).AndReturn(1) |
self.mox.ReplayAll() |
- output = StringIO.StringIO() |
- input_buf = StringIO.StringIO() # should be unused |
change = presubmit.Change('mychange', '\n'.join(description_lines), |
self.fake_root_dir, files, 0, 0) |
- self.failIf(presubmit.DoPresubmitChecks( |
- change, False, True, output, input_buf, None, False)) |
+ output = presubmit.DoPresubmitChecks(change, False, True, None, None, |
+ None, False) |
self.assertEqual(output.getvalue().count('??'), 2) |
self.assertEqual(output.getvalue().count('XX!!XX'), 2) |
self.assertEqual(output.getvalue().count('(y/N)'), 0) |
- self.checkstdout('Running presubmit hooks...\n') |
+ self.assertEqual(output.getvalue().count('Running presubmit hooks...\n'), 1) |
def testDoDefaultPresubmitChecksAndFeedback(self): |
join = presubmit.os.path.join |
@@ -519,20 +517,20 @@ def CheckChangeOnCommit(input_api, output_api): |
presubmit.random.randint(0, 4).AndReturn(0) |
self.mox.ReplayAll() |
- output = StringIO.StringIO() |
input_buf = StringIO.StringIO('y\n') |
# Always fail. |
change = presubmit.Change('mychange', '\n'.join(description_lines), |
self.fake_root_dir, files, 0, 0) |
- self.failIf(presubmit.DoPresubmitChecks( |
- change, False, True, output, input_buf, DEFAULT_SCRIPT, False)) |
- text = ('Warning, no presubmit.py found.\n' |
+ output = presubmit.DoPresubmitChecks( |
+ change, False, True, None, input_buf, DEFAULT_SCRIPT, False) |
+ self.failIf(output.should_continue()) |
+ text = ('Running presubmit hooks...\n' |
+ 'Warning, no presubmit.py found.\n' |
'Running default presubmit script.\n' |
'** Presubmit ERRORS **\n!!\n\n' |
'Was the presubmit check useful? Please send feedback & hate mail ' |
'to maruel@chromium.org!\n') |
self.assertEquals(output.getvalue(), text) |
- self.checkstdout('Running presubmit hooks...\n') |
def testDirectoryHandling(self): |
files = [ |
@@ -600,11 +598,11 @@ def CheckChangeOnCommit(input_api, output_api): |
self.failUnless(presubmit.DoPresubmitChecks( |
change, False, True, output, input_buf, DEFAULT_SCRIPT, False)) |
self.assertEquals(output.getvalue(), |
- ('Warning, no presubmit.py found.\n' |
+ ('Running presubmit hooks...\n' |
+ 'Warning, no presubmit.py found.\n' |
'Running default presubmit script.\n' |
'** Presubmit Messages **\n' |
'http://tracker.com/42\n\n')) |
- self.checkstdout('Running presubmit hooks...\n') |
def testGetTrySlavesExecuter(self): |
self.mox.ReplayAll() |
@@ -677,10 +675,13 @@ def CheckChangeOnCommit(input_api, output_api): |
['git', 'rev-parse', '--show-cdup'], |
cwd=self.fake_root_dir, |
stdout=presubmit.subprocess.PIPE).AndReturn(1) |
+ output = self.mox.CreateMock(presubmit.PresubmitOutput) |
+ output.should_continue().AndReturn(False) |
+ |
presubmit.DoPresubmitChecks(mox.IgnoreArg(), False, False, |
mox.IgnoreArg(), |
mox.IgnoreArg(), |
- None, False).AndReturn(False) |
+ None, False).AndReturn(output) |
self.mox.ReplayAll() |
self.assertEquals(True, |
@@ -1046,7 +1047,7 @@ class OuputApiUnittest(PresubmitTestsBase): |
def testMembersChanged(self): |
self.mox.ReplayAll() |
members = [ |
- 'MailTextResult', 'PresubmitAddText', 'PresubmitError', |
+ 'MailTextResult', 'PresubmitAddReviewers', 'PresubmitError', |
'PresubmitNotifyResult', 'PresubmitPromptWarning', 'PresubmitResult', |
] |
# If this test fails, you should add the relevant test. |
@@ -1054,57 +1055,58 @@ class OuputApiUnittest(PresubmitTestsBase): |
def testOutputApiBasics(self): |
self.mox.ReplayAll() |
- self.failUnless(presubmit.OutputApi.PresubmitError('').IsFatal()) |
- self.failIf(presubmit.OutputApi.PresubmitError('').ShouldPrompt()) |
+ self.failUnless(presubmit.OutputApi.PresubmitError('').fatal) |
+ self.failIf(presubmit.OutputApi.PresubmitError('').should_prompt) |
- self.failIf(presubmit.OutputApi.PresubmitPromptWarning('').IsFatal()) |
+ self.failIf(presubmit.OutputApi.PresubmitPromptWarning('').fatal) |
self.failUnless( |
- presubmit.OutputApi.PresubmitPromptWarning('').ShouldPrompt()) |
+ presubmit.OutputApi.PresubmitPromptWarning('').should_prompt) |
- self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').IsFatal()) |
- self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').ShouldPrompt()) |
+ self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').fatal) |
+ self.failIf(presubmit.OutputApi.PresubmitNotifyResult('').should_prompt) |
- self.failIf(presubmit.OutputApi.PresubmitAddText('foo').IsFatal()) |
- self.failIf(presubmit.OutputApi.PresubmitAddText('foo').ShouldPrompt()) |
+ self.failIf(presubmit.OutputApi.PresubmitAddReviewers( |
+ ['foo']).fatal) |
+ self.failIf(presubmit.OutputApi.PresubmitAddReviewers( |
+ ['foo']).should_prompt) |
# TODO(joi) Test MailTextResult once implemented. |
def testOutputApiHandling(self): |
self.mox.ReplayAll() |
- output = StringIO.StringIO() |
- unused_input = StringIO.StringIO() |
- added_text = presubmit.OutputApi.PresubmitAddText('R=ben@example.com') |
- self.failUnless(added_text._Handle(output, unused_input)) |
- self.failUnlessEqual(output.getvalue(), 'ADD: R=ben@example.com\n') |
+ output = presubmit.PresubmitOutput() |
+ presubmit.OutputApi.PresubmitAddReviewers( |
+ ['ben@example.com']).handle(output) |
+ self.failUnless(output.should_continue()) |
+ self.failUnlessEqual(output.reviewers, ['ben@example.com']) |
- output = StringIO.StringIO() |
- unused_input = StringIO.StringIO() |
- error = presubmit.OutputApi.PresubmitError('!!!') |
- self.failIf(error._Handle(output, unused_input)) |
+ output = presubmit.PresubmitOutput() |
+ presubmit.OutputApi.PresubmitError('!!!').handle(output) |
+ self.failIf(output.should_continue()) |
self.failUnless(output.getvalue().count('!!!')) |
- output = StringIO.StringIO() |
- notify = presubmit.OutputApi.PresubmitNotifyResult('?see?') |
- self.failUnless(notify._Handle(output, unused_input)) |
+ output = presubmit.PresubmitOutput() |
+ presubmit.OutputApi.PresubmitNotifyResult('?see?').handle(output) |
+ self.failUnless(output.should_continue()) |
self.failUnless(output.getvalue().count('?see?')) |
- output = StringIO.StringIO() |
- input_buf = StringIO.StringIO('y') |
- warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
- self.failUnless(warning._Handle(output, input_buf)) |
+ output = presubmit.PresubmitOutput(input_stream=StringIO.StringIO('y')) |
+ presubmit.OutputApi.PresubmitPromptWarning('???').handle(output) |
+ output.prompt_yes_no('prompt: ') |
+ self.failUnless(output.should_continue()) |
self.failUnless(output.getvalue().count('???')) |
- output = StringIO.StringIO() |
- input_buf = StringIO.StringIO('n') |
- warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
- self.failIf(warning._Handle(output, input_buf)) |
+ output = presubmit.PresubmitOutput(input_stream=StringIO.StringIO('y')) |
+ presubmit.OutputApi.PresubmitPromptWarning('???').handle(output) |
+ output.prompt_yes_no('prompt: ') |
+ self.failUnless(output.should_continue()) |
self.failUnless(output.getvalue().count('???')) |
- output = StringIO.StringIO() |
- input_buf = StringIO.StringIO('\n') |
- warning = presubmit.OutputApi.PresubmitPromptWarning('???') |
- self.failIf(warning._Handle(output, input_buf)) |
+ output = presubmit.PresubmitOutput(input_stream=StringIO.StringIO('\n')) |
+ presubmit.OutputApi.PresubmitPromptWarning('???').handle(output) |
+ output.prompt_yes_no('prompt: ') |
+ self.failIf(output.should_continue()) |
self.failUnless(output.getvalue().count('???')) |
@@ -1865,7 +1867,7 @@ mac|success|blew |
def OwnersTest(self, is_committing, tbr=False, change_tags=None, |
suggested_reviewers=None, approvers=None, |
- uncovered_files=None, expected_results=None): |
+ uncovered_files=None, expected_reviewers=None, expected_output=''): |
affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) |
affected_file.LocalPath().AndReturn('foo.cc') |
change = self.mox.CreateMock(presubmit.Change) |
@@ -1896,46 +1898,44 @@ mac|success|blew |
fake_db.reviewers_for(set(['foo.cc'])).AndReturn(suggested_reviewers) |
self.mox.ReplayAll() |
+ output = presubmit.PresubmitOutput() |
results = presubmit_canned_checks.CheckOwners(input_api, |
presubmit.OutputApi) |
- self.assertEquals(len(results), len(expected_results)) |
- if results and expected_results: |
- output = StringIO.StringIO() |
- unused_input = StringIO.StringIO() |
- results[0]._Handle(output, unused_input) |
- self.assertEquals(output.getvalue(), expected_results[0]) |
+ if results: |
+ results[0].handle(output) |
+ if expected_reviewers is not None: |
+ self.assertEquals(output.reviewers, expected_reviewers) |
+ self.assertEquals(output.getvalue(), expected_output) |
def testCannedCheckOwners_WithReviewer(self): |
- self.OwnersTest(is_committing=False, change_tags={'R': 'ben@example.com'}, |
- expected_results=[]) |
+ self.OwnersTest(is_committing=False, change_tags={'R': 'ben@example.com'}) |
self.OwnersTest(is_committing=False, tbr=True, |
- change_tags={'R': 'ben@example.com'}, expected_results=[]) |
+ change_tags={'R': 'ben@example.com'}) |
def testCannedCheckOwners_NoReviewer(self): |
self.OwnersTest(is_committing=False, change_tags={}, |
suggested_reviewers=['ben@example.com'], |
- expected_results=['ADD: R=ben@example.com\n']) |
+ expected_reviewers=['ben@example.com']) |
self.OwnersTest(is_committing=False, tbr=True, change_tags={}, |
suggested_reviewers=['ben@example.com'], |
- expected_results=['ADD: R=ben@example.com\n']) |
+ expected_reviewers=['ben@example.com']) |
def testCannedCheckOwners_CommittingWithoutOwnerLGTM(self): |
self.OwnersTest(is_committing=True, |
approvers=set(), |
uncovered_files=set(['foo.cc']), |
- expected_results=['Missing LGTM from an OWNER for: foo.cc\n']) |
+ expected_output='Missing LGTM from an OWNER for: foo.cc\n') |
def testCannedCheckOwners_CommittingWithLGTMs(self): |
self.OwnersTest(is_committing=True, |
approvers=set(['ben@example.com']), |
- uncovered_files=set(), |
- expected_results=[]) |
+ uncovered_files=set()) |
def testCannedCheckOwners_TBR(self): |
self.OwnersTest(is_committing=True, tbr=True, |
approvers=set(), |
uncovered_files=set(), |
- expected_results=['--tbr was specified, skipping OWNERS check\n']) |
+ expected_output='--tbr was specified, skipping OWNERS check\n') |
if __name__ == '__main__': |
import unittest |