Index: tests/presubmit_unittest.py |
diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py |
index 8135e5f03e120f3d0e6701d6b534aed185306f08..cc5825f421862b5eb6b28a78edee459514de1c25 100755 |
--- a/tests/presubmit_unittest.py |
+++ b/tests/presubmit_unittest.py |
@@ -94,6 +94,12 @@ def CheckChangeOnUpload(input_api, output_api): |
if not x.startswith('_')] |
self.assertEqual(actual_members, sorted(members)) |
+ def MakeBasicChange(self, name, description, root=None): |
+ ci = presubmit.gcl.ChangeInfo(name, 0, 0, description, None) |
+ if root is None: |
+ root = self.fake_root_dir |
+ return presubmit.GclChange(ci, root) |
+ |
class PresubmitUnittest(PresubmitTestsBase): |
"""General presubmit_support.py tests (excluding InputApi and OutputApi).""" |
@@ -519,7 +525,7 @@ class InputApiUnittest(PresubmitTestsBase): |
members = [ |
'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedTextFiles', |
'DepotToLocalPath', 'LocalPaths', 'LocalToDepotPath', |
- 'PresubmitLocalPath', 'RightHandSideLines', 'ServerPaths', |
+ 'PresubmitLocalPath', 'RightHandSideLines', 'ReadFile', 'ServerPaths', |
'basename', 'cPickle', 'cStringIO', 'canned_checks', 'change', |
'is_committing', 'marshal', 'os_path', 'pickle', 'platform', |
're', 'subprocess', 'tempfile', 'traceback', 'unittest', 'urllib2', |
@@ -672,6 +678,34 @@ class InputApiUnittest(PresubmitTestsBase): |
api = presubmit.InputApi(change, 'foo/PRESUBMIT.py', True) |
api.AffectedTextFiles(include_deletes=False) |
+ def testReadFileStringDenied(self): |
+ self.mox.ReplayAll() |
+ input_api = presubmit.InputApi(None, './p', False) |
+ input_api.change = self.MakeBasicChange('foo', 'Foo\n', '/AA') |
+ self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x') |
+ |
+ def testReadFileStringAccepted(self): |
+ presubmit.gcl.ReadFile('/AA/boo', 'x').AndReturn(None) |
+ self.mox.ReplayAll() |
+ input_api = presubmit.InputApi(None, './p', False) |
+ input_api.change = self.MakeBasicChange('foo', 'Foo\n', '/AA') |
+ input_api.ReadFile('/AA/boo', 'x') |
+ |
+ def testReadFileAffectedFileDenied(self): |
+ file = presubmit.AffectedFile('boo', 'M') |
+ self.mox.ReplayAll() |
+ input_api = presubmit.InputApi(None, './p', False) |
+ input_api.change = self.MakeBasicChange('foo', 'Foo\n', '/AA') |
+ self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x') |
+ |
+ def testReadFileAffectedFileAccepted(self): |
+ file = presubmit.AffectedFile('/AA/boo', 'M') |
+ presubmit.gcl.ReadFile('/AA/boo', 'x').AndReturn(None) |
+ self.mox.ReplayAll() |
+ input_api = presubmit.InputApi(None, './p', False) |
+ input_api.change = self.MakeBasicChange('foo', 'Foo\n', '/AA') |
+ input_api.ReadFile('/AA/boo', 'x') |
+ |
class OuputApiUnittest(PresubmitTestsBase): |
"""Tests presubmit.OutputApi.""" |
@@ -836,14 +870,10 @@ class CannedChecksUnittest(PresubmitTestsBase): |
input_api.unittest = unittest |
return input_api |
- def MakeBasicChange(self, name, description): |
- ci = presubmit.gcl.ChangeInfo(name, 0, 0, description, None) |
- return presubmit.GclChange(ci, self.fake_root_dir) |
- |
def testMembersChanged(self): |
self.mox.ReplayAll() |
members = [ |
- 'CheckChangeHasBugField', 'CheckChangeHasNoTabs', |
+ 'CheckChangeHasBugField', 'CheckChangeHasNoCR', 'CheckChangeHasNoTabs', |
'CheckChangeHasQaField', 'CheckChangeHasTestedField', |
'CheckChangeHasTestField', 'CheckDoNotSubmit', |
'CheckDoNotSubmitInDescription', 'CheckDoNotSubmitInFiles', |
@@ -922,6 +952,31 @@ class CannedChecksUnittest(PresubmitTestsBase): |
'DO NOTSUBMIT', 'DO NOT ' + 'SUBMIT', |
presubmit.OutputApi.PresubmitError) |
+ def testCheckChangeHasNoCR(self): |
+ input_api1 = self.MockInputApi() |
+ self.mox.StubOutWithMock(input_api1, 'ReadFile') |
+ input_api1.change = self.MakeBasicChange('foo', 'Foo\n') |
+ affected_file1 = self.mox.CreateMock(presubmit.SvnAffectedFile) |
+ input_api1.AffectedTextFiles().AndReturn([affected_file1]) |
+ input_api1.ReadFile(affected_file1, 'rb').AndReturn("Hey!\nHo!\n") |
+ input_api2 = self.MockInputApi() |
+ self.mox.StubOutWithMock(input_api2, 'ReadFile') |
+ input_api2.change = self.MakeBasicChange('foo', 'Foo\n') |
+ affected_file2 = self.mox.CreateMock(presubmit.SvnAffectedFile) |
+ input_api2.AffectedTextFiles().AndReturn([affected_file2]) |
+ input_api2.ReadFile(affected_file2, 'rb').AndReturn("Hey!\r\nHo!\r\n") |
+ affected_file2.LocalPath().AndReturn('bar.cc') |
+ self.mox.ReplayAll() |
+ |
+ results = presubmit_canned_checks.CheckChangeHasNoCR( |
+ input_api1, presubmit.OutputApi) |
+ self.assertEquals(results, []) |
+ results2 = presubmit_canned_checks.CheckChangeHasNoCR( |
+ input_api2, presubmit.OutputApi) |
+ self.assertEquals(len(results2), 1) |
+ self.assertEquals(results2[0].__class__, |
+ presubmit.OutputApi.PresubmitPromptWarning) |
+ |
def testCannedCheckChangeHasNoTabs(self): |
self.TestContent(presubmit_canned_checks.CheckChangeHasNoTabs, |
'blah blah', 'blah\tblah', |