| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Unit tests for scm.py.""" | 6 """Unit tests for scm.py.""" |
| 7 | 7 |
| 8 from shutil import rmtree | 8 from shutil import rmtree |
| 9 import tempfile | 9 import tempfile |
| 10 | 10 |
| 11 # Fixes include path. | 11 # Fixes include path. |
| 12 from super_mox import mox, SuperMoxBaseTestBase, SuperMoxTestBase | 12 from super_mox import mox, TestCaseUtils, SuperMoxTestBase |
| 13 | 13 |
| 14 import scm | 14 import scm |
| 15 | 15 |
| 16 | 16 |
| 17 class BaseTestCase(SuperMoxTestBase): | 17 class BaseTestCase(SuperMoxTestBase): |
| 18 # Like unittest's assertRaises, but checks for Gclient.Error. | 18 # Like unittest's assertRaises, but checks for Gclient.Error. |
| 19 def assertRaisesError(self, msg, fn, *args, **kwargs): | 19 def assertRaisesError(self, msg, fn, *args, **kwargs): |
| 20 try: | 20 try: |
| 21 fn(*args, **kwargs) | 21 fn(*args, **kwargs) |
| 22 except scm.gclient_utils.Error, e: | 22 except scm.gclient_utils.Error, e: |
| (...skipping 16 matching lines...) Expand all Loading... |
| 39 self.mox.ReplayAll() | 39 self.mox.ReplayAll() |
| 40 members = [ | 40 members = [ |
| 41 'GetCasedPath', 'GenFakeDiff', 'GIT', 'SVN', 'ValidateEmail', | 41 'GetCasedPath', 'GenFakeDiff', 'GIT', 'SVN', 'ValidateEmail', |
| 42 'cStringIO', 'gclient_utils', 'glob', 'os', 're', 'shutil', | 42 'cStringIO', 'gclient_utils', 'glob', 'os', 're', 'shutil', |
| 43 'subprocess', 'sys', 'tempfile', 'time', 'xml', | 43 'subprocess', 'sys', 'tempfile', 'time', 'xml', |
| 44 ] | 44 ] |
| 45 # If this test fails, you should add the relevant test. | 45 # If this test fails, you should add the relevant test. |
| 46 self.compareMembers(scm, members) | 46 self.compareMembers(scm, members) |
| 47 | 47 |
| 48 | 48 |
| 49 class GitWrapperTestCase(SuperMoxBaseTestBase): | 49 class GitWrapperTestCase(BaseSCMTestCase): |
| 50 sample_git_import = """blob | |
| 51 mark :1 | |
| 52 data 6 | |
| 53 Hello | |
| 54 | |
| 55 blob | |
| 56 mark :2 | |
| 57 data 4 | |
| 58 Bye | |
| 59 | |
| 60 reset refs/heads/master | |
| 61 commit refs/heads/master | |
| 62 mark :3 | |
| 63 author Bob <bob@example.com> 1253744361 -0700 | |
| 64 committer Bob <bob@example.com> 1253744361 -0700 | |
| 65 data 8 | |
| 66 A and B | |
| 67 M 100644 :1 a | |
| 68 M 100644 :2 b | |
| 69 | |
| 70 blob | |
| 71 mark :4 | |
| 72 data 10 | |
| 73 Hello | |
| 74 You | |
| 75 | |
| 76 blob | |
| 77 mark :5 | |
| 78 data 8 | |
| 79 Bye | |
| 80 You | |
| 81 | |
| 82 commit refs/heads/origin | |
| 83 mark :6 | |
| 84 author Alice <alice@example.com> 1253744424 -0700 | |
| 85 committer Alice <alice@example.com> 1253744424 -0700 | |
| 86 data 13 | |
| 87 Personalized | |
| 88 from :3 | |
| 89 M 100644 :4 a | |
| 90 M 100644 :5 b | |
| 91 | |
| 92 reset refs/heads/master | |
| 93 from :3 | |
| 94 """ | |
| 95 | |
| 96 def CreateGitRepo(self, git_import, path): | |
| 97 try: | |
| 98 scm.subprocess.Popen(['git', 'init'], | |
| 99 stdout=scm.subprocess.PIPE, | |
| 100 stderr=scm.subprocess.STDOUT, | |
| 101 cwd=path).communicate() | |
| 102 except OSError: | |
| 103 # git is not available, skip this test. | |
| 104 return False | |
| 105 scm.subprocess.Popen(['git', 'fast-import'], | |
| 106 stdin=scm.subprocess.PIPE, | |
| 107 stdout=scm.subprocess.PIPE, | |
| 108 stderr=scm.subprocess.STDOUT, | |
| 109 cwd=path).communicate(input=git_import) | |
| 110 scm.subprocess.Popen(['git', 'checkout'], | |
| 111 stdout=scm.subprocess.PIPE, | |
| 112 stderr=scm.subprocess.STDOUT, | |
| 113 cwd=path).communicate() | |
| 114 return True | |
| 115 | |
| 116 def setUp(self): | |
| 117 SuperMoxBaseTestBase.setUp(self) | |
| 118 self.args = self.Args() | |
| 119 self.url = 'git://foo' | |
| 120 self.root_dir = tempfile.mkdtemp() | |
| 121 self.relpath = '.' | |
| 122 self.base_path = scm.os.path.join(self.root_dir, self.relpath) | |
| 123 self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path) | |
| 124 self.fake_root = self.Dir() | |
| 125 | |
| 126 def tearDown(self): | |
| 127 rmtree(self.root_dir) | |
| 128 SuperMoxBaseTestBase.tearDown(self) | |
| 129 | |
| 130 def testMembersChanged(self): | 50 def testMembersChanged(self): |
| 131 self.mox.ReplayAll() | |
| 132 members = [ | 51 members = [ |
| 133 'AssertVersion', 'Capture', 'CaptureStatus', | 52 'AssertVersion', 'Capture', 'CaptureStatus', |
| 134 'FetchUpstreamTuple', | 53 'FetchUpstreamTuple', |
| 135 'GenerateDiff', 'GetBranch', 'GetBranchRef', 'GetCheckoutRoot', | 54 'GenerateDiff', 'GetBranch', 'GetBranchRef', 'GetCheckoutRoot', |
| 136 'GetDifferentFiles', 'GetEmail', 'GetPatchName', 'GetSVNBranch', | 55 'GetDifferentFiles', 'GetEmail', 'GetPatchName', 'GetSVNBranch', |
| 137 'GetUpstreamBranch', 'IsGitSvn', 'ShortBranchName', | 56 'GetUpstreamBranch', 'IsGitSvn', 'ShortBranchName', |
| 138 ] | 57 ] |
| 139 # If this test fails, you should add the relevant test. | 58 # If this test fails, you should add the relevant test. |
| 140 self.compareMembers(scm.GIT, members) | 59 self.compareMembers(scm.GIT, members) |
| 141 | 60 |
| 142 def testGetEmail(self): | 61 def testGetEmail(self): |
| 143 self.mox.StubOutWithMock(scm.GIT, 'Capture') | 62 self.mox.StubOutWithMock(scm.GIT, 'Capture') |
| 144 scm.GIT.Capture(['config', 'user.email'], self.fake_root, error_ok=True | 63 scm.GIT.Capture(['config', 'user.email'], self.root_dir, error_ok=True |
| 145 ).AndReturn(['mini@me.com', '']) | 64 ).AndReturn(['mini@me.com', '']) |
| 146 self.mox.ReplayAll() | 65 self.mox.ReplayAll() |
| 147 self.assertEqual(scm.GIT.GetEmail(self.fake_root), 'mini@me.com') | 66 self.assertEqual(scm.GIT.GetEmail(self.root_dir), 'mini@me.com') |
| 148 | 67 |
| 149 | 68 |
| 150 class SVNTestCase(BaseSCMTestCase): | 69 class SVNTestCase(BaseSCMTestCase): |
| 151 def setUp(self): | 70 def setUp(self): |
| 152 BaseSCMTestCase.setUp(self) | 71 BaseSCMTestCase.setUp(self) |
| 153 self.root_dir = self.Dir() | |
| 154 self.args = self.Args() | |
| 155 self.url = self.Url() | |
| 156 self.relpath = 'asf' | |
| 157 self.mox.StubOutWithMock(scm.SVN, 'Capture') | 72 self.mox.StubOutWithMock(scm.SVN, 'Capture') |
| 73 self.url = self.SvnUrl() |
| 158 | 74 |
| 159 def testMembersChanged(self): | 75 def testMembersChanged(self): |
| 160 self.mox.ReplayAll() | 76 self.mox.ReplayAll() |
| 161 members = [ | 77 members = [ |
| 162 'AssertVersion', 'Capture', 'CaptureRevision', 'CaptureInfo', | 78 'AssertVersion', 'Capture', 'CaptureRevision', 'CaptureInfo', |
| 163 'CaptureStatus', 'current_version', 'DiffItem', 'GenerateDiff', | 79 'CaptureStatus', 'current_version', 'DiffItem', 'GenerateDiff', |
| 164 'GetCheckoutRoot', 'GetEmail', 'GetFileProperty', 'IsMoved', | 80 'GetCheckoutRoot', 'GetEmail', 'GetFileProperty', 'IsMoved', |
| 165 'IsMovedInfo', 'ReadSimpleAuth', 'RunAndGetFileList', | 81 'IsMovedInfo', 'ReadSimpleAuth', 'RunAndGetFileList', |
| 166 ] | 82 ] |
| 167 # If this test fails, you should add the relevant test. | 83 # If this test fails, you should add the relevant test. |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 self.mox.ReplayAll() | 232 self.mox.ReplayAll() |
| 317 info = scm.SVN.CaptureStatus(None) | 233 info = scm.SVN.CaptureStatus(None) |
| 318 self.assertEquals(info, []) | 234 self.assertEquals(info, []) |
| 319 | 235 |
| 320 | 236 |
| 321 if __name__ == '__main__': | 237 if __name__ == '__main__': |
| 322 import unittest | 238 import unittest |
| 323 unittest.main() | 239 unittest.main() |
| 324 | 240 |
| 325 # vim: ts=2:sw=2:tw=80:et: | 241 # vim: ts=2:sw=2:tw=80:et: |
| OLD | NEW |