Index: tests/presubmit_unittest.py |
diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py |
index 05e746c579d5060ec9b53178d5617f5540aab93f..00ea0f6128051ff2360a4fb4a246868499c99e19 100755 |
--- a/tests/presubmit_unittest.py |
+++ b/tests/presubmit_unittest.py |
@@ -86,12 +86,6 @@ def CheckChangeOnUpload(input_api, output_api): |
self.mox.StubOutWithMock(presubmit.gcl, 'GetSVNFileProperty') |
self.mox.StubOutWithMock(presubmit.gcl, 'ReadFile') |
- @staticmethod |
- def MakeBasicChange(name, description): |
- ci = presubmit.gcl.ChangeInfo(name=name, description=description) |
- change = presubmit.GclChange(ci) |
- return change |
- |
def compareMembers(self, object, members): |
"""If you add a member, be sure to add the relevant test!""" |
# Skip over members starting with '_' since they are usually not meant to |
@@ -113,7 +107,7 @@ class PresubmitUnittest(PresubmitTestsBase): |
'cPickle', 'cStringIO', 'deprecated', 'exceptions', |
'fnmatch', 'gcl', 'gclient', 'glob', 'marshal', 'normpath', 'optparse', |
'os', 'pickle', 'presubmit_canned_checks', 're', 'subprocess', 'sys', |
- 'tempfile', 'types', 'urllib2', 'warnings', |
+ 'tempfile', 'types', 'unittest', 'urllib2', 'warnings', |
] |
# If this test fails, you should add the relevant test. |
self.compareMembers(presubmit, members) |
@@ -522,7 +516,7 @@ class InputApiUnittest(PresubmitTestsBase): |
'PresubmitLocalPath', 'RightHandSideLines', 'ServerPaths', |
'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', |
'marshal', 'os_path', 'pickle', 'platform', |
- 're', 'subprocess', 'tempfile', 'urllib2', 'version', |
+ 're', 'subprocess', 'tempfile', 'unittest', 'urllib2', 'version', |
] |
# If this test fails, you should add the relevant test. |
self.compareMembers(presubmit.InputApi(None, './.'), members) |
@@ -800,27 +794,22 @@ class AffectedFileUnittest(PresubmitTestsBase): |
class CannedChecksUnittest(PresubmitTestsBase): |
"""Tests presubmit_canned_checks.py.""" |
- class MockInputApi(object): |
- class MockUrllib2(object): |
- class urlopen(object): |
- def __init__(self, url): |
- if url == 'url_to_open': |
- self.result = '1' |
- else: |
- self.result = '0' |
- def read(self): |
- return self.result |
- def close(self): |
- pass |
- def __init__(self, lines=None): |
- self.lines = lines |
- self.basename = lambda x: x |
- self.urllib2 = self.MockUrllib2() |
- self.re = presubmit.re |
- |
- def RightHandSideLines(self): |
- for line in self.lines: |
- yield (presubmit.AffectedFile('bingo', 'M'), 1, line) |
+ |
+ def setUp(self): |
+ PresubmitTestsBase.setUp(self) |
+ self.mox.StubOutWithMock(presubmit_canned_checks, |
+ '_RunPythonUnitTests_LoadTests') |
+ |
+ def MockInputApi(self): |
+ input_api = self.mox.CreateMock(presubmit.InputApi) |
+ input_api.re = presubmit.re |
+ input_api.urllib2 = self.mox.CreateMock(presubmit.urllib2) |
+ input_api.unittest = unittest |
+ return input_api |
+ |
+ def MakeBasicChange(self, name, description): |
+ ci = presubmit.gcl.ChangeInfo(name=name, description=description) |
+ return presubmit.GclChange(ci, self.fake_root_dir) |
def testMembersChanged(self): |
self.mox.ReplayAll() |
@@ -834,120 +823,181 @@ class CannedChecksUnittest(PresubmitTestsBase): |
# If this test fails, you should add the relevant test. |
self.compareMembers(presubmit_canned_checks, members) |
- def testCannedCheckChangeHasBugField(self): |
+ def TestDescription(self, check, description1, description2, error_type): |
+ input_api1 = self.MockInputApi() |
+ input_api1.change = self.MakeBasicChange('foo', 'Foo\n' + description1) |
+ input_api2 = self.MockInputApi() |
+ input_api2.change = self.MakeBasicChange('foo', 'Foo\n' + description2) |
+ self.mox.ReplayAll() |
+ |
+ results1 = check(input_api1, presubmit.OutputApi) |
+ self.assertEquals(results1, []) |
+ results2 = check(input_api2, presubmit.OutputApi) |
+ self.assertEquals(len(results2), 1) |
+ self.assertEquals(results2[0].__class__, error_type) |
+ |
+ def TestContent(self, check, content1, content2, error_type): |
+ input_api1 = self.MockInputApi() |
+ input_api1.change = self.MakeBasicChange('foo', 'Foo\n') |
+ affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) |
+ affected_file.LocalPath().AndReturn('foo.cc') |
+ output1 = [ |
+ (affected_file, 42, 'yo, ' + content1), |
+ (affected_file, 43, 'yer'), |
+ (affected_file, 23, 'ya'), |
+ ] |
+ input_api1.RightHandSideLines().AndReturn(output1) |
+ input_api2 = self.MockInputApi() |
+ input_api2.change = self.MakeBasicChange('foo', 'Foo\n') |
+ output2 = [ |
+ (affected_file, 42, 'yo, ' + content2), |
+ (affected_file, 43, 'yer'), |
+ (affected_file, 23, 'ya'), |
+ ] |
+ input_api2.RightHandSideLines().AndReturn(output2) |
self.mox.ReplayAll() |
- change = self.MakeBasicChange('foo', |
- 'Foo\nBUG=1234') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failIf(presubmit_canned_checks.CheckChangeHasBugField( |
- api, presubmit.OutputApi)) |
- change = self.MakeBasicChange('foo', |
- 'Foo\nNEVERTESTED=did some stuff') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failUnless(presubmit_canned_checks.CheckChangeHasBugField( |
- api, presubmit.OutputApi)) |
+ results1 = check(input_api1, presubmit.OutputApi) |
+ self.assertEquals(results1, []) |
+ results2 = check(input_api2, presubmit.OutputApi) |
+ self.assertEquals(len(results2), 1) |
+ self.assertEquals(results2[0].__class__, error_type) |
- def testCannedCheckChangeHasTestField(self): |
- self.mox.ReplayAll() |
- change = self.MakeBasicChange('foo', |
- 'Foo\nTEST=did some stuff') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failIf(presubmit_canned_checks.CheckChangeHasTestField( |
- api, presubmit.OutputApi)) |
+ def testCannedCheckChangeHasBugField(self): |
+ self.TestDescription(presubmit_canned_checks.CheckChangeHasBugField, |
+ 'BUG=1234', '', |
+ presubmit.OutputApi.PresubmitNotifyResult) |
- change = self.MakeBasicChange('foo', |
- 'Foo\nNOTEST=did some stuff') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failUnless(presubmit_canned_checks.CheckChangeHasTestField( |
- api, presubmit.OutputApi)) |
+ def testCannedCheckChangeHasTestField(self): |
+ self.TestDescription(presubmit_canned_checks.CheckChangeHasTestField, |
+ 'TEST=did some stuff', '', |
+ presubmit.OutputApi.PresubmitNotifyResult) |
def testCannedCheckChangeHasTestedField(self): |
- self.mox.ReplayAll() |
- change = self.MakeBasicChange('foo', |
- 'Foo\nTESTED=did some stuff') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failIf(presubmit_canned_checks.CheckChangeHasTestedField( |
- api, presubmit.OutputApi)) |
- |
- change = self.MakeBasicChange('foo', |
- 'Foo\nNEVERTESTED=did some stuff') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failUnless(presubmit_canned_checks.CheckChangeHasTestedField( |
- api, presubmit.OutputApi)) |
+ self.TestDescription(presubmit_canned_checks.CheckChangeHasTestedField, |
+ 'TESTED=did some stuff', '', |
+ presubmit.OutputApi.PresubmitError) |
def testCannedCheckChangeHasQAField(self): |
- self.mox.ReplayAll() |
- change = self.MakeBasicChange('foo', |
- 'Foo\nQA=test floop feature very well') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failIf(presubmit_canned_checks.CheckChangeHasQaField( |
- api, presubmit.OutputApi)) |
- |
- change = self.MakeBasicChange('foo', |
- 'Foo\nNOTFORQA=test floop feature very well') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failUnless(presubmit_canned_checks.CheckChangeHasQaField( |
- api, presubmit.OutputApi)) |
+ self.TestDescription(presubmit_canned_checks.CheckChangeHasQaField, |
+ 'QA=BSOD your machine', '', |
+ presubmit.OutputApi.PresubmitError) |
def testCannedCheckDoNotSubmitInDescription(self): |
- self.mox.ReplayAll() |
- change = self.MakeBasicChange('foo', 'hello') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failIf(presubmit_canned_checks.CheckDoNotSubmitInDescription( |
- api, presubmit.OutputApi)) |
- |
- change = self.MakeBasicChange('foo', |
- 'DO NOT ' + 'SUBMIT') |
- api = presubmit.InputApi(change, './PRESUBMIT.py') |
- self.failUnless(presubmit_canned_checks.CheckDoNotSubmitInDescription( |
- api, presubmit.OutputApi)) |
+ self.TestDescription(presubmit_canned_checks.CheckDoNotSubmitInDescription, |
+ 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', |
+ presubmit.OutputApi.PresubmitError) |
def testCannedCheckDoNotSubmitInFiles(self): |
- self.mox.ReplayAll() |
- self.failIf(presubmit_canned_checks.CheckDoNotSubmitInFiles( |
- self.MockInputApi(['hello', 'there']), presubmit.OutputApi |
- )) |
- self.failUnless(presubmit_canned_checks.CheckDoNotSubmitInFiles( |
- self.MockInputApi(['hello', 'yo, DO NOT ' + 'SUBMIT']), |
- presubmit.OutputApi)) |
+ self.TestContent(presubmit_canned_checks.CheckDoNotSubmitInFiles, |
+ 'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', |
+ presubmit.OutputApi.PresubmitError) |
def testCannedCheckChangeHasNoTabs(self): |
- self.mox.ReplayAll() |
- self.failIf(presubmit_canned_checks.CheckChangeHasNoTabs( |
- self.MockInputApi(['hello', 'there']), presubmit.OutputApi |
- )) |
- self.failUnless(presubmit_canned_checks.CheckChangeHasNoTabs( |
- self.MockInputApi(['hello', 'there\tit is']), presubmit.OutputApi |
- )) |
+ self.TestContent(presubmit_canned_checks.CheckChangeHasNoTabs, |
+ 'blah blah', 'blah\tblah', |
+ presubmit.OutputApi.PresubmitError) |
def testCannedCheckLongLines(self): |
- self.mox.ReplayAll() |
- self.failIf(presubmit_canned_checks.CheckLongLines( |
- self.MockInputApi(['hello', 'there']), presubmit.OutputApi, 5 |
- )) |
- self.failUnless(presubmit_canned_checks.CheckLongLines( |
- self.MockInputApi(['hello', 'there!']), presubmit.OutputApi, 5 |
- )) |
- |
- def testCannedCheckTreeIsOpen(self): |
- self.mox.ReplayAll() |
- self.failIf(presubmit_canned_checks.CheckTreeIsOpen( |
- self.MockInputApi(), presubmit.OutputApi, url='url_to_open', closed='0' |
- )) |
- self.failUnless(presubmit_canned_checks.CheckTreeIsOpen( |
- self.MockInputApi(), presubmit.OutputApi, url='url_to_closed', closed='0' |
- )) |
+ check = lambda x,y: presubmit_canned_checks.CheckLongLines(x, y, 10) |
+ self.TestContent(check, '', 'blah blah blah', |
+ presubmit.OutputApi.PresubmitPromptWarning) |
+ |
+ def testCannedCheckTreeIsOpenOpen(self): |
+ input_api = self.MockInputApi() |
+ connection = self.mox.CreateMockAnything() |
+ input_api.urllib2.urlopen('url_to_open').AndReturn(connection) |
+ connection.read().AndReturn('1') |
+ connection.close() |
+ self.mox.ReplayAll() |
+ results = presubmit_canned_checks.CheckTreeIsOpen( |
+ input_api, presubmit.OutputApi, url='url_to_open', closed='0') |
+ self.assertEquals(results, []) |
+ |
+ def testCannedCheckTreeIsOpenClosed(self): |
+ input_api = self.MockInputApi() |
+ connection = self.mox.CreateMockAnything() |
+ input_api.urllib2.urlopen('url_to_closed').AndReturn(connection) |
+ connection.read().AndReturn('0') |
+ connection.close() |
+ self.mox.ReplayAll() |
+ results = presubmit_canned_checks.CheckTreeIsOpen( |
+ input_api, presubmit.OutputApi, url='url_to_closed', closed='0') |
+ self.assertEquals(len(results), 1) |
+ self.assertEquals(results[0].__class__, |
+ presubmit.OutputApi.PresubmitError) |
+ |
+ def testRunPythonUnitTests1(self): |
+ input_api = self.MockInputApi() |
+ self.mox.ReplayAll() |
+ results = presubmit_canned_checks.RunPythonUnitTests( |
+ input_api, presubmit.OutputApi, []) |
+ self.assertEquals(results, []) |
+ |
+ def testRunPythonUnitTests2(self): |
+ input_api = self.MockInputApi() |
+ presubmit_canned_checks._RunPythonUnitTests_LoadTests('_non_existent_module' |
+ ).AndRaise(exceptions.ImportError('Blehh')) |
+ self.mox.ReplayAll() |
+ results = presubmit_canned_checks.RunPythonUnitTests( |
+ input_api, presubmit.OutputApi, ['_non_existent_module']) |
+ self.assertEquals(len(results), 1) |
+ self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) |
+ |
+ def testRunPythonUnitTests3(self): |
+ input_api = self.MockInputApi() |
+ test_module = self.mox.CreateMockAnything() |
+ presubmit_canned_checks._RunPythonUnitTests_LoadTests('test_module' |
+ ).AndReturn([]) |
+ self.mox.ReplayAll() |
+ |
+ results = presubmit_canned_checks.RunPythonUnitTests( |
+ input_api, presubmit.OutputApi, ['test_module']) |
+ self.assertEquals(results, []) |
+ |
+ def testRunPythonUnitTests4(self): |
+ input_api = self.MockInputApi() |
+ input_api.unittest = self.mox.CreateMock(unittest) |
+ test = self.mox.CreateMockAnything() |
+ presubmit_canned_checks._RunPythonUnitTests_LoadTests('test_module' |
+ ).AndReturn([test]) |
+ runner = self.mox.CreateMockAnything() |
+ input_api.unittest.TextTestRunner(verbosity=0).AndReturn(runner) |
+ suite = self.mox.CreateMockAnything() |
+ input_api.unittest.TestSuite([test]).AndReturn(suite) |
+ test_result = self.mox.CreateMockAnything() |
+ runner.run(suite).AndReturn(test_result) |
+ test_result.wasSuccessful().AndReturn(False) |
+ test_result.failures = 2 |
+ test_result.errors = 3 |
+ self.mox.ReplayAll() |
+ |
+ results = presubmit_canned_checks.RunPythonUnitTests( |
+ input_api, presubmit.OutputApi, ['test_module']) |
+ self.assertEquals(len(results), 1) |
+ self.assertEquals(results[0].__class__, presubmit.OutputApi.PresubmitError) |
+ |
+ def testRunPythonUnitTests5(self): |
+ input_api = self.MockInputApi() |
+ input_api.unittest = self.mox.CreateMock(unittest) |
+ test = self.mox.CreateMockAnything() |
+ presubmit_canned_checks._RunPythonUnitTests_LoadTests('test_module' |
+ ).AndReturn([test]) |
+ runner = self.mox.CreateMockAnything() |
+ input_api.unittest.TextTestRunner(verbosity=0).AndReturn(runner) |
+ suite = self.mox.CreateMockAnything() |
+ input_api.unittest.TestSuite([test]).AndReturn(suite) |
+ test_result = self.mox.CreateMockAnything() |
+ runner.run(suite).AndReturn(test_result) |
+ test_result.wasSuccessful().AndReturn(True) |
+ test_result.failures = 0 |
+ test_result.errors = 0 |
+ self.mox.ReplayAll() |
+ |
+ results = presubmit_canned_checks.RunPythonUnitTests( |
+ input_api, presubmit.OutputApi, ['test_module']) |
+ self.assertEquals(len(results), 0) |
- def RunPythonUnitTests(self): |
- self.mox.ReplayAll() |
- # TODO(maruel): Add real tests. |
- self.failIf(presubmit_canned_checks.RunPythonUnitTests( |
- self.MockInputApi(), |
- presubmit.OutputApi, [])) |
- self.failUnless(presubmit_canned_checks.RunPythonUnitTests( |
- self.MockInputApi(), |
- presubmit.OutputApi, ['non_existent_module'])) |
if __name__ == '__main__': |
unittest.main() |