Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(673)

Side by Side Diff: tests/gclient_scm_test.py

Issue 3307016: Change scm.SVN.Capture (Closed)
Patch Set: patchset 4 was wrong Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « scm.py ('k') | tests/scm_unittest.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 gclient_scm.py.""" 6 """Unit tests for gclient_scm.py."""
7 7
8 # Import before super_mox to keep valid references. 8 # Import before super_mox to keep valid references.
9 from os import rename 9 from os import rename
10 from shutil import rmtree 10 from shutil import rmtree
11 import StringIO
11 from subprocess import Popen, PIPE, STDOUT 12 from subprocess import Popen, PIPE, STDOUT
12 import tempfile 13 import tempfile
13 import __builtin__ 14 import __builtin__
14 15
15 # Fixes include path. 16 # Fixes include path.
16 from super_mox import mox, SuperMoxBaseTestBase, SuperMoxTestBase 17 from super_mox import mox, SuperMoxBaseTestBase, SuperMoxTestBase
17 18
18 import gclient_scm 19 import gclient_scm
19 20
20 21
(...skipping 18 matching lines...) Expand all
39 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileWrite') 40 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'FileWrite')
40 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'RemoveDirectory') 41 self.mox.StubOutWithMock(gclient_scm.gclient_utils, 'RemoveDirectory')
41 self._CaptureSVNInfo = gclient_scm.scm.SVN.CaptureInfo 42 self._CaptureSVNInfo = gclient_scm.scm.SVN.CaptureInfo
42 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'Capture') 43 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'Capture')
43 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureInfo') 44 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureInfo')
44 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureStatus') 45 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'CaptureStatus')
45 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'RunAndGetFileList') 46 self.mox.StubOutWithMock(gclient_scm.scm.SVN, 'RunAndGetFileList')
46 self._scm_wrapper = gclient_scm.CreateSCM 47 self._scm_wrapper = gclient_scm.CreateSCM
47 gclient_scm.sys.stdout.flush = lambda: None 48 gclient_scm.sys.stdout.flush = lambda: None
48 gclient_scm.scm.SVN.current_version = None 49 gclient_scm.scm.SVN.current_version = None
50 self.stdout = StringIO.StringIO()
51
52 def tearDown(self):
53 GCBaseTestCase.tearDown(self)
54 try:
55 self.stdout.getvalue()
56 self.fail()
57 except AttributeError:
58 pass
59
60 def checkstdout(self, expected):
61 value = self.stdout.getvalue()
62 self.stdout.close()
63 self.assertEquals(expected, value)
49 64
50 65
51 class SVNWrapperTestCase(BaseTestCase): 66 class SVNWrapperTestCase(BaseTestCase):
52 class OptionsObject(object): 67 class OptionsObject(object):
53 def __init__(self, test_case, verbose=False, revision=None): 68 def __init__(self, test_case, verbose=False, revision=None):
54 self.verbose = verbose 69 self.verbose = verbose
55 self.revision = revision 70 self.revision = revision
56 self.manually_grab_svn_rev = True 71 self.manually_grab_svn_rev = True
57 self.deps_os = None 72 self.deps_os = None
58 self.force = False 73 self.force = False
59 self.reset = False 74 self.reset = False
60 self.nohooks = False 75 self.nohooks = False
61 self.stdout = gclient_scm.sys.stdout 76 self.stdout = test_case.stdout
62 77
63 def Options(self, *args, **kwargs): 78 def Options(self, *args, **kwargs):
64 return self.OptionsObject(self, *args, **kwargs) 79 return self.OptionsObject(self, *args, **kwargs)
65 80
66 def setUp(self): 81 def setUp(self):
67 BaseTestCase.setUp(self) 82 BaseTestCase.setUp(self)
68 self.root_dir = self.Dir() 83 self.root_dir = self.Dir()
69 self.args = self.Args() 84 self.args = self.Args()
70 self.url = self.Url() 85 self.url = self.Url()
71 self.relpath = 'asf' 86 self.relpath = 'asf'
72 87
73 def testDir(self): 88 def testDir(self):
74 members = [ 89 members = [
75 'FullUrlForRelativeUrl', 'RunCommand', 90 'FullUrlForRelativeUrl', 'RunCommand',
76 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert', 91 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert',
77 'revinfo', 'runhooks', 'status', 'update', 92 'revinfo', 'runhooks', 'status', 'update',
78 'updatesingle', 'url', 93 'updatesingle', 'url',
79 ] 94 ]
80 95
81 # If you add a member, be sure to add the relevant test! 96 # If you add a member, be sure to add the relevant test!
82 self.compareMembers(self._scm_wrapper('svn://a'), members) 97 self.compareMembers(self._scm_wrapper('svn://a'), members)
98 self.checkstdout('')
83 99
84 def testUnsupportedSCM(self): 100 def testUnsupportedSCM(self):
85 args = ['gopher://foo', self.root_dir, self.relpath] 101 args = ['gopher://foo', self.root_dir, self.relpath]
86 exception_msg = 'No SCM found for url gopher://foo' 102 exception_msg = 'No SCM found for url gopher://foo'
87 self.assertRaisesError(exception_msg, self._scm_wrapper, *args) 103 self.assertRaisesError(exception_msg, self._scm_wrapper, *args)
104 self.checkstdout('')
88 105
89 def testSVNFullUrlForRelativeUrl(self): 106 def testSVNFullUrlForRelativeUrl(self):
90 self.url = 'svn://a/b/c/d' 107 self.url = 'svn://a/b/c/d'
91 108
92 self.mox.ReplayAll() 109 self.mox.ReplayAll()
93 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 110 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
94 relpath=self.relpath) 111 relpath=self.relpath)
95 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') 112 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap')
113 self.checkstdout('')
96 114
97 def testGITFullUrlForRelativeUrl(self): 115 def testGITFullUrlForRelativeUrl(self):
98 self.url = 'git://a/b/c/d' 116 self.url = 'git://a/b/c/d'
99 117
100 self.mox.ReplayAll() 118 self.mox.ReplayAll()
101 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 119 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
102 relpath=self.relpath) 120 relpath=self.relpath)
103 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'git://a/b/c/crap') 121 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'git://a/b/c/crap')
122 self.checkstdout('')
104 123
105 def testRunCommandException(self): 124 def testRunCommandException(self):
106 options = self.Options(verbose=False) 125 options = self.Options(verbose=False)
107 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git') 126 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
108 gclient_scm.os.path.exists(file_path).AndReturn(False) 127 gclient_scm.os.path.exists(file_path).AndReturn(False)
109 128
110 self.mox.ReplayAll() 129 self.mox.ReplayAll()
111 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 130 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
112 relpath=self.relpath) 131 relpath=self.relpath)
113 exception = "Unsupported argument(s): %s" % ','.join(self.args) 132 exception = "Unsupported argument(s): %s" % ','.join(self.args)
114 self.assertRaisesError(exception, scm.RunCommand, 133 self.assertRaisesError(exception, scm.RunCommand,
115 'update', options, self.args) 134 'update', options, self.args)
135 self.checkstdout('')
116 136
117 def testRunCommandUnknown(self): 137 def testRunCommandUnknown(self):
118 # TODO(maruel): if ever used. 138 # TODO(maruel): if ever used.
119 pass 139 self.checkstdout('')
120 140
121 def testRevertMissing(self): 141 def testRevertMissing(self):
122 options = self.Options(verbose=True) 142 options = self.Options(verbose=True)
123 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 143 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
124 gclient_scm.os.path.isdir(base_path).AndReturn(False) 144 gclient_scm.os.path.isdir(base_path).AndReturn(False)
125 gclient_scm.scm.SVN.Capture(['--version'] 145 gclient_scm.scm.SVN.Capture(['--version']
126 ).AndReturn('svn, version 1.5.1 (r32289)') 146 ).AndReturn('svn, version 1.5.1 (r32289)')
127 # It'll to a checkout instead. 147 # It'll to a checkout instead.
128 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 148 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
129 ).AndReturn(False) 149 ).AndReturn(False)
130 print("\n_____ %s is missing, synching instead" % self.relpath)
131 # Checkout. 150 # Checkout.
132 gclient_scm.os.path.exists(base_path).AndReturn(False) 151 gclient_scm.os.path.exists(base_path).AndReturn(False)
133 files_list = self.mox.CreateMockAnything() 152 files_list = self.mox.CreateMockAnything()
134 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 153 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
135 ['checkout', self.url, base_path, 154 ['checkout', self.url, base_path,
136 '--force'], 155 '--force'],
137 cwd=self.root_dir, 156 cwd=self.root_dir,
138 file_list=files_list, 157 file_list=files_list,
139 stdout=options.stdout) 158 stdout=options.stdout)
140 159
141 self.mox.ReplayAll() 160 self.mox.ReplayAll()
142 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 161 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
143 relpath=self.relpath) 162 relpath=self.relpath)
144 scm.revert(options, self.args, files_list) 163 scm.revert(options, self.args, files_list)
164 self.checkstdout(
165 ('\n_____ %s is missing, synching instead\n' % self.relpath))
145 166
146 def testRevertNone(self): 167 def testRevertNone(self):
147 options = self.Options(verbose=True) 168 options = self.Options(verbose=True)
148 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 169 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
149 gclient_scm.os.path.isdir(base_path).AndReturn(True) 170 gclient_scm.os.path.isdir(base_path).AndReturn(True)
150 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn([]) 171 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn([])
151 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 172 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
152 ['update', '--revision', 'BASE'], 173 ['update', '--revision', 'BASE'],
153 cwd=base_path, 174 cwd=base_path,
154 file_list=mox.IgnoreArg(), 175 file_list=mox.IgnoreArg(),
155 stdout=options.stdout) 176 stdout=options.stdout)
156 177
157 self.mox.ReplayAll() 178 self.mox.ReplayAll()
158 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 179 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
159 relpath=self.relpath) 180 relpath=self.relpath)
160 file_list = [] 181 file_list = []
161 scm.revert(options, self.args, file_list) 182 scm.revert(options, self.args, file_list)
183 self.checkstdout('')
162 184
163 def testRevert2Files(self): 185 def testRevert2Files(self):
164 options = self.Options(verbose=True) 186 options = self.Options(verbose=True)
165 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 187 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
166 gclient_scm.os.path.isdir(base_path).AndReturn(True) 188 gclient_scm.os.path.isdir(base_path).AndReturn(True)
167 items = [ 189 items = [
168 ('M ', 'a'), 190 ('M ', 'a'),
169 ('A ', 'b'), 191 ('A ', 'b'),
170 ] 192 ]
171 file_path1 = gclient_scm.os.path.join(base_path, 'a') 193 file_path1 = gclient_scm.os.path.join(base_path, 'a')
172 file_path2 = gclient_scm.os.path.join(base_path, 'b') 194 file_path2 = gclient_scm.os.path.join(base_path, 'b')
173 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items) 195 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items)
174 gclient_scm.os.path.exists(file_path1).AndReturn(True) 196 gclient_scm.os.path.exists(file_path1).AndReturn(True)
175 gclient_scm.os.path.isfile(file_path1).AndReturn(True) 197 gclient_scm.os.path.isfile(file_path1).AndReturn(True)
176 gclient_scm.os.remove(file_path1) 198 gclient_scm.os.remove(file_path1)
177 gclient_scm.os.path.exists(file_path2).AndReturn(True) 199 gclient_scm.os.path.exists(file_path2).AndReturn(True)
178 gclient_scm.os.path.isfile(file_path2).AndReturn(True) 200 gclient_scm.os.path.isfile(file_path2).AndReturn(True)
179 gclient_scm.os.remove(file_path2) 201 gclient_scm.os.remove(file_path2)
180 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 202 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
181 ['update', '--revision', 'BASE'], 203 ['update', '--revision', 'BASE'],
182 cwd=base_path, 204 cwd=base_path,
183 file_list=mox.IgnoreArg(), 205 file_list=mox.IgnoreArg(),
184 stdout=options.stdout) 206 stdout=options.stdout)
185 print(gclient_scm.os.path.join(base_path, 'a'))
186 print(gclient_scm.os.path.join(base_path, 'b'))
187 207
188 self.mox.ReplayAll() 208 self.mox.ReplayAll()
189 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 209 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
190 relpath=self.relpath) 210 relpath=self.relpath)
191 file_list = [] 211 file_list = []
192 scm.revert(options, self.args, file_list) 212 scm.revert(options, self.args, file_list)
213 self.checkstdout(
214 ('%s\n%s\n' % (gclient_scm.os.path.join(base_path, 'a'),
215 gclient_scm.os.path.join(base_path, 'b'))))
193 216
194 def testRevertDirectory(self): 217 def testRevertDirectory(self):
195 options = self.Options(verbose=True) 218 options = self.Options(verbose=True)
196 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 219 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
197 gclient_scm.os.path.isdir(base_path).AndReturn(True) 220 gclient_scm.os.path.isdir(base_path).AndReturn(True)
198 items = [ 221 items = [
199 ('~ ', 'a'), 222 ('~ ', 'a'),
200 ] 223 ]
201 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items) 224 gclient_scm.scm.SVN.CaptureStatus(base_path).AndReturn(items)
202 file_path = gclient_scm.os.path.join(base_path, 'a') 225 file_path = gclient_scm.os.path.join(base_path, 'a')
203 print(file_path)
204 gclient_scm.os.path.exists(file_path).AndReturn(True) 226 gclient_scm.os.path.exists(file_path).AndReturn(True)
205 gclient_scm.os.path.isfile(file_path).AndReturn(False) 227 gclient_scm.os.path.isfile(file_path).AndReturn(False)
206 gclient_scm.os.path.islink(file_path).AndReturn(False) 228 gclient_scm.os.path.islink(file_path).AndReturn(False)
207 gclient_scm.os.path.isdir(file_path).AndReturn(True) 229 gclient_scm.os.path.isdir(file_path).AndReturn(True)
208 gclient_scm.gclient_utils.RemoveDirectory(file_path) 230 gclient_scm.gclient_utils.RemoveDirectory(file_path)
209 file_list1 = [] 231 file_list1 = []
210 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 232 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
211 ['update', '--revision', 'BASE'], 233 ['update', '--revision', 'BASE'],
212 cwd=base_path, 234 cwd=base_path,
213 file_list=mox.IgnoreArg(), 235 file_list=mox.IgnoreArg(),
214 stdout=options.stdout) 236 stdout=options.stdout)
215 237
216 self.mox.ReplayAll() 238 self.mox.ReplayAll()
217 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 239 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
218 relpath=self.relpath) 240 relpath=self.relpath)
219 file_list2 = [] 241 file_list2 = []
220 scm.revert(options, self.args, file_list2) 242 scm.revert(options, self.args, file_list2)
243 self.checkstdout(('%s\n' % file_path))
221 244
222 def testStatus(self): 245 def testStatus(self):
223 options = self.Options(verbose=True) 246 options = self.Options(verbose=True)
224 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 247 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
225 gclient_scm.os.path.isdir(base_path).AndReturn(True) 248 gclient_scm.os.path.isdir(base_path).AndReturn(True)
226 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 249 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
227 ['status'] + self.args, 250 ['status'] + self.args,
228 cwd=base_path, file_list=[], 251 cwd=base_path, file_list=[],
229 stdout=options.stdout).AndReturn(None) 252 stdout=options.stdout).AndReturn(None)
230 253
231 self.mox.ReplayAll() 254 self.mox.ReplayAll()
232 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 255 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
233 relpath=self.relpath) 256 relpath=self.relpath)
234 file_list = [] 257 file_list = []
235 self.assertEqual(scm.status(options, self.args, file_list), None) 258 self.assertEqual(scm.status(options, self.args, file_list), None)
236 259 self.checkstdout('')
237 260
238 # TODO(maruel): TEST REVISIONS!!! 261 # TODO(maruel): TEST REVISIONS!!!
239 # TODO(maruel): TEST RELOCATE!!! 262 # TODO(maruel): TEST RELOCATE!!!
240 def testUpdateCheckout(self): 263 def testUpdateCheckout(self):
241 options = self.Options(verbose=True) 264 options = self.Options(verbose=True)
242 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 265 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
243 file_info = gclient_scm.gclient_utils.PrintableObject() 266 file_info = gclient_scm.gclient_utils.PrintableObject()
244 file_info.root = 'blah' 267 file_info.root = 'blah'
245 file_info.url = self.url 268 file_info.url = self.url
246 file_info.uuid = 'ABC' 269 file_info.uuid = 'ABC'
247 file_info.revision = 42 270 file_info.revision = 42
248 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 271 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
249 ).AndReturn(False) 272 ).AndReturn(False)
250 # Checkout. 273 # Checkout.
251 gclient_scm.os.path.exists(base_path).AndReturn(False) 274 gclient_scm.os.path.exists(base_path).AndReturn(False)
252 files_list = self.mox.CreateMockAnything() 275 files_list = self.mox.CreateMockAnything()
253 gclient_scm.scm.SVN.Capture(['--version'] 276 gclient_scm.scm.SVN.Capture(['--version']
254 ).AndReturn('svn, version 1.5.1 (r32289)') 277 ).AndReturn('svn, version 1.5.1 (r32289)')
255 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, 278 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose,
256 ['checkout', self.url, base_path, 279 ['checkout', self.url, base_path,
257 '--force'], 280 '--force'],
258 cwd=self.root_dir, 281 cwd=self.root_dir,
259 file_list=files_list, 282 file_list=files_list,
260 stdout=options.stdout) 283 stdout=options.stdout)
261 self.mox.ReplayAll() 284 self.mox.ReplayAll()
262 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 285 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
263 relpath=self.relpath) 286 relpath=self.relpath)
264 scm.update(options, (), files_list) 287 scm.update(options, (), files_list)
288 self.checkstdout('')
265 289
266 def testUpdateUpdate(self): 290 def testUpdateUpdate(self):
267 options = self.Options(verbose=True) 291 options = self.Options(verbose=True)
268 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 292 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
269 options.force = True 293 options.force = True
270 options.nohooks = False 294 options.nohooks = False
271 file_info = { 295 file_info = {
272 'Repository Root': 'blah', 296 'Repository Root': 'blah',
273 'URL': self.url, 297 'URL': self.url,
274 'UUID': 'ABC', 298 'UUID': 'ABC',
275 'Revision': 42, 299 'Revision': 42,
276 } 300 }
277 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 301 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
278 ).AndReturn(False) 302 ).AndReturn(False)
279 303
280 # Verify no locked files. 304 # Verify no locked files.
281 gclient_scm.scm.SVN.CaptureStatus(gclient_scm.os.path.join(base_path, '.') 305 gclient_scm.scm.SVN.CaptureStatus(gclient_scm.os.path.join(base_path, '.')
282 ).AndReturn([]) 306 ).AndReturn([])
283 307
284 # Checkout or update. 308 # Checkout or update.
285 gclient_scm.os.path.exists(base_path).AndReturn(True) 309 gclient_scm.os.path.exists(base_path).AndReturn(True)
286 gclient_scm.scm.SVN.CaptureInfo( 310 gclient_scm.scm.SVN.CaptureInfo(
287 gclient_scm.os.path.join(base_path, "."), '.' 311 gclient_scm.os.path.join(base_path, ".")).AndReturn(file_info)
288 ).AndReturn(file_info)
289 # Cheat a bit here. 312 # Cheat a bit here.
290 gclient_scm.scm.SVN.CaptureInfo(file_info['URL'], '.').AndReturn(file_info) 313 gclient_scm.scm.SVN.CaptureInfo(file_info['URL']).AndReturn(file_info)
291 additional_args = [] 314 additional_args = []
292 if options.manually_grab_svn_rev: 315 if options.manually_grab_svn_rev:
293 additional_args = ['--revision', str(file_info['Revision'])] 316 additional_args = ['--revision', str(file_info['Revision'])]
294 gclient_scm.scm.SVN.Capture(['--version'] 317 gclient_scm.scm.SVN.Capture(['--version']
295 ).AndReturn('svn, version 1.5.1 (r32289)') 318 ).AndReturn('svn, version 1.5.1 (r32289)')
296 additional_args.append('--force') 319 additional_args.append('--force')
297 files_list = [] 320 files_list = []
298 gclient_scm.scm.SVN.RunAndGetFileList( 321 gclient_scm.scm.SVN.RunAndGetFileList(
299 options.verbose, 322 options.verbose,
300 ['update', base_path] + additional_args, 323 ['update', base_path] + additional_args,
301 cwd=self.root_dir, file_list=files_list, stdout=options.stdout) 324 cwd=self.root_dir, file_list=files_list, stdout=options.stdout)
302 325
303 self.mox.ReplayAll() 326 self.mox.ReplayAll()
304 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 327 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
305 relpath=self.relpath) 328 relpath=self.relpath)
306 scm.update(options, (), files_list) 329 scm.update(options, (), files_list)
330 self.checkstdout('')
307 331
308 def testUpdateSingleCheckout(self): 332 def testUpdateSingleCheckout(self):
309 options = self.Options(verbose=True) 333 options = self.Options(verbose=True)
310 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 334 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
311 file_info = { 335 file_info = {
312 'URL': self.url, 336 'URL': self.url,
313 'Revision': 42, 337 'Revision': 42,
314 } 338 }
315 339
316 # Checks to make sure that we support svn co --depth. 340 # Checks to make sure that we support svn co --depth.
(...skipping 15 matching lines...) Expand all
332 ['svn', 'checkout', '--depth', 'empty', self.url, base_path], 356 ['svn', 'checkout', '--depth', 'empty', self.url, base_path],
333 always=True, cwd=self.root_dir, stdout=options.stdout) 357 always=True, cwd=self.root_dir, stdout=options.stdout)
334 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, ['update', 'DEPS'], 358 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, ['update', 'DEPS'],
335 cwd=base_path, file_list=files_list, stdout=options.stdout) 359 cwd=base_path, file_list=files_list, stdout=options.stdout)
336 360
337 # Now we fall back on scm.update(). 361 # Now we fall back on scm.update().
338 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 362 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
339 ).AndReturn(False) 363 ).AndReturn(False)
340 gclient_scm.os.path.exists(base_path).AndReturn(True) 364 gclient_scm.os.path.exists(base_path).AndReturn(True)
341 gclient_scm.scm.SVN.CaptureInfo( 365 gclient_scm.scm.SVN.CaptureInfo(
342 gclient_scm.os.path.join(base_path, "."), '.' 366 gclient_scm.os.path.join(base_path, ".")).AndReturn(file_info)
343 ).AndReturn(file_info) 367 gclient_scm.scm.SVN.CaptureInfo(file_info['URL']).AndReturn(file_info)
344 gclient_scm.scm.SVN.CaptureInfo(file_info['URL'], '.').AndReturn(file_info)
345 options.stdout.write("\n_____ %s at 42" % self.relpath) 368 options.stdout.write("\n_____ %s at 42" % self.relpath)
346 options.stdout.write('\n') 369 options.stdout.write('\n')
347 370
348 self.mox.ReplayAll() 371 self.mox.ReplayAll()
349 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 372 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
350 relpath=self.relpath) 373 relpath=self.relpath)
351 scm.updatesingle(options, ['DEPS'], files_list) 374 scm.updatesingle(options, ['DEPS'], files_list)
375 self.checkstdout(
376 2 * ('\n_____ %s at 42\n' % self.relpath))
352 377
353 def testUpdateSingleCheckoutSVN14(self): 378 def testUpdateSingleCheckoutSVN14(self):
354 options = self.Options(verbose=True) 379 options = self.Options(verbose=True)
355 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 380 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
356 file_info = { 381 file_info = {
357 'URL': self.url, 382 'URL': self.url,
358 'Revision': 42, 383 'Revision': 42,
359 } 384 }
360 385
361 # Checks to make sure that we support svn co --depth. 386 # Checks to make sure that we support svn co --depth.
362 gclient_scm.scm.SVN.current_version = None 387 gclient_scm.scm.SVN.current_version = None
363 gclient_scm.scm.SVN.Capture(['--version'] 388 gclient_scm.scm.SVN.Capture(['--version']
364 ).AndReturn('svn, version 1.4.4 (r25188)') 389 ).AndReturn('svn, version 1.4.4 (r25188)')
365 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path) 390 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path)
366 ).AndReturn(True) 391 ).AndReturn(True)
367 392
368 # When checking out a single file with svn 1.4, we use svn export 393 # When checking out a single file with svn 1.4, we use svn export
369 files_list = self.mox.CreateMockAnything() 394 files_list = self.mox.CreateMockAnything()
370 gclient_scm.gclient_utils.CheckCallAndFilterAndHeader( 395 gclient_scm.gclient_utils.CheckCallAndFilterAndHeader(
371 ['svn', 'export', gclient_scm.os.path.join(self.url, 'DEPS'), 396 ['svn', 'export', gclient_scm.os.path.join(self.url, 'DEPS'),
372 gclient_scm.os.path.join(base_path, 'DEPS')], 397 gclient_scm.os.path.join(base_path, 'DEPS')],
373 always=True, cwd=self.root_dir, stdout=options.stdout) 398 always=True, cwd=self.root_dir, stdout=options.stdout)
374 399
375 self.mox.ReplayAll() 400 self.mox.ReplayAll()
376 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 401 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
377 relpath=self.relpath) 402 relpath=self.relpath)
378 scm.updatesingle(options, ['DEPS'], files_list) 403 scm.updatesingle(options, ['DEPS'], files_list)
404 self.checkstdout('')
379 405
380 def testUpdateSingleCheckoutSVNUpgrade(self): 406 def testUpdateSingleCheckoutSVNUpgrade(self):
381 options = self.Options(verbose=True) 407 options = self.Options(verbose=True)
382 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 408 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
383 file_info = { 409 file_info = {
384 'URL': self.url, 410 'URL': self.url,
385 'Revision': 42, 411 'Revision': 42,
386 } 412 }
387 413
388 # Checks to make sure that we support svn co --depth. 414 # Checks to make sure that we support svn co --depth.
(...skipping 18 matching lines...) Expand all
407 ['svn', 'checkout', '--depth', 'empty', self.url, base_path], 433 ['svn', 'checkout', '--depth', 'empty', self.url, base_path],
408 always=True, cwd=self.root_dir, stdout=options.stdout) 434 always=True, cwd=self.root_dir, stdout=options.stdout)
409 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, ['update', 'DEPS'], 435 gclient_scm.scm.SVN.RunAndGetFileList(options.verbose, ['update', 'DEPS'],
410 cwd=base_path, file_list=files_list, stdout=options.stdout) 436 cwd=base_path, file_list=files_list, stdout=options.stdout)
411 437
412 # Now we fall back on scm.update(). 438 # Now we fall back on scm.update().
413 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 439 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
414 ).AndReturn(False) 440 ).AndReturn(False)
415 gclient_scm.os.path.exists(base_path).AndReturn(True) 441 gclient_scm.os.path.exists(base_path).AndReturn(True)
416 gclient_scm.scm.SVN.CaptureInfo( 442 gclient_scm.scm.SVN.CaptureInfo(
417 gclient_scm.os.path.join(base_path, "."), '.' 443 gclient_scm.os.path.join(base_path, ".")).AndReturn(file_info)
418 ).AndReturn(file_info) 444 gclient_scm.scm.SVN.CaptureInfo(file_info['URL']).AndReturn(file_info)
419 gclient_scm.scm.SVN.CaptureInfo(file_info['URL'], '.').AndReturn(file_info)
420 print("\n_____ %s at 42" % self.relpath)
421 445
422 self.mox.ReplayAll() 446 self.mox.ReplayAll()
423 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 447 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
424 relpath=self.relpath) 448 relpath=self.relpath)
425 scm.updatesingle(options, ['DEPS'], files_list) 449 scm.updatesingle(options, ['DEPS'], files_list)
450 self.checkstdout(
451 ('\n_____ %s at 42\n' % self.relpath))
426 452
427 def testUpdateSingleUpdate(self): 453 def testUpdateSingleUpdate(self):
428 options = self.Options(verbose=True) 454 options = self.Options(verbose=True)
429 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 455 base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
430 file_info = { 456 file_info = {
431 'URL': self.url, 457 'URL': self.url,
432 'Revision': 42, 458 'Revision': 42,
433 } 459 }
434 # Checks to make sure that we support svn co --depth. 460 # Checks to make sure that we support svn co --depth.
435 gclient_scm.scm.SVN.current_version = None 461 gclient_scm.scm.SVN.current_version = None
436 gclient_scm.scm.SVN.Capture(['--version'] 462 gclient_scm.scm.SVN.Capture(['--version']
437 ).AndReturn('svn, version 1.5.1 (r32289)') 463 ).AndReturn('svn, version 1.5.1 (r32289)')
438 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.svn') 464 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.svn')
439 ).AndReturn(True) 465 ).AndReturn(True)
440 466
441 # Verify no locked files. 467 # Verify no locked files.
442 gclient_scm.scm.SVN.CaptureStatus(gclient_scm.os.path.join(base_path, '.') 468 gclient_scm.scm.SVN.CaptureStatus(gclient_scm.os.path.join(base_path, '.')
443 ).AndReturn([]) 469 ).AndReturn([])
444 470
445 # Now we fall back on scm.update(). 471 # Now we fall back on scm.update().
446 files_list = self.mox.CreateMockAnything() 472 files_list = self.mox.CreateMockAnything()
447 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git') 473 gclient_scm.os.path.exists(gclient_scm.os.path.join(base_path, '.git')
448 ).AndReturn(False) 474 ).AndReturn(False)
449 gclient_scm.os.path.exists(base_path).AndReturn(True) 475 gclient_scm.os.path.exists(base_path).AndReturn(True)
450 gclient_scm.scm.SVN.CaptureInfo( 476 gclient_scm.scm.SVN.CaptureInfo(
451 gclient_scm.os.path.join(base_path, "."), '.' 477 gclient_scm.os.path.join(base_path, ".")).AndReturn(file_info)
452 ).AndReturn(file_info) 478 gclient_scm.scm.SVN.CaptureInfo(file_info['URL']).AndReturn(file_info)
453 gclient_scm.scm.SVN.CaptureInfo(file_info['URL'], '.').AndReturn(file_info)
454 print("\n_____ %s at 42" % self.relpath)
455 479
456 self.mox.ReplayAll() 480 self.mox.ReplayAll()
457 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 481 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
458 relpath=self.relpath) 482 relpath=self.relpath)
459 scm.updatesingle(options, ['DEPS'], files_list) 483 scm.updatesingle(options, ['DEPS'], files_list)
484 self.checkstdout('\n_____ %s at 42\n' % self.relpath)
460 485
461 def testUpdateGit(self): 486 def testUpdateGit(self):
462 options = self.Options(verbose=True) 487 options = self.Options(verbose=True)
463 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git') 488 file_path = gclient_scm.os.path.join(self.root_dir, self.relpath, '.git')
464 gclient_scm.os.path.exists(file_path).AndReturn(True) 489 gclient_scm.os.path.exists(file_path).AndReturn(True)
465 print("________ found .git directory; skipping %s" % self.relpath)
466 490
467 self.mox.ReplayAll() 491 self.mox.ReplayAll()
468 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, 492 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir,
469 relpath=self.relpath) 493 relpath=self.relpath)
470 file_list = [] 494 file_list = []
471 scm.update(options, self.args, file_list) 495 scm.update(options, self.args, file_list)
bradn 2010/09/09 05:13:38 I suppose you could add self.expected_stdout defau
M-A Ruel 2010/09/09 13:24:15 scm.update() is the actual function being tested,
496 self.checkstdout(
497 ('________ found .git directory; skipping %s\n' % self.relpath))
472 498
473 499
474 class GitWrapperTestCase(BaseTestCase): 500 class GitWrapperTestCase(BaseTestCase):
475 """This class doesn't use pymox.""" 501 """This class doesn't use pymox."""
476 class OptionsObject(object): 502 class OptionsObject(object):
477 def __init__(self, test_case, verbose=False, revision=None): 503 def __init__(self, test_case, verbose=False, revision=None):
478 self.verbose = verbose 504 self.verbose = verbose
479 self.revision = revision 505 self.revision = revision
480 self.manually_grab_svn_rev = True 506 self.manually_grab_svn_rev = True
481 self.deps_os = None 507 self.deps_os = None
482 self.force = False 508 self.force = False
483 self.reset = False 509 self.reset = False
484 self.nohooks = False 510 self.nohooks = False
511 self.stdout = StringIO.StringIO()
485 512
486 sample_git_import = """blob 513 sample_git_import = """blob
487 mark :1 514 mark :1
488 data 6 515 data 6
489 Hello 516 Hello
490 517
491 blob 518 blob
492 mark :2 519 mark :2
493 data 4 520 data 4
494 Bye 521 Bye
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 stderr=STDOUT, cwd=path).communicate() 580 stderr=STDOUT, cwd=path).communicate()
554 return True 581 return True
555 582
556 def setUp(self): 583 def setUp(self):
557 self.args = self.Args() 584 self.args = self.Args()
558 self.url = 'git://foo' 585 self.url = 'git://foo'
559 self.root_dir = tempfile.mkdtemp() 586 self.root_dir = tempfile.mkdtemp()
560 self.relpath = '.' 587 self.relpath = '.'
561 self.base_path = gclient_scm.os.path.join(self.root_dir, self.relpath) 588 self.base_path = gclient_scm.os.path.join(self.root_dir, self.relpath)
562 self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path) 589 self.enabled = self.CreateGitRepo(self.sample_git_import, self.base_path)
563 SuperMoxBaseTestBase.setUp(self) 590 BaseTestBase.setUp(self)
564 591
565 def tearDown(self): 592 def tearDown(self):
566 SuperMoxBaseTestBase.tearDown(self) 593 BaseTestBase.tearDown(self)
567 rmtree(self.root_dir) 594 rmtree(self.root_dir)
568 595
569 def testDir(self): 596 def testDir(self):
570 members = [ 597 members = [
571 'FullUrlForRelativeUrl', 'RunCommand', 598 'FullUrlForRelativeUrl', 'RunCommand',
572 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert', 599 'cleanup', 'diff', 'export', 'pack', 'relpath', 'revert',
573 'revinfo', 'runhooks', 'status', 'update', 'url', 600 'revinfo', 'runhooks', 'status', 'update', 'url',
574 ] 601 ]
575 602
576 # If you add a member, be sure to add the relevant test! 603 # If you add a member, be sure to add the relevant test!
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 relpath=self.relpath) 805 relpath=self.relpath)
779 rev_info = scm.revinfo(options, (), None) 806 rev_info = scm.revinfo(options, (), None)
780 self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458') 807 self.assertEquals(rev_info, '069c602044c5388d2d15c3f875b057c852003458')
781 808
782 809
783 if __name__ == '__main__': 810 if __name__ == '__main__':
784 import unittest 811 import unittest
785 unittest.main() 812 unittest.main()
786 813
787 # vim: ts=2:sw=2:tw=80:et: 814 # vim: ts=2:sw=2:tw=80:et:
OLDNEW
« no previous file with comments | « scm.py ('k') | tests/scm_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698