| #!/usr/bin/python |
| # Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Unit tests for revert.py.""" |
| |
| import os |
| import unittest |
| |
| # Local imports |
| import revert |
| import super_mox |
| from super_mox import mox |
| |
| |
| class RevertTestsBase(super_mox.SuperMoxTestBase): |
| """Setups and tear downs the mocks but doesn't test anything as-is.""" |
| 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): |
| """General revert.py tests.""" |
| def testMembersChanged(self): |
| members = [ |
| 'CaptureSVNLog', 'GetRepoBase', 'Main', 'ModifiedFile', 'NoBlameList', |
| 'NoModifiedFile', 'OutsideOfCheckout', 'Revert', 'UniqueFast', |
| 'exceptions', 'gcl', 'gclient', 'optparse', 'os', 'sys', 'xml' |
| ] |
| # If this test fails, you should add the relevant test. |
| 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', ['[email protected]'] |
| ).AndReturn(31337) |
| self.mox.ReplayAll() |
| |
| self.assertEquals(revert.Main(['revert', '-c', '-f', '-n', '-m', 'bleh', |
| '-r', '[email protected]', '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', '[email protected]', '--no_try']) |
| revert.gcl.Commit(change, ['--no_presubmit', '--force']) |
| revert.gclient.Main(['gclient.py', 'sync']) |
| outputs = [ |
| 'Blaming Georges\n', |
| 'Emailing [email protected]\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', ['[email protected]']) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |