| Index: tests/presubmit_unittest.py
|
| diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py
|
| index b50fbe1aac791828ef23ed074acb800d09320418..03a96ebf82377861f6d65784f3230e479856077a 100755
|
| --- a/tests/presubmit_unittest.py
|
| +++ b/tests/presubmit_unittest.py
|
| @@ -52,21 +52,21 @@ def CheckChangeOnUpload(input_api, output_api):
|
| def MockAbsPath(f):
|
| return f
|
| presubmit.os.path.abspath = MockAbsPath
|
| - self.mox.StubOutWithMock(presubmit.gcl, 'GetRepositoryRoot')
|
| - fake_root_dir = self.RootDir()
|
| - self.fake_root_dir = fake_root_dir
|
| - def MockGetRepositoryRoot():
|
| - return fake_root_dir
|
| - presubmit.gcl.GetRepositoryRoot = MockGetRepositoryRoot
|
| + self.fake_root_dir = self.RootDir()
|
| self.mox.StubOutWithMock(presubmit.gclient, 'CaptureSVNInfo')
|
| self.mox.StubOutWithMock(presubmit.gcl, 'GetSVNFileProperty')
|
| self.mox.StubOutWithMock(presubmit.gcl, 'ReadFile')
|
| + self.mox.StubOutWithMock(presubmit.gcl, 'ChangeInfo')
|
|
|
| - 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)
|
| + def MakeChangeInfo(self, name, issue, patchset, description):
|
| + ci = self.mox.CreateMock(presubmit.gcl.ChangeInfo)
|
| + ci.name = name
|
| + ci.issue = issue
|
| + ci.patchset = patchset
|
| + ci.description = description
|
| + ci.patch = None
|
| + ci.local_root = self.fake_root_dir
|
| + return ci
|
|
|
|
|
| class PresubmitUnittest(PresubmitTestsBase):
|
| @@ -76,8 +76,8 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| members = [
|
| 'AffectedFile', 'DoPresubmitChecks', 'GclChange', 'InputApi',
|
| 'ListRelevantPresubmitFiles', 'Main', 'NotImplementedException',
|
| - 'OutputApi', 'ParseFiles', 'PresubmitExecuter',
|
| - 'ScanSubDirs', 'SvnAffectedFile',
|
| + 'OutputApi', 'ParseFiles', 'PresubmitExecuter', 'ScanSubDirs',
|
| + 'SvnAffectedFile',
|
| 'cPickle', 'cStringIO', 'exceptions',
|
| 'fnmatch', 'gcl', 'gclient', 'glob', 'logging', 'marshal', 'normpath',
|
| 'optparse',
|
| @@ -142,15 +142,17 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| ['?', 'flop/notfound.txt'], # not found in SVN, still exists locally
|
| ['D', 'boo/flap.h'],
|
| ]
|
| - blat = presubmit.os.path.join('foo', 'blat.cc')
|
| - notfound = presubmit.os.path.join('flop', 'notfound.txt')
|
| - flap = presubmit.os.path.join('boo', 'flap.h')
|
| + blat = presubmit.os.path.join(self.fake_root_dir, 'foo', 'blat.cc')
|
| + notfound = presubmit.os.path.join(self.fake_root_dir, 'flop', 'notfound.txt')
|
| + flap = presubmit.os.path.join(self.fake_root_dir, 'boo', 'flap.h')
|
| + binary = presubmit.os.path.join(self.fake_root_dir, 'binary.dll')
|
| + isdir = presubmit.os.path.join(self.fake_root_dir, 'isdir')
|
| presubmit.os.path.exists(blat).AndReturn(True)
|
| presubmit.os.path.isdir(blat).AndReturn(False)
|
| - presubmit.os.path.exists('binary.dll').AndReturn(True)
|
| - presubmit.os.path.isdir('binary.dll').AndReturn(False)
|
| - presubmit.os.path.exists('isdir').AndReturn(True)
|
| - presubmit.os.path.isdir('isdir').AndReturn(True)
|
| + presubmit.os.path.exists(binary).AndReturn(True)
|
| + presubmit.os.path.isdir(binary).AndReturn(False)
|
| + presubmit.os.path.exists(isdir).AndReturn(True)
|
| + presubmit.os.path.isdir(isdir).AndReturn(True)
|
| presubmit.os.path.exists(notfound).AndReturn(True)
|
| presubmit.os.path.isdir(notfound).AndReturn(False)
|
| presubmit.os.path.exists(flap).AndReturn(False)
|
| @@ -158,23 +160,23 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| ).AndReturn({'Node Kind': 'file'})
|
| presubmit.gcl.GetSVNFileProperty(blat, 'svn:mime-type').AndReturn(None)
|
| presubmit.gcl.GetSVNFileProperty(
|
| - 'binary.dll', 'svn:mime-type').AndReturn('application/octet-stream')
|
| + binary, 'svn:mime-type').AndReturn('application/octet-stream')
|
| presubmit.gcl.GetSVNFileProperty(
|
| notfound, 'svn:mime-type').AndReturn('')
|
| presubmit.gclient.CaptureSVNInfo(blat).AndReturn(
|
| {'URL': 'svn:/foo/foo/blat.cc'})
|
| - presubmit.gclient.CaptureSVNInfo('binary.dll').AndReturn(
|
| + presubmit.gclient.CaptureSVNInfo(binary).AndReturn(
|
| {'URL': 'svn:/foo/binary.dll'})
|
| presubmit.gclient.CaptureSVNInfo(notfound).AndReturn({})
|
| presubmit.gclient.CaptureSVNInfo(flap).AndReturn(
|
| {'URL': 'svn:/foo/boo/flap.h'})
|
| presubmit.gcl.ReadFile(blat).AndReturn('boo!\nahh?')
|
| presubmit.gcl.ReadFile(notfound).AndReturn('look!\nthere?')
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| change = presubmit.GclChange(ci)
|
|
|
| self.failUnless(change.Name() == 'mychange')
|
| @@ -238,12 +240,13 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| ['A', 'foo\\blat.cc'],
|
| ]
|
| fake_presubmit = presubmit.os.path.join(self.fake_root_dir, 'PRESUBMIT.py')
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| -
|
| executer = presubmit.PresubmitExecuter(ci, False)
|
| self.failIf(executer.ExecPresubmitScript('', fake_presubmit))
|
| # No error if no on-upload entry point
|
| @@ -307,12 +310,12 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| 'rU').AndReturn(self.presubmit_text)
|
| presubmit.gcl.ReadFile(haspresubmit_path,
|
| 'rU').AndReturn(self.presubmit_text)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetFileNames().AndReturn([item[1] for item in files])
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| -
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO('y\n')
|
|
|
| @@ -330,6 +333,7 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| ]
|
| presubmit_path = join(self.fake_root_dir, 'PRESUBMIT.py')
|
| haspresubmit_path = join(self.fake_root_dir, 'haspresubmit', 'PRESUBMIT.py')
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| for i in range(2):
|
| presubmit.os.path.isfile(presubmit_path).AndReturn(True)
|
| presubmit.os.path.isfile(haspresubmit_path).AndReturn(True)
|
| @@ -337,12 +341,11 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| ).AndReturn(self.presubmit_text)
|
| presubmit.gcl.ReadFile(haspresubmit_path, 'rU'
|
| ).AndReturn(self.presubmit_text)
|
| + ci.GetFileNames().AndReturn([item[1] for item in files])
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| -
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO('n\n') # say no to the warning
|
| self.failIf(presubmit.DoPresubmitChecks(ci, False, True, output, input,
|
| @@ -351,13 +354,8 @@ class PresubmitUnittest(PresubmitTestsBase):
|
|
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO('y\n') # say yes to the warning
|
| - self.failUnless(presubmit.DoPresubmitChecks(ci,
|
| - False,
|
| - True,
|
| - output,
|
| - input,
|
| - None,
|
| - True))
|
| + self.failUnless(presubmit.DoPresubmitChecks(ci, False, True, output, input,
|
| + None, True))
|
| self.assertEquals(output.getvalue().count('??'), 2)
|
|
|
| def testDoPresubmitChecksNoWarningPromptIfErrors(self):
|
| @@ -375,13 +373,14 @@ class PresubmitUnittest(PresubmitTestsBase):
|
| presubmit.os.path.isfile(presubmit_path).AndReturn(True)
|
| presubmit.os.path.isfile(haspresubmit_path).AndReturn(True)
|
| presubmit.gcl.ReadFile(presubmit_path, 'rU').AndReturn(self.presubmit_text)
|
| - presubmit.gcl.ReadFile(haspresubmit_path, 'rU'
|
| - ).AndReturn(self.presubmit_text)
|
| + presubmit.gcl.ReadFile(haspresubmit_path, 'rU').AndReturn(
|
| + self.presubmit_text)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetFileNames().AndReturn([item[1] for item in files])
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO() # should be unused
|
| self.failIf(presubmit.DoPresubmitChecks(ci, False, True, output, input,
|
| @@ -409,12 +408,11 @@ def CheckChangeOnCommit(input_api, output_api):
|
| presubmit.os.path.isfile(join(self.fake_root_dir,
|
| 'haspresubmit',
|
| 'PRESUBMIT.py')).AndReturn(False)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetFileNames().AndReturn([item[1] for item in files])
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
| -
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| -
|
|
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO('y\n')
|
| @@ -428,17 +426,18 @@ def CheckChangeOnCommit(input_api, output_api):
|
| ['A', 'isdir'],
|
| ['A', 'isdir\\blat.cc'],
|
| ]
|
| - presubmit.os.path.exists('isdir').AndReturn(True)
|
| - presubmit.os.path.isdir('isdir').AndReturn(True)
|
| - presubmit.os.path.exists(presubmit.os.path.join('isdir', 'blat.cc')
|
| - ).AndReturn(True)
|
| - presubmit.os.path.isdir(presubmit.os.path.join('isdir', 'blat.cc')
|
| - ).AndReturn(False)
|
| + isdir = presubmit.os.path.join(self.fake_root_dir, 'isdir')
|
| + blat = presubmit.os.path.join(isdir, 'blat.cc')
|
| + presubmit.os.path.exists(isdir).AndReturn(True)
|
| + presubmit.os.path.isdir(isdir).AndReturn(True)
|
| + presubmit.os.path.exists(blat).AndReturn(True)
|
| + presubmit.os.path.isdir(blat).AndReturn(False)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, 'foo')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='foo', files=files)
|
| - change = presubmit.GclChange(ci)
|
|
|
| + change = presubmit.GclChange(ci)
|
| affected_files = change.AffectedFiles(include_dirs=False)
|
| self.failUnless(len(affected_files) == 1)
|
| self.failUnless(affected_files[0].LocalPath().endswith('blat.cc'))
|
| @@ -476,17 +475,16 @@ def CheckChangeOnUpload(input_api, output_api):
|
| def CheckChangeOnCommit(input_api, output_api):
|
| raise Exception("Test error")
|
| """
|
| + ci = self.MakeChangeInfo(
|
| + 'foo', 0, 0, "Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n")
|
| + ci.GetFileNames().AndReturn([])
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([])
|
| self.mox.ReplayAll()
|
|
|
| - change = presubmit.gcl.ChangeInfo(
|
| - name='foo',
|
| - issue=0,
|
| - patchset=0,
|
| - description="Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n",
|
| - files=None)
|
| output = StringIO.StringIO()
|
| input = StringIO.StringIO('y\n')
|
| - self.failUnless(presubmit.DoPresubmitChecks(change, False, True, output,
|
| + self.failUnless(presubmit.DoPresubmitChecks(ci, False, True, output,
|
| input, DEFAULT_SCRIPT, False))
|
| self.assertEquals(output.getvalue(),
|
| ('Warning, no presubmit.py found.\n'
|
| @@ -553,27 +551,26 @@ class InputApiUnittest(PresubmitTestsBase):
|
| 'BUG=123',
|
| ' STORY =http://foo/ \t',
|
| 'and some more regular text')
|
| - blat = join('foo', 'blat.cc')
|
| - readme = join('foo', 'blat', 'READ_ME2')
|
| - binary = join('foo', 'blat', 'binary.dll')
|
| - weird = join('foo', 'blat', 'weird.xyz')
|
| - third_party = join('foo', 'third_party', 'third.cc')
|
| - another = join('foo', 'blat', 'another.h')
|
| - beingdeleted = join('foo', 'mat', 'beingdeleted.txt')
|
| - notfound = join('flop', 'notfound.txt')
|
| - flap = join('boo', 'flap.h')
|
| files = [
|
| - ['A', blat],
|
| - ['M', readme],
|
| - ['M', binary],
|
| - ['M', weird],
|
| - ['M', another],
|
| - ['M', third_party],
|
| + ['A', join('foo', 'blat.cc')],
|
| + ['M', join('foo', 'blat', 'READ_ME2')],
|
| + ['M', join('foo', 'blat', 'binary.dll')],
|
| + ['M', join('foo', 'blat', 'weird.xyz')],
|
| + ['M', join('foo', 'blat', 'another.h')],
|
| + ['M', join('foo', 'third_party', 'third.cc')],
|
| ['D', 'foo/mat/beingdeleted.txt'],
|
| ['M', 'flop/notfound.txt'],
|
| ['A', 'boo/flap.h'],
|
| ]
|
| -
|
| + blat = presubmit.normpath(join(self.fake_root_dir, files[0][1]))
|
| + readme = presubmit.normpath(join(self.fake_root_dir, files[1][1]))
|
| + binary = presubmit.normpath(join(self.fake_root_dir, files[2][1]))
|
| + weird = presubmit.normpath(join(self.fake_root_dir, files[3][1]))
|
| + another = presubmit.normpath(join(self.fake_root_dir, files[4][1]))
|
| + third_party = presubmit.normpath(join(self.fake_root_dir, files[5][1]))
|
| + beingdeleted = presubmit.normpath(join(self.fake_root_dir, files[6][1]))
|
| + notfound = presubmit.normpath(join(self.fake_root_dir, files[7][1]))
|
| + flap = presubmit.normpath(join(self.fake_root_dir, files[8][1]))
|
| for i in (blat, readme, binary, weird, another, third_party):
|
| presubmit.os.path.exists(i).AndReturn(True)
|
| presubmit.os.path.isdir(i).AndReturn(False)
|
| @@ -593,33 +590,39 @@ class InputApiUnittest(PresubmitTestsBase):
|
| ).AndReturn(None)
|
| presubmit.gcl.ReadFile(blat).AndReturn('whatever\ncookie')
|
| presubmit.gcl.ReadFile(another).AndReturn('whatever\ncookie2')
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '\n'.join(description_lines))
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='\n'.join(description_lines),
|
| - files=files)
|
| change = presubmit.GclChange(ci)
|
| - input_api = presubmit.InputApi(change, 'foo/PRESUBMIT.py', False)
|
| + input_api = presubmit.InputApi(change,
|
| + join(self.fake_root_dir, 'foo',
|
| + 'PRESUBMIT.py'),
|
| + False)
|
| # Doesn't filter much
|
| got_files = input_api.AffectedFiles()
|
| self.assertEquals(len(got_files), 7)
|
| - self.assertEquals(got_files[0].LocalPath(), presubmit.normpath(blat))
|
| - self.assertEquals(got_files[1].LocalPath(), presubmit.normpath(readme))
|
| - self.assertEquals(got_files[2].LocalPath(), presubmit.normpath(binary))
|
| - self.assertEquals(got_files[3].LocalPath(), presubmit.normpath(weird))
|
| - self.assertEquals(got_files[4].LocalPath(), presubmit.normpath(another))
|
| - self.assertEquals(got_files[5].LocalPath(), presubmit.normpath(third_party))
|
| - self.assertEquals(got_files[6].LocalPath(),
|
| - presubmit.normpath(beingdeleted))
|
| + self.assertEquals(got_files[0].LocalPath(), presubmit.normpath(files[0][1]))
|
| + self.assertEquals(got_files[1].LocalPath(), presubmit.normpath(files[1][1]))
|
| + self.assertEquals(got_files[2].LocalPath(), presubmit.normpath(files[2][1]))
|
| + self.assertEquals(got_files[3].LocalPath(), presubmit.normpath(files[3][1]))
|
| + self.assertEquals(got_files[4].LocalPath(), presubmit.normpath(files[4][1]))
|
| + self.assertEquals(got_files[5].LocalPath(), presubmit.normpath(files[5][1]))
|
| + self.assertEquals(got_files[6].LocalPath(), presubmit.normpath(files[6][1]))
|
| # Ignores weird because of whitelist, third_party because of blacklist,
|
| # binary isn't a text file and beingdeleted doesn't exist. The rest is
|
| # outside foo/.
|
| rhs_lines = [x for x in input_api.RightHandSideLines(None)]
|
| self.assertEquals(len(rhs_lines), 4)
|
| - self.assertEqual(rhs_lines[0][0].LocalPath(), presubmit.normpath(blat))
|
| - self.assertEqual(rhs_lines[1][0].LocalPath(), presubmit.normpath(blat))
|
| - self.assertEqual(rhs_lines[2][0].LocalPath(), presubmit.normpath(another))
|
| - self.assertEqual(rhs_lines[3][0].LocalPath(), presubmit.normpath(another))
|
| + self.assertEqual(rhs_lines[0][0].LocalPath(),
|
| + presubmit.normpath(files[0][1]))
|
| + self.assertEqual(rhs_lines[1][0].LocalPath(),
|
| + presubmit.normpath(files[0][1]))
|
| + self.assertEqual(rhs_lines[2][0].LocalPath(),
|
| + presubmit.normpath(files[4][1]))
|
| + self.assertEqual(rhs_lines[3][0].LocalPath(),
|
| + presubmit.normpath(files[4][1]))
|
|
|
| def testDefaultWhiteListBlackListFilters(self):
|
| def f(x):
|
| @@ -697,14 +700,20 @@ class InputApiUnittest(PresubmitTestsBase):
|
| return 'a' in affected_file.LocalPath()
|
| files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee')]
|
| for (action, item) in files:
|
| + item = presubmit.os.path.join(self.fake_root_dir, item)
|
| presubmit.os.path.exists(item).AndReturn(True)
|
| presubmit.os.path.isdir(item).AndReturn(False)
|
| presubmit.gcl.GetSVNFileProperty(item, 'svn:mime-type').AndReturn(None)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo('mychange', 0, 0, '', files)
|
| change = presubmit.GclChange(ci)
|
| - input_api = presubmit.InputApi(change, './PRESUBMIT.py', False)
|
| + input_api = presubmit.InputApi(change,
|
| + presubmit.os.path.join(self.fake_root_dir,
|
| + 'PRESUBMIT.py'),
|
| + False)
|
| got_files = input_api.AffectedSourceFiles(FilterSourceFile)
|
| self.assertEquals(len(got_files), 2)
|
| self.assertEquals(got_files[0].LocalPath(), 'eeaee')
|
| @@ -715,12 +724,15 @@ class InputApiUnittest(PresubmitTestsBase):
|
| black_list = [r".*?b.*?"]
|
| files = [('A', 'eeaee'), ('M', 'eeabee'), ('M', 'eebcee'), ('M', 'eecaee')]
|
| for (action, item) in files:
|
| + item = presubmit.os.path.join(self.fake_root_dir, item)
|
| presubmit.os.path.exists(item).AndReturn(True)
|
| presubmit.os.path.isdir(item).AndReturn(False)
|
| presubmit.gcl.GetSVNFileProperty(item, 'svn:mime-type').AndReturn(None)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo('mychange', 0, 0, '', files)
|
| change = presubmit.GclChange(ci)
|
| input_api = presubmit.InputApi(change, './PRESUBMIT.py', False)
|
| # Sample usage of overiding the default white and black lists.
|
| @@ -743,13 +755,14 @@ class InputApiUnittest(PresubmitTestsBase):
|
| ['A', join('isdir', 'blat.cc')],
|
| ['M', join('elsewhere', 'ouf.cc')],
|
| ]
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, '')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn(files)
|
| self.mox.ReplayAll()
|
|
|
| - ci = presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='', files=files)
|
| # It doesn't make sense on non-Windows platform. This is somewhat hacky,
|
| # but it is needed since we can't just use os.path.join('c:', 'temp').
|
| - change = presubmit.GclChange(ci, self.fake_root_dir)
|
| + change = presubmit.GclChange(ci)
|
| affected_files = change.AffectedFiles(include_dirs=True)
|
| # Local paths should remain the same
|
| self.assertEquals(affected_files[0].LocalPath(), normpath('isdir'))
|
| @@ -778,40 +791,65 @@ class InputApiUnittest(PresubmitTestsBase):
|
| def testDeprecated(self):
|
| presubmit.warnings.warn(mox.IgnoreArg(), category=mox.IgnoreArg(),
|
| stacklevel=2)
|
| + ci = self.MakeChangeInfo('mychange', 0, 0, 'Bleh\n')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([])
|
| self.mox.ReplayAll()
|
| - change = presubmit.GclChange(
|
| - presubmit.gcl.ChangeInfo(name='mychange', issue=0, patchset=0,
|
| - description='Bleh\n', files=None))
|
| - api = presubmit.InputApi(change, 'foo/PRESUBMIT.py', True)
|
| +
|
| + change = presubmit.GclChange(ci)
|
| + api = presubmit.InputApi(
|
| + change,
|
| + presubmit.os.path.join(self.fake_root_dir, 'foo', 'PRESUBMIT.py'), True)
|
| api.AffectedTextFiles(include_deletes=False)
|
|
|
| def testReadFileStringDenied(self):
|
| + ci = self.MakeChangeInfo('foo', 0, 0, 'Foo\n')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([('M', 'AA')])
|
| self.mox.ReplayAll()
|
| - input_api = presubmit.InputApi(None, './p', False)
|
| - input_api.change = self.MakeBasicChange('foo', 'Foo\n', '/AA')
|
| +
|
| + input_api = presubmit.InputApi(
|
| + None, presubmit.os.path.join(self.fake_root_dir, '/p'), False)
|
| + input_api.change = presubmit.GclChange(ci)
|
| self.assertRaises(IOError, input_api.ReadFile, 'boo', 'x')
|
|
|
| def testReadFileStringAccepted(self):
|
| - presubmit.gcl.ReadFile('/AA/boo', 'x').AndReturn(None)
|
| + ci = self.MakeChangeInfo('foo', 0, 0, 'Foo\n')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + path = presubmit.os.path.join(self.fake_root_dir, 'AA/boo')
|
| + ci.GetFiles().AndReturn([('M', 'AA')])
|
| + presubmit.gcl.ReadFile(path, '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')
|
| +
|
| + input_api = presubmit.InputApi(
|
| + None, presubmit.os.path.join(self.fake_root_dir, '/p'), False)
|
| + input_api.change = presubmit.GclChange(ci)
|
| + input_api.ReadFile(path, 'x')
|
|
|
| def testReadFileAffectedFileDenied(self):
|
| - file = presubmit.AffectedFile('boo', 'M')
|
| + ci = self.MakeChangeInfo('foo', 0, 0, 'Foo\n')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([('M', 'AA')])
|
| + file = presubmit.AffectedFile('boo', 'M', 'Unrelated')
|
| 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')
|
| +
|
| + input_api = presubmit.InputApi(
|
| + None, presubmit.os.path.join(self.fake_root_dir, '/p'), False)
|
| + input_api.change = presubmit.GclChange(ci)
|
| + self.assertRaises(IOError, input_api.ReadFile, file, 'x')
|
|
|
| def testReadFileAffectedFileAccepted(self):
|
| - file = presubmit.AffectedFile('/AA/boo', 'M')
|
| - presubmit.gcl.ReadFile('/AA/boo', 'x').AndReturn(None)
|
| + ci = self.MakeChangeInfo('foo', 0, 0, 'Foo\n')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([('M', 'AA')])
|
| + file = presubmit.AffectedFile('AA/boo', 'M', self.fake_root_dir)
|
| + presubmit.gcl.ReadFile(file.AbsoluteLocalPath(), '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')
|
| +
|
| + input_api = presubmit.InputApi(
|
| + None, presubmit.os.path.join(self.fake_root_dir, '/p'), False)
|
| + input_api.change = presubmit.GclChange(ci)
|
| + input_api.ReadFile(file, 'x')
|
|
|
|
|
| class OuputApiUnittest(PresubmitTestsBase):
|
| @@ -950,7 +988,6 @@ class AffectedFileUnittest(PresubmitTestsBase):
|
|
|
| class GclChangeUnittest(PresubmitTestsBase):
|
| def testMembersChanged(self):
|
| - self.mox.ReplayAll()
|
| members = [
|
| 'AbsoluteLocalPaths', 'AffectedFiles', 'AffectedTextFiles',
|
| 'DescriptionText', 'FullDescriptionText', 'LocalPaths', 'Name',
|
| @@ -958,8 +995,12 @@ class GclChangeUnittest(PresubmitTestsBase):
|
| 'issue', 'patchset', 'tags',
|
| ]
|
| # If this test fails, you should add the relevant test.
|
| - ci = presubmit.gcl.ChangeInfo('', 0, 0, '', None)
|
| - self.compareMembers(presubmit.GclChange(ci, self.fake_root_dir), members)
|
| + ci = self.MakeChangeInfo('', 0, 0, '')
|
| + ci.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci.GetFiles().AndReturn([])
|
| + self.mox.ReplayAll()
|
| +
|
| + self.compareMembers(presubmit.GclChange(ci), members)
|
|
|
|
|
| class CannedChecksUnittest(PresubmitTestsBase):
|
| @@ -999,12 +1040,18 @@ class CannedChecksUnittest(PresubmitTestsBase):
|
| committing):
|
| input_api1 = self.MockInputApi()
|
| input_api1.is_committing = committing
|
| - input_api1.change = self.MakeBasicChange('foo', description1)
|
| + ci1 = self.MakeChangeInfo('foo', 0, 0, description1)
|
| + ci1.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci1.GetFiles().AndReturn([])
|
| input_api2 = self.MockInputApi()
|
| input_api2.is_committing = committing
|
| - input_api2.change = self.MakeBasicChange('foo', description2)
|
| + ci2 = self.MakeChangeInfo('foo', 0, 0, description2)
|
| + ci2.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci2.GetFiles().AndReturn([])
|
| self.mox.ReplayAll()
|
|
|
| + input_api1.change = presubmit.GclChange(ci1)
|
| + input_api2.change = presubmit.GclChange(ci2)
|
| results1 = check(input_api1, presubmit.OutputApi)
|
| self.assertEquals(results1, [])
|
| results2 = check(input_api2, presubmit.OutputApi)
|
| @@ -1013,7 +1060,9 @@ class CannedChecksUnittest(PresubmitTestsBase):
|
|
|
| def ContentTest(self, check, content1, content2, error_type):
|
| input_api1 = self.MockInputApi()
|
| - input_api1.change = self.MakeBasicChange('foo', 'Foo\n')
|
| + ci1 = self.MakeChangeInfo('foo', 0, 0, 'foo1\n')
|
| + ci1.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci1.GetFiles().AndReturn([])
|
| affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile)
|
| affected_file.LocalPath().AndReturn('foo.cc')
|
| output1 = [
|
| @@ -1023,7 +1072,9 @@ class CannedChecksUnittest(PresubmitTestsBase):
|
| ]
|
| input_api1.RightHandSideLines(mox.IgnoreArg()).AndReturn(output1)
|
| input_api2 = self.MockInputApi()
|
| - input_api2.change = self.MakeBasicChange('foo', 'Foo\n')
|
| + ci2 = self.MakeChangeInfo('foo2', 0, 0, 'foo2\n')
|
| + ci2.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci2.GetFiles().AndReturn([])
|
| output2 = [
|
| (affected_file, 42, 'yo, ' + content2),
|
| (affected_file, 43, 'yer'),
|
| @@ -1032,6 +1083,8 @@ class CannedChecksUnittest(PresubmitTestsBase):
|
| input_api2.RightHandSideLines(mox.IgnoreArg()).AndReturn(output2)
|
| self.mox.ReplayAll()
|
|
|
| + input_api1.change = presubmit.GclChange(ci1)
|
| + input_api2.change = presubmit.GclChange(ci2)
|
| results1 = check(input_api1, presubmit.OutputApi, None)
|
| self.assertEquals(results1, [])
|
| results2 = check(input_api2, presubmit.OutputApi, None)
|
| @@ -1041,19 +1094,25 @@ class CannedChecksUnittest(PresubmitTestsBase):
|
| def ReadFileTest(self, check, content1, content2, error_type):
|
| input_api1 = self.MockInputApi()
|
| self.mox.StubOutWithMock(input_api1, 'ReadFile')
|
| - input_api1.change = self.MakeBasicChange('foo', 'Foo\n')
|
| + ci1 = self.MakeChangeInfo('foo', 0, 0, 'foo1\n')
|
| + ci1.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci1.GetFiles().AndReturn([])
|
| affected_file1 = self.mox.CreateMock(presubmit.SvnAffectedFile)
|
| input_api1.AffectedSourceFiles(None).AndReturn([affected_file1])
|
| input_api1.ReadFile(affected_file1, 'rb').AndReturn(content1)
|
| input_api2 = self.MockInputApi()
|
| self.mox.StubOutWithMock(input_api2, 'ReadFile')
|
| - input_api2.change = self.MakeBasicChange('foo', 'Foo\n')
|
| + ci2 = self.MakeChangeInfo('foo2', 0, 0, 'foo2\n')
|
| + ci2.GetLocalRoot().AndReturn(self.fake_root_dir)
|
| + ci2.GetFiles().AndReturn([])
|
| affected_file2 = self.mox.CreateMock(presubmit.SvnAffectedFile)
|
| input_api2.AffectedSourceFiles(None).AndReturn([affected_file2])
|
| input_api2.ReadFile(affected_file2, 'rb').AndReturn(content2)
|
| affected_file2.LocalPath().AndReturn('bar.cc')
|
| self.mox.ReplayAll()
|
|
|
| + input_api1.change = presubmit.GclChange(ci1)
|
| + input_api2.change = presubmit.GclChange(ci2)
|
| results = check(input_api1, presubmit.OutputApi)
|
| self.assertEquals(results, [])
|
| results2 = check(input_api2, presubmit.OutputApi)
|
|
|