| Index: tests/revert_unittest.py | 
| diff --git a/tests/revert_unittest.py b/tests/revert_unittest.py | 
| index e95d3c4faeba6e9ed30b05f0634e59fad298c810..eee176d2ee0975f2ccf4b32ef6728a59b4177c64 100644 | 
| --- a/tests/revert_unittest.py | 
| +++ b/tests/revert_unittest.py | 
| @@ -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\nbleh', | 
| +                          [('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() | 
|  |