@ -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 ' ,
' S canSubDirs' , ' S vnAffectedFile' ,
' OutputApi ' , ' ParseFiles ' , ' PresubmitExecuter ' , ' ScanSubDirs ' ,
' S vnAffectedFile' ,
' 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! \n ahh? ' )
presubmit . gcl . ReadFile ( notfound ) . AndReturn ( ' look! \n there? ' )
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 \n STORY=http://tracker.com/42 \n BUG=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 \n STORY=http://tracker.com/42 \n BUG=boo \n " ,
files = None )
output = StringIO . StringIO ( )
input = StringIO . StringIO ( ' y \n ' )
self . failUnless ( presubmit . DoPresubmitChecks ( c hange , 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 \n cookie ' )
presubmit . gcl . ReadFile ( another ) . AndReturn ( ' whatever \n cookie2 ' )
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 )