@ -16,7 +16,17 @@ from super_mox import mox
class RevertTestsBase ( super_mox . SuperMoxTestBase ) :
""" Setups and tear downs the mocks but doesn ' t test anything as-is. """
pass
def setUp ( self ) :
super_mox . SuperMoxTestBase . setUp ( self )
self . mox . StubOutWithMock ( revert , ' gcl ' )
self . mox . StubOutWithMock ( revert , ' gclient ' )
self . mox . StubOutWithMock ( revert , ' os ' )
self . mox . StubOutWithMock ( revert . os , ' path ' )
self . mox . StubOutWithMock ( revert . sys , ' stdout ' )
# These functions are not tested.
self . mox . StubOutWithMock ( revert , ' GetRepoBase ' )
self . mox . StubOutWithMock ( revert , ' CaptureSVNLog ' )
class RevertUnittest ( RevertTestsBase ) :
@ -31,5 +41,75 @@ class RevertUnittest(RevertTestsBase):
self . compareMembers ( revert , members )
class RevertMainUnittest ( RevertTestsBase ) :
def setUp ( self ) :
RevertTestsBase . setUp ( self )
self . mox . StubOutWithMock ( revert , ' gcl ' )
self . mox . StubOutWithMock ( revert , ' gclient ' )
self . mox . StubOutWithMock ( revert , ' os ' )
self . mox . StubOutWithMock ( revert . os , ' path ' )
self . mox . StubOutWithMock ( revert , ' sys ' )
self . mox . StubOutWithMock ( revert , ' Revert ' )
def testMain ( self ) :
revert . gcl . GetInfoDir ( ) . AndReturn ( ' foo ' )
revert . os . path . exists ( ' foo ' ) . AndReturn ( True )
revert . Revert ( [ 42 , 23 ] , True , True , False , ' bleh ' , [ ' foo@example.com ' ]
) . AndReturn ( 31337 )
self . mox . ReplayAll ( )
self . assertEquals ( revert . Main ( [ ' revert ' , ' -c ' , ' -f ' , ' -n ' , ' -m ' , ' bleh ' ,
' -r ' , ' foo@example.com ' , ' 42 ' , ' 23 ' ] ) ,
31337 )
class RevertRevertUnittest ( RevertTestsBase ) :
def setUp ( self ) :
RevertTestsBase . setUp ( self )
def testRevert ( self ) :
revert . gcl . GetRepositoryRoot ( ) . AndReturn ( ' foo ' )
revert . os . chdir ( ' foo ' )
entries = [ {
' author ' : ' Georges ' ,
' paths ' : [
{ ' path ' : ' proto://fqdn/repo/random_file ' }
] ,
} ]
revert . CaptureSVNLog ( [ ' -r ' , ' 42 ' , ' -v ' ] ) . AndReturn ( entries )
revert . GetRepoBase ( ) . AndReturn ( ' proto://fqdn/repo/ ' )
revert . gclient . CaptureSVNStatus ( [ ' random_file ' ] ) . AndReturn ( [ ] )
revert . gcl . RunShell ( [ ' svn ' , ' up ' , ' random_file ' ] )
revert . os . path . isdir ( ' random_file ' ) . AndReturn ( False )
status = """ --- Reverse-merging r42 into ' . ' :
M random_file
"""
revert . gcl . RunShellWithReturnCode ( [ ' svn ' , ' merge ' , ' -c ' , ' -42 ' ,
' random_file ' ] ,
print_output = True ) . AndReturn ( [ status , 0 ] )
change = self . mox . CreateMockAnything ( )
revert . gcl . ChangeInfo ( ' revert42 ' , 0 , 0 , ' Reverting 42. \n \n bleh ' ,
[ ( ' M ' , ' random_file ' ) ] , ' foo ' ) . AndReturn ( change )
change . Save ( )
revert . gcl . UploadCL ( change ,
[ ' --no_presubmit ' , ' -r ' , ' foo@example.com ' , ' --no_try ' ] )
revert . gcl . Commit ( change , [ ' --no_presubmit ' , ' --force ' ] )
revert . gclient . Main ( [ ' gclient.py ' , ' sync ' ] )
outputs = [
' Blaming Georges \n ' ,
' Emailing foo@example.com \n ' ,
' These files were modified in 42: ' ,
' random_file ' ,
' ' ,
' Reverting 42 in ./ '
]
for line in outputs :
revert . sys . stdout . write ( line )
revert . sys . stdout . write ( ' \n ' )
self . mox . ReplayAll ( )
revert . Revert ( [ 42 ] , True , True , False , ' bleh ' , [ ' foo@example.com ' ] )
if __name__ == ' __main__ ' :
unittest . main ( )