OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # | 2 # |
3 # Copyright 2008-2009 Google Inc. All Rights Reserved. | 3 # Copyright 2008-2009 Google Inc. All Rights Reserved. |
4 # | 4 # |
5 # Licensed under the Apache License, Version 2.0 (the "License"); | 5 # Licensed under the Apache License, Version 2.0 (the "License"); |
6 # you may not use this file except in compliance with the License. | 6 # you may not use this file except in compliance with the License. |
7 # You may obtain a copy of the License at | 7 # You may obtain a copy of the License at |
8 # | 8 # |
9 # http://www.apache.org/licenses/LICENSE-2.0 | 9 # http://www.apache.org/licenses/LICENSE-2.0 |
10 # | 10 # |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 return random.choice((os.sep, '')) + _DirElts(max_elt_count, max_elt_length) | 57 return random.choice((os.sep, '')) + _DirElts(max_elt_count, max_elt_length) |
58 | 58 |
59 def Url(max_elt_count=4, max_elt_length=8): | 59 def Url(max_elt_count=4, max_elt_length=8): |
60 return ('svn://random_host:port/a' + | 60 return ('svn://random_host:port/a' + |
61 _DirElts(max_elt_count, max_elt_length).replace(os.sep, '/')) | 61 _DirElts(max_elt_count, max_elt_length).replace(os.sep, '/')) |
62 | 62 |
63 def RootDir(max_elt_count=4, max_elt_length=8): | 63 def RootDir(max_elt_count=4, max_elt_length=8): |
64 return os.sep + _DirElts(max_elt_count, max_elt_length) | 64 return os.sep + _DirElts(max_elt_count, max_elt_length) |
65 | 65 |
66 | 66 |
67 class BaseTestCase(unittest.TestCase): | 67 class BaseTestCase(mox.MoxTestBase): |
68 # Like unittest's assertRaises, but checks for Gclient.Error. | 68 # Like unittest's assertRaises, but checks for Gclient.Error. |
69 def assertRaisesError(self, msg, fn, *args, **kwargs): | 69 def assertRaisesError(self, msg, fn, *args, **kwargs): |
70 try: | 70 try: |
71 fn(*args, **kwargs) | 71 fn(*args, **kwargs) |
72 except gclient.Error, e: | 72 except gclient.Error, e: |
73 self.assertEquals(e.args[0], msg) | 73 self.assertEquals(e.args[0], msg) |
74 else: | 74 else: |
75 self.fail('%s not raised' % msg) | 75 self.fail('%s not raised' % msg) |
76 | 76 |
77 def compareMembers(self, object, members): | 77 def compareMembers(self, object, members): |
78 """If you add a member, be sure to add the relevant test!""" | 78 """If you add a member, be sure to add the relevant test!""" |
79 # Skip over members starting with '_' since they are usually not meant to | 79 # Skip over members starting with '_' since they are usually not meant to |
80 # be for public use. | 80 # be for public use. |
81 actual_members = [x for x in sorted(dir(object)) | 81 actual_members = [x for x in sorted(dir(object)) |
82 if not x.startswith('_')] | 82 if not x.startswith('_')] |
83 expected_members = sorted(members) | 83 expected_members = sorted(members) |
84 if actual_members != expected_members: | 84 if actual_members != expected_members: |
85 diff = ([i for i in actual_members if i not in expected_members] + | 85 diff = ([i for i in actual_members if i not in expected_members] + |
86 [i for i in expected_members if i not in actual_members]) | 86 [i for i in expected_members if i not in actual_members]) |
87 print diff | 87 print diff |
88 self.assertEqual(actual_members, expected_members) | 88 self.assertEqual(actual_members, expected_members) |
89 | 89 |
90 | 90 |
91 class GClientBaseTestCase(BaseTestCase): | 91 class GClientBaseTestCase(BaseTestCase): |
92 def Options(self, *args, **kwargs): | 92 def Options(self, *args, **kwargs): |
93 return self.OptionsObject(self, *args, **kwargs) | 93 return self.OptionsObject(self, *args, **kwargs) |
94 | 94 |
95 def setUp(self): | 95 def setUp(self): |
96 self.mox = mox.Mox() | 96 BaseTestCase.setUp(self) |
97 # Mock them to be sure nothing bad happens. | 97 # Mock them to be sure nothing bad happens. |
98 self._CaptureSVN = gclient.CaptureSVN | 98 self._CaptureSVN = gclient.CaptureSVN |
99 gclient.CaptureSVN = self.mox.CreateMockAnything() | 99 gclient.CaptureSVN = self.mox.CreateMockAnything() |
100 self._CaptureSVNInfo = gclient.CaptureSVNInfo | 100 self._CaptureSVNInfo = gclient.CaptureSVNInfo |
101 gclient.CaptureSVNInfo = self.mox.CreateMockAnything() | 101 gclient.CaptureSVNInfo = self.mox.CreateMockAnything() |
102 self._CaptureSVNStatus = gclient.CaptureSVNStatus | 102 self._CaptureSVNStatus = gclient.CaptureSVNStatus |
103 gclient.CaptureSVNStatus = self.mox.CreateMockAnything() | 103 gclient.CaptureSVNStatus = self.mox.CreateMockAnything() |
104 self._FileRead = gclient.FileRead | 104 self._FileRead = gclient.FileRead |
105 gclient.FileRead = self.mox.CreateMockAnything() | 105 gclient.FileRead = self.mox.CreateMockAnything() |
106 self._FileWrite = gclient.FileWrite | 106 self._FileWrite = gclient.FileWrite |
(...skipping 22 matching lines...) Expand all Loading... |
129 gclient.FileRead = self._FileRead | 129 gclient.FileRead = self._FileRead |
130 gclient.FileWrite = self._FileWrite | 130 gclient.FileWrite = self._FileWrite |
131 gclient.RemoveDirectory = self._RemoveDirectory | 131 gclient.RemoveDirectory = self._RemoveDirectory |
132 gclient.RunSVN = self._RunSVN | 132 gclient.RunSVN = self._RunSVN |
133 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList | 133 gclient.RunSVNAndGetFileList = self._RunSVNAndGetFileList |
134 gclient.sys.stdout = self._sys_stdout | 134 gclient.sys.stdout = self._sys_stdout |
135 gclient.subprocess = self._subprocess | 135 gclient.subprocess = self._subprocess |
136 gclient.os.path.exists = self._os_path_exists | 136 gclient.os.path.exists = self._os_path_exists |
137 gclient.GClient = self._gclient_gclient | 137 gclient.GClient = self._gclient_gclient |
138 gclient.SCMWrapper = self._scm_wrapper | 138 gclient.SCMWrapper = self._scm_wrapper |
| 139 BaseTestCase.tearDown(self) |
139 | 140 |
140 | 141 |
141 class GclientTestCase(GClientBaseTestCase): | 142 class GclientTestCase(GClientBaseTestCase): |
142 class OptionsObject(object): | 143 class OptionsObject(object): |
143 def __init__(self, test_case, verbose=False, spec=None, | 144 def __init__(self, test_case, verbose=False, spec=None, |
144 config_filename='a_file_name', | 145 config_filename='a_file_name', |
145 entries_filename='a_entry_file_name', | 146 entries_filename='a_entry_file_name', |
146 deps_file='a_deps_file_name', force=False): | 147 deps_file='a_deps_file_name', force=False): |
147 self.verbose = verbose | 148 self.verbose = verbose |
148 self.spec = spec | 149 self.spec = spec |
(...skipping 20 matching lines...) Expand all Loading... |
169 | 170 |
170 class GClientCommandsTestCase(GClientBaseTestCase): | 171 class GClientCommandsTestCase(GClientBaseTestCase): |
171 def testCommands(self): | 172 def testCommands(self): |
172 known_commands = [gclient.DoCleanup, gclient.DoConfig, gclient.DoDiff, | 173 known_commands = [gclient.DoCleanup, gclient.DoConfig, gclient.DoDiff, |
173 gclient.DoHelp, gclient.DoStatus, gclient.DoUpdate, | 174 gclient.DoHelp, gclient.DoStatus, gclient.DoUpdate, |
174 gclient.DoRevert, gclient.DoRunHooks, gclient.DoRevInfo] | 175 gclient.DoRevert, gclient.DoRunHooks, gclient.DoRevInfo] |
175 for (k,v) in gclient.gclient_command_map.iteritems(): | 176 for (k,v) in gclient.gclient_command_map.iteritems(): |
176 # If it fails, you need to add a test case for the new command. | 177 # If it fails, you need to add a test case for the new command. |
177 self.assert_(v in known_commands) | 178 self.assert_(v in known_commands) |
178 self.mox.ReplayAll() | 179 self.mox.ReplayAll() |
179 self.mox.VerifyAll() | |
180 | 180 |
181 class TestDoConfig(GclientTestCase): | 181 class TestDoConfig(GclientTestCase): |
182 def setUp(self): | |
183 GclientTestCase.setUp(self) | |
184 | |
185 def testMissingArgument(self): | 182 def testMissingArgument(self): |
186 exception_msg = "required argument missing; see 'gclient help config'" | 183 exception_msg = "required argument missing; see 'gclient help config'" |
187 | 184 |
188 self.mox.ReplayAll() | 185 self.mox.ReplayAll() |
189 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) | 186 self.assertRaisesError(exception_msg, gclient.DoConfig, self.Options(), ()) |
190 self.mox.VerifyAll() | |
191 | 187 |
192 def testExistingClientFile(self): | 188 def testExistingClientFile(self): |
193 options = self.Options() | 189 options = self.Options() |
194 exception_msg = ('%s file already exists in the current directory' % | 190 exception_msg = ('%s file already exists in the current directory' % |
195 options.config_filename) | 191 options.config_filename) |
196 gclient.os.path.exists(options.config_filename).AndReturn(True) | 192 gclient.os.path.exists(options.config_filename).AndReturn(True) |
197 | 193 |
198 self.mox.ReplayAll() | 194 self.mox.ReplayAll() |
199 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) | 195 self.assertRaisesError(exception_msg, gclient.DoConfig, options, (1,)) |
200 self.mox.VerifyAll() | |
201 | 196 |
202 def testFromText(self): | 197 def testFromText(self): |
203 options = self.Options(spec='config_source_content') | 198 options = self.Options(spec='config_source_content') |
204 gclient.os.path.exists(options.config_filename).AndReturn(False) | 199 gclient.os.path.exists(options.config_filename).AndReturn(False) |
205 gclient.GClient('.', options).AndReturn(gclient.GClient) | 200 gclient.GClient('.', options).AndReturn(gclient.GClient) |
206 gclient.GClient.SetConfig(options.spec) | 201 gclient.GClient.SetConfig(options.spec) |
207 gclient.GClient.SaveConfig() | 202 gclient.GClient.SaveConfig() |
208 | 203 |
209 self.mox.ReplayAll() | 204 self.mox.ReplayAll() |
210 gclient.DoConfig(options, (1,),) | 205 gclient.DoConfig(options, (1,),) |
211 self.mox.VerifyAll() | |
212 | 206 |
213 def testCreateClientFile(self): | 207 def testCreateClientFile(self): |
214 options = self.Options() | 208 options = self.Options() |
215 gclient.os.path.exists(options.config_filename).AndReturn(False) | 209 gclient.os.path.exists(options.config_filename).AndReturn(False) |
216 gclient.GClient('.', options).AndReturn(gclient.GClient) | 210 gclient.GClient('.', options).AndReturn(gclient.GClient) |
217 gclient.GClient.SetDefaultConfig('the_name', 'http://svn/url/the_name', | 211 gclient.GClient.SetDefaultConfig('the_name', 'http://svn/url/the_name', |
218 'other') | 212 'other') |
219 gclient.GClient.SaveConfig() | 213 gclient.GClient.SaveConfig() |
220 | 214 |
221 self.mox.ReplayAll() | 215 self.mox.ReplayAll() |
222 gclient.DoConfig(options, | 216 gclient.DoConfig(options, |
223 ('http://svn/url/the_name', 'other', 'args', 'ignored')) | 217 ('http://svn/url/the_name', 'other', 'args', 'ignored')) |
224 self.mox.VerifyAll() | |
225 | 218 |
226 | 219 |
227 class TestDoHelp(GclientTestCase): | 220 class TestDoHelp(GclientTestCase): |
228 def testGetUsage(self): | 221 def testGetUsage(self): |
229 print(gclient.COMMAND_USAGE_TEXT['config']) | 222 print(gclient.COMMAND_USAGE_TEXT['config']) |
230 self.mox.ReplayAll() | 223 self.mox.ReplayAll() |
231 options = self.Options() | 224 options = self.Options() |
232 gclient.DoHelp(options, ('config',)) | 225 gclient.DoHelp(options, ('config',)) |
233 self.mox.VerifyAll() | |
234 | 226 |
235 def testTooManyArgs(self): | 227 def testTooManyArgs(self): |
236 self.mox.ReplayAll() | 228 self.mox.ReplayAll() |
237 options = self.Options() | 229 options = self.Options() |
238 self.assertRaisesError("unknown subcommand 'config'; see 'gclient help'", | 230 self.assertRaisesError("unknown subcommand 'config'; see 'gclient help'", |
239 gclient.DoHelp, options, ('config', | 231 gclient.DoHelp, options, ('config', |
240 'another argument')) | 232 'another argument')) |
241 self.mox.VerifyAll() | |
242 | 233 |
243 def testUnknownSubcommand(self): | 234 def testUnknownSubcommand(self): |
244 self.mox.ReplayAll() | 235 self.mox.ReplayAll() |
245 options = self.Options() | 236 options = self.Options() |
246 self.assertRaisesError("unknown subcommand 'xyzzy'; see 'gclient help'", | 237 self.assertRaisesError("unknown subcommand 'xyzzy'; see 'gclient help'", |
247 gclient.DoHelp, options, ('xyzzy',)) | 238 gclient.DoHelp, options, ('xyzzy',)) |
248 self.mox.VerifyAll() | |
249 | 239 |
250 | 240 |
251 class GenericCommandTestCase(GclientTestCase): | 241 class GenericCommandTestCase(GclientTestCase): |
252 def ReturnValue(self, command, function, return_value): | 242 def ReturnValue(self, command, function, return_value): |
253 options = self.Options() | 243 options = self.Options() |
254 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) | 244 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
255 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) | 245 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) |
256 | 246 |
257 self.mox.ReplayAll() | 247 self.mox.ReplayAll() |
258 result = function(options, self.args) | 248 result = function(options, self.args) |
259 self.assertEquals(result, return_value) | 249 self.assertEquals(result, return_value) |
260 self.mox.VerifyAll() | |
261 | 250 |
262 def BadClient(self, function): | 251 def BadClient(self, function): |
263 options = self.Options() | 252 options = self.Options() |
264 gclient.GClient.LoadCurrentConfig(options).AndReturn(None) | 253 gclient.GClient.LoadCurrentConfig(options).AndReturn(None) |
265 | 254 |
266 self.mox.ReplayAll() | 255 self.mox.ReplayAll() |
267 self.assertRaisesError( | 256 self.assertRaisesError( |
268 "client not configured; see 'gclient config'", | 257 "client not configured; see 'gclient config'", |
269 function, options, self.args) | 258 function, options, self.args) |
270 self.mox.VerifyAll() | |
271 | 259 |
272 def Verbose(self, command, function): | 260 def Verbose(self, command, function): |
273 options = self.Options(verbose=True) | 261 options = self.Options(verbose=True) |
274 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) | 262 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
275 text = "# Dummy content\nclient = 'my client'" | 263 text = "# Dummy content\nclient = 'my client'" |
276 gclient.GClient.ConfigContent().AndReturn(text) | 264 gclient.GClient.ConfigContent().AndReturn(text) |
277 print(text) | 265 print(text) |
278 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) | 266 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) |
279 | 267 |
280 self.mox.ReplayAll() | 268 self.mox.ReplayAll() |
281 result = function(options, self.args) | 269 result = function(options, self.args) |
282 self.assertEquals(result, 0) | 270 self.assertEquals(result, 0) |
283 self.mox.VerifyAll() | |
284 | 271 |
285 class TestDoCleanup(GenericCommandTestCase): | 272 class TestDoCleanup(GenericCommandTestCase): |
286 def testGoodClient(self): | 273 def testGoodClient(self): |
287 self.ReturnValue('cleanup', gclient.DoCleanup, 0) | 274 self.ReturnValue('cleanup', gclient.DoCleanup, 0) |
288 def testError(self): | 275 def testError(self): |
289 self.ReturnValue('cleanup', gclient.DoCleanup, 42) | 276 self.ReturnValue('cleanup', gclient.DoCleanup, 42) |
290 def testBadClient(self): | 277 def testBadClient(self): |
291 self.BadClient(gclient.DoCleanup) | 278 self.BadClient(gclient.DoCleanup) |
292 | 279 |
293 class TestDoStatus(GenericCommandTestCase): | 280 class TestDoStatus(GenericCommandTestCase): |
(...skipping 23 matching lines...) Expand all Loading... |
317 | 304 |
318 def ReturnValue(self, command, function, return_value): | 305 def ReturnValue(self, command, function, return_value): |
319 options = self.Options() | 306 options = self.Options() |
320 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) | 307 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
321 gclient.GClient.GetVar("solutions") | 308 gclient.GClient.GetVar("solutions") |
322 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) | 309 gclient.GClient.RunOnDeps(command, self.args).AndReturn(return_value) |
323 | 310 |
324 self.mox.ReplayAll() | 311 self.mox.ReplayAll() |
325 result = function(options, self.args) | 312 result = function(options, self.args) |
326 self.assertEquals(result, return_value) | 313 self.assertEquals(result, return_value) |
327 self.mox.VerifyAll() | |
328 | 314 |
329 def Verbose(self, command, function): | 315 def Verbose(self, command, function): |
330 options = self.Options(verbose=True) | 316 options = self.Options(verbose=True) |
331 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) | 317 gclient.GClient.LoadCurrentConfig(options).AndReturn(gclient.GClient) |
332 gclient.GClient.GetVar("solutions") | 318 gclient.GClient.GetVar("solutions") |
333 text = "# Dummy content\nclient = 'my client'" | 319 text = "# Dummy content\nclient = 'my client'" |
334 gclient.GClient.ConfigContent().AndReturn(text) | 320 gclient.GClient.ConfigContent().AndReturn(text) |
335 print(text) | 321 print(text) |
336 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) | 322 gclient.GClient.RunOnDeps(command, self.args).AndReturn(0) |
337 | 323 |
338 self.mox.ReplayAll() | 324 self.mox.ReplayAll() |
339 result = function(options, self.args) | 325 result = function(options, self.args) |
340 self.assertEquals(result, 0) | 326 self.assertEquals(result, 0) |
341 self.mox.VerifyAll() | |
342 | 327 |
343 def Options(self, verbose=False, *args, **kwargs): | 328 def Options(self, verbose=False, *args, **kwargs): |
344 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) | 329 return self.OptionsObject(self, verbose=verbose, *args, **kwargs) |
345 | 330 |
346 def testBasic(self): | 331 def testBasic(self): |
347 self.ReturnValue('update', gclient.DoUpdate, 0) | 332 self.ReturnValue('update', gclient.DoUpdate, 0) |
348 def testError(self): | 333 def testError(self): |
349 self.ReturnValue('update', gclient.DoUpdate, 42) | 334 self.ReturnValue('update', gclient.DoUpdate, 42) |
350 def testBadClient(self): | 335 def testBadClient(self): |
351 self.BadClient(gclient.DoUpdate) | 336 self.BadClient(gclient.DoUpdate) |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 client.SetDefaultConfig(solution_name, solution_url, safesync_url) | 395 client.SetDefaultConfig(solution_name, solution_url, safesync_url) |
411 self.assertEqual(client.ConfigContent(), default_text) | 396 self.assertEqual(client.ConfigContent(), default_text) |
412 solutions = [{ | 397 solutions = [{ |
413 'name': solution_name, | 398 'name': solution_name, |
414 'url': solution_url, | 399 'url': solution_url, |
415 'custom_deps': {}, | 400 'custom_deps': {}, |
416 'safesync_url': safesync_url | 401 'safesync_url': safesync_url |
417 }] | 402 }] |
418 self.assertEqual(client.GetVar('solutions'), solutions) | 403 self.assertEqual(client.GetVar('solutions'), solutions) |
419 self.assertEqual(client.GetVar('foo'), None) | 404 self.assertEqual(client.GetVar('foo'), None) |
420 self.mox.VerifyAll() | |
421 | 405 |
422 def testLoadCurrentConfig(self): | 406 def testLoadCurrentConfig(self): |
423 options = self.Options() | 407 options = self.Options() |
424 path = os.path.realpath(self.root_dir) | 408 path = os.path.realpath(self.root_dir) |
425 gclient.os.path.exists(os.path.join(path, options.config_filename) | 409 gclient.os.path.exists(os.path.join(path, options.config_filename) |
426 ).AndReturn(True) | 410 ).AndReturn(True) |
427 gclient.GClient(path, options).AndReturn(gclient.GClient) | 411 gclient.GClient(path, options).AndReturn(gclient.GClient) |
428 gclient.GClient._LoadConfig() | 412 gclient.GClient._LoadConfig() |
429 | 413 |
430 self.mox.ReplayAll() | 414 self.mox.ReplayAll() |
431 client = self._gclient_gclient.LoadCurrentConfig(options, self.root_dir) | 415 client = self._gclient_gclient.LoadCurrentConfig(options, self.root_dir) |
432 self.mox.VerifyAll() | |
433 | 416 |
434 def testRunOnDepsNoDeps(self): | 417 def testRunOnDepsNoDeps(self): |
435 solution_name = 'testRunOnDepsNoDeps_solution_name' | 418 solution_name = 'testRunOnDepsNoDeps_solution_name' |
436 gclient_config = ( | 419 gclient_config = ( |
437 "solutions = [ {\n" | 420 "solutions = [ {\n" |
438 " 'name': '%s',\n" | 421 " 'name': '%s',\n" |
439 " 'url': '%s',\n" | 422 " 'url': '%s',\n" |
440 " 'custom_deps': {},\n" | 423 " 'custom_deps': {},\n" |
441 "} ]\n" | 424 "} ]\n" |
442 ) % (solution_name, self.url) | 425 ) % (solution_name, self.url) |
(...skipping 25 matching lines...) Expand all Loading... |
468 | 451 |
469 # After everything is done, an attempt is made to write an entries | 452 # After everything is done, an attempt is made to write an entries |
470 # file. | 453 # file. |
471 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 454 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
472 entries_content) | 455 entries_content) |
473 | 456 |
474 self.mox.ReplayAll() | 457 self.mox.ReplayAll() |
475 client = self._gclient_gclient(self.root_dir, options) | 458 client = self._gclient_gclient(self.root_dir, options) |
476 client.SetConfig(gclient_config) | 459 client.SetConfig(gclient_config) |
477 client.RunOnDeps('update', self.args) | 460 client.RunOnDeps('update', self.args) |
478 self.mox.VerifyAll() | |
479 | 461 |
480 def testRunOnDepsRelativePaths(self): | 462 def testRunOnDepsRelativePaths(self): |
481 solution_name = 'testRunOnDepsRelativePaths_solution_name' | 463 solution_name = 'testRunOnDepsRelativePaths_solution_name' |
482 gclient_config = ( | 464 gclient_config = ( |
483 "solutions = [ {\n" | 465 "solutions = [ {\n" |
484 " 'name': '%s',\n" | 466 " 'name': '%s',\n" |
485 " 'url': '%s',\n" | 467 " 'url': '%s',\n" |
486 " 'custom_deps': {},\n" | 468 " 'custom_deps': {},\n" |
487 "} ]\n" | 469 "} ]\n" |
488 ) % (solution_name, self.url) | 470 ) % (solution_name, self.url) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 | 517 |
536 # After everything is done, an attempt is made to write an entries | 518 # After everything is done, an attempt is made to write an entries |
537 # file. | 519 # file. |
538 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 520 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
539 entries_content) | 521 entries_content) |
540 | 522 |
541 self.mox.ReplayAll() | 523 self.mox.ReplayAll() |
542 client = self._gclient_gclient(self.root_dir, options) | 524 client = self._gclient_gclient(self.root_dir, options) |
543 client.SetConfig(gclient_config) | 525 client.SetConfig(gclient_config) |
544 client.RunOnDeps('update', self.args) | 526 client.RunOnDeps('update', self.args) |
545 self.mox.VerifyAll() | |
546 | 527 |
547 def testRunOnDepsCustomDeps(self): | 528 def testRunOnDepsCustomDeps(self): |
548 solution_name = 'testRunOnDepsCustomDeps_solution_name' | 529 solution_name = 'testRunOnDepsCustomDeps_solution_name' |
549 gclient_config = ( | 530 gclient_config = ( |
550 "solutions = [ {\n" | 531 "solutions = [ {\n" |
551 " 'name': '%s',\n" | 532 " 'name': '%s',\n" |
552 " 'url': '%s',\n" | 533 " 'url': '%s',\n" |
553 " 'custom_deps': {\n" | 534 " 'custom_deps': {\n" |
554 " 'src/b': None,\n" | 535 " 'src/b': None,\n" |
555 " 'src/n': 'svn://custom.n/trunk',\n" | 536 " 'src/n': 'svn://custom.n/trunk',\n" |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
617 | 598 |
618 # After everything is done, an attempt is made to write an entries | 599 # After everything is done, an attempt is made to write an entries |
619 # file. | 600 # file. |
620 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 601 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
621 entries_content) | 602 entries_content) |
622 | 603 |
623 self.mox.ReplayAll() | 604 self.mox.ReplayAll() |
624 client = self._gclient_gclient(self.root_dir, options) | 605 client = self._gclient_gclient(self.root_dir, options) |
625 client.SetConfig(gclient_config) | 606 client.SetConfig(gclient_config) |
626 client.RunOnDeps('update', self.args) | 607 client.RunOnDeps('update', self.args) |
627 self.mox.VerifyAll() | |
628 | 608 |
629 # Regression test for Issue #11. | 609 # Regression test for Issue #11. |
630 # http://code.google.com/p/gclient/issues/detail?id=11 | 610 # http://code.google.com/p/gclient/issues/detail?id=11 |
631 def testRunOnDepsSharedDependency(self): | 611 def testRunOnDepsSharedDependency(self): |
632 name_a = 'testRunOnDepsSharedDependency_a' | 612 name_a = 'testRunOnDepsSharedDependency_a' |
633 name_b = 'testRunOnDepsSharedDependency_b' | 613 name_b = 'testRunOnDepsSharedDependency_b' |
634 | 614 |
635 url_a = self.url + '/a' | 615 url_a = self.url + '/a' |
636 url_b = self.url + '/b' | 616 url_b = self.url + '/b' |
637 | 617 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 scm_wrapper_dep.RunCommand('update', options, self.args, []) | 681 scm_wrapper_dep.RunCommand('update', options, self.args, []) |
702 | 682 |
703 # After everything is done, an attempt is made to write an entries file. | 683 # After everything is done, an attempt is made to write an entries file. |
704 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 684 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
705 entries_content) | 685 entries_content) |
706 | 686 |
707 self.mox.ReplayAll() | 687 self.mox.ReplayAll() |
708 client = self._gclient_gclient(self.root_dir, options) | 688 client = self._gclient_gclient(self.root_dir, options) |
709 client.SetConfig(gclient_config) | 689 client.SetConfig(gclient_config) |
710 client.RunOnDeps('update', self.args) | 690 client.RunOnDeps('update', self.args) |
711 self.mox.VerifyAll() | |
712 | 691 |
713 def testRunOnDepsSuccess(self): | 692 def testRunOnDepsSuccess(self): |
714 # Fake .gclient file. | 693 # Fake .gclient file. |
715 name = 'testRunOnDepsSuccess_solution_name' | 694 name = 'testRunOnDepsSuccess_solution_name' |
716 gclient_config = """solutions = [ { | 695 gclient_config = """solutions = [ { |
717 'name': '%s', | 696 'name': '%s', |
718 'url': '%s', | 697 'url': '%s', |
719 'custom_deps': {}, | 698 'custom_deps': {}, |
720 }, ]""" % (name, self.url) | 699 }, ]""" % (name, self.url) |
721 | 700 |
722 options = self.Options() | 701 options = self.Options() |
723 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') | 702 gclient.os.path.exists(os.path.join(self.root_dir, name, '.git') |
724 ).AndReturn(False) | 703 ).AndReturn(False) |
725 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | 704 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) |
726 ).AndReturn(False) | 705 ).AndReturn(False) |
727 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( | 706 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
728 gclient.SCMWrapper) | 707 gclient.SCMWrapper) |
729 gclient.SCMWrapper.RunCommand('update', options, self.args, []) | 708 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
730 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 709 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
731 ).AndReturn("Boo = 'a'") | 710 ).AndReturn("Boo = 'a'") |
732 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | 711 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), |
733 'entries = [\n "%s",\n]\n' % name) | 712 'entries = [\n "%s",\n]\n' % name) |
734 | 713 |
735 self.mox.ReplayAll() | 714 self.mox.ReplayAll() |
736 client = self._gclient_gclient(self.root_dir, options) | 715 client = self._gclient_gclient(self.root_dir, options) |
737 client.SetConfig(gclient_config) | 716 client.SetConfig(gclient_config) |
738 client.RunOnDeps('update', self.args) | 717 client.RunOnDeps('update', self.args) |
739 self.mox.VerifyAll() | |
740 | 718 |
741 def testRunOnDepsRevisions(self): | 719 def testRunOnDepsRevisions(self): |
742 def OptIsRev(options, rev): | 720 def OptIsRev(options, rev): |
743 if not options.revision == str(rev): | 721 if not options.revision == str(rev): |
744 print("options.revision = %s" % options.revision) | 722 print("options.revision = %s" % options.revision) |
745 return options.revision == str(rev) | 723 return options.revision == str(rev) |
746 def OptIsRevNone(options): | 724 def OptIsRevNone(options): |
747 if options.revision: | 725 if options.revision: |
748 print("options.revision = %s" % options.revision) | 726 print("options.revision = %s" % options.revision) |
749 return options.revision == None | 727 return options.revision == None |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 self.root_dir, | 830 self.root_dir, |
853 'src/third_party/python_24').AndReturn( | 831 'src/third_party/python_24').AndReturn( |
854 scm_wrapper_python) | 832 scm_wrapper_python) |
855 scm_wrapper_python.RunCommand('update', mox.Func(OptIsRevNone), self.args, | 833 scm_wrapper_python.RunCommand('update', mox.Func(OptIsRevNone), self.args, |
856 []) | 834 []) |
857 | 835 |
858 self.mox.ReplayAll() | 836 self.mox.ReplayAll() |
859 client = self._gclient_gclient(self.root_dir, options) | 837 client = self._gclient_gclient(self.root_dir, options) |
860 client.SetConfig(gclient_config) | 838 client.SetConfig(gclient_config) |
861 client.RunOnDeps('update', self.args) | 839 client.RunOnDeps('update', self.args) |
862 self.mox.VerifyAll() | |
863 | 840 |
864 def testRunOnDepsConflictingRevisions(self): | 841 def testRunOnDepsConflictingRevisions(self): |
865 # Fake .gclient file. | 842 # Fake .gclient file. |
866 name = 'testRunOnDepsConflictingRevisions_solution_name' | 843 name = 'testRunOnDepsConflictingRevisions_solution_name' |
867 gclient_config = """solutions = [ { | 844 gclient_config = """solutions = [ { |
868 'name': '%s', | 845 'name': '%s', |
869 'url': '%s', | 846 'url': '%s', |
870 'custom_deps': {}, | 847 'custom_deps': {}, |
871 'custom_vars': {}, | 848 'custom_vars': {}, |
872 }, ]""" % (name, self.url) | 849 }, ]""" % (name, self.url) |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 ).AndReturn(webkit_path) | 912 ).AndReturn(webkit_path) |
936 | 913 |
937 gclient.SCMWrapper(webkit_path, self.root_dir, | 914 gclient.SCMWrapper(webkit_path, self.root_dir, |
938 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) | 915 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) |
939 gclient.SCMWrapper.RunCommand('update', options, self.args, []) | 916 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
940 | 917 |
941 self.mox.ReplayAll() | 918 self.mox.ReplayAll() |
942 client = self._gclient_gclient(self.root_dir, options) | 919 client = self._gclient_gclient(self.root_dir, options) |
943 client.SetConfig(gclient_config) | 920 client.SetConfig(gclient_config) |
944 client.RunOnDeps('update', self.args) | 921 client.RunOnDeps('update', self.args) |
945 self.mox.VerifyAll() | |
946 | 922 |
947 def testRunOnDepsSuccessCustomVars(self): | 923 def testRunOnDepsSuccessCustomVars(self): |
948 # Fake .gclient file. | 924 # Fake .gclient file. |
949 name = 'testRunOnDepsSuccessCustomVars_solution_name' | 925 name = 'testRunOnDepsSuccessCustomVars_solution_name' |
950 gclient_config = """solutions = [ { | 926 gclient_config = """solutions = [ { |
951 'name': '%s', | 927 'name': '%s', |
952 'url': '%s', | 928 'url': '%s', |
953 'custom_deps': {}, | 929 'custom_deps': {}, |
954 'custom_vars': {'webkit': '/trunk/bar_custom/'}, | 930 'custom_vars': {'webkit': '/trunk/bar_custom/'}, |
955 }, ]""" % (name, self.url) | 931 }, ]""" % (name, self.url) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 ).AndReturn(webkit_path) | 968 ).AndReturn(webkit_path) |
993 | 969 |
994 gclient.SCMWrapper(webkit_path, self.root_dir, | 970 gclient.SCMWrapper(webkit_path, self.root_dir, |
995 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) | 971 'foo/third_party/WebKit').AndReturn(gclient.SCMWrapper) |
996 gclient.SCMWrapper.RunCommand('update', options, self.args, []) | 972 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
997 | 973 |
998 self.mox.ReplayAll() | 974 self.mox.ReplayAll() |
999 client = self._gclient_gclient(self.root_dir, options) | 975 client = self._gclient_gclient(self.root_dir, options) |
1000 client.SetConfig(gclient_config) | 976 client.SetConfig(gclient_config) |
1001 client.RunOnDeps('update', self.args) | 977 client.RunOnDeps('update', self.args) |
1002 self.mox.VerifyAll() | |
1003 | 978 |
1004 def testRunOnDepsFailueVars(self): | 979 def testRunOnDepsFailureVars(self): |
1005 # Fake .gclient file. | 980 # Fake .gclient file. |
1006 name = 'testRunOnDepsFailureVars_solution_name' | 981 name = 'testRunOnDepsFailureVars_solution_name' |
1007 gclient_config = """solutions = [ { | 982 gclient_config = """solutions = [ { |
1008 'name': '%s', | 983 'name': '%s', |
1009 'url': '%s', | 984 'url': '%s', |
1010 'custom_deps': {}, | 985 'custom_deps': {}, |
1011 'custom_vars': {}, | 986 'custom_vars': {}, |
1012 }, ]""" % (name, self.url) | 987 }, ]""" % (name, self.url) |
1013 # Fake DEPS file. | 988 # Fake DEPS file. |
1014 deps_content = """deps = { | 989 deps_content = """deps = { |
1015 'foo/third_party/WebKit': Var('webkit') + 'WebKit', | 990 'foo/third_party/WebKit': Var('webkit') + 'WebKit', |
1016 }""" | 991 }""" |
1017 | 992 |
1018 options = self.Options() | 993 options = self.Options() |
1019 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) | 994 gclient.FileRead(os.path.join(self.root_dir, name, options.deps_file) |
1020 ).AndReturn(deps_content) | 995 ).AndReturn(deps_content) |
1021 gclient.FileWrite(os.path.join(self.root_dir, options.entries_filename), | |
1022 'dummy entries content') | |
1023 | |
1024 gclient.os.path.exists(os.path.join(self.root_dir, options.entries_filename) | |
1025 ).AndReturn(False) | |
1026 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( | 996 gclient.SCMWrapper(self.url, self.root_dir, name).AndReturn( |
1027 gclient.SCMWrapper) | 997 gclient.SCMWrapper) |
1028 gclient.SCMWrapper.RunCommand('update', options, self.args, []) | 998 gclient.SCMWrapper.RunCommand('update', options, self.args, []) |
1029 | 999 |
1030 self.mox.ReplayAll() | 1000 self.mox.ReplayAll() |
1031 client = self._gclient_gclient(self.root_dir, options) | 1001 client = self._gclient_gclient(self.root_dir, options) |
1032 client.SetConfig(gclient_config) | 1002 client.SetConfig(gclient_config) |
1033 exception = "Var is not defined: webkit" | 1003 exception = "Var is not defined: webkit" |
1034 try: | 1004 try: |
1035 client.RunOnDeps('update', self.args) | 1005 client.RunOnDeps('update', self.args) |
1036 except gclient.Error, e: | 1006 except gclient.Error, e: |
1037 self.assertEquals(e.args[0], exception) | 1007 self.assertEquals(e.args[0], exception) |
1038 else: | 1008 else: |
1039 self.fail('%s not raised' % exception) | 1009 self.fail('%s not raised' % exception) |
1040 | 1010 |
1041 def testRunOnDepsFailureInvalidCommand(self): | 1011 def testRunOnDepsFailureInvalidCommand(self): |
1042 options = self.Options() | 1012 options = self.Options() |
1043 | 1013 |
1044 self.mox.ReplayAll() | 1014 self.mox.ReplayAll() |
1045 client = self._gclient_gclient(self.root_dir, options) | 1015 client = self._gclient_gclient(self.root_dir, options) |
1046 exception = "'foo' is an unsupported command" | 1016 exception = "'foo' is an unsupported command" |
1047 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, | 1017 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, |
1048 'foo', self.args) | 1018 'foo', self.args) |
1049 self.mox.VerifyAll() | |
1050 | 1019 |
1051 def testRunOnDepsFailureEmpty(self): | 1020 def testRunOnDepsFailureEmpty(self): |
1052 options = self.Options() | 1021 options = self.Options() |
1053 | 1022 |
1054 self.mox.ReplayAll() | 1023 self.mox.ReplayAll() |
1055 client = self._gclient_gclient(self.root_dir, options) | 1024 client = self._gclient_gclient(self.root_dir, options) |
1056 exception = "No solution specified" | 1025 exception = "No solution specified" |
1057 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, | 1026 self.assertRaisesError(exception, self._gclient_gclient.RunOnDeps, client, |
1058 'update', self.args) | 1027 'update', self.args) |
1059 self.mox.VerifyAll() | |
1060 | 1028 |
1061 def testFromImpl(self): | 1029 def testFromImpl(self): |
1062 # TODO(maruel): Test me! | 1030 # TODO(maruel): Test me! |
1063 pass | 1031 pass |
1064 | 1032 |
1065 def test_PrintRevInfo(self): | 1033 def test_PrintRevInfo(self): |
1066 # TODO(aharper): no test yet for revinfo, lock it down once we've verified | 1034 # TODO(aharper): no test yet for revinfo, lock it down once we've verified |
1067 # implementation for Pulse plugin | 1035 # implementation for Pulse plugin |
1068 pass | 1036 pass |
1069 | 1037 |
(...skipping 24 matching lines...) Expand all Loading... |
1094 def setUp(self): | 1062 def setUp(self): |
1095 GClientBaseTestCase.setUp(self) | 1063 GClientBaseTestCase.setUp(self) |
1096 self.root_dir = Dir() | 1064 self.root_dir = Dir() |
1097 self.args = Args() | 1065 self.args = Args() |
1098 self.url = Url() | 1066 self.url = Url() |
1099 self.relpath = 'asf' | 1067 self.relpath = 'asf' |
1100 self._os_path_isdir = gclient.os.path.isdir | 1068 self._os_path_isdir = gclient.os.path.isdir |
1101 gclient.os.path.isdir = self.mox.CreateMockAnything() | 1069 gclient.os.path.isdir = self.mox.CreateMockAnything() |
1102 | 1070 |
1103 def tearDown(self): | 1071 def tearDown(self): |
| 1072 gclient.os.path.isdir = self._os_path_isdir |
1104 GClientBaseTestCase.tearDown(self) | 1073 GClientBaseTestCase.tearDown(self) |
1105 gclient.os.path.isdir = self._os_path_isdir | |
1106 | 1074 |
1107 def testDir(self): | 1075 def testDir(self): |
1108 members = [ | 1076 members = [ |
1109 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', | 1077 'FullUrlForRelativeUrl', 'RunCommand', 'cleanup', 'diff', 'relpath', |
1110 'revert', 'scm_name', 'status', 'update', 'url', | 1078 'revert', 'scm_name', 'status', 'update', 'url', |
1111 ] | 1079 ] |
1112 | 1080 |
1113 # If you add a member, be sure to add the relevant test! | 1081 # If you add a member, be sure to add the relevant test! |
1114 self.compareMembers(self._scm_wrapper(), members) | 1082 self.compareMembers(self._scm_wrapper(), members) |
1115 | 1083 |
1116 def testFullUrlForRelativeUrl(self): | 1084 def testFullUrlForRelativeUrl(self): |
1117 self.url = 'svn://a/b/c/d' | 1085 self.url = 'svn://a/b/c/d' |
1118 | 1086 |
1119 self.mox.ReplayAll() | 1087 self.mox.ReplayAll() |
1120 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1088 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1121 relpath=self.relpath) | 1089 relpath=self.relpath) |
1122 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') | 1090 self.assertEqual(scm.FullUrlForRelativeUrl('/crap'), 'svn://a/b/crap') |
1123 self.mox.VerifyAll() | |
1124 | 1091 |
1125 def testRunCommandException(self): | 1092 def testRunCommandException(self): |
1126 options = self.Options(verbose=False) | 1093 options = self.Options(verbose=False) |
1127 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') | 1094 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
1128 ).AndReturn(False) | 1095 ).AndReturn(False) |
1129 | 1096 |
1130 self.mox.ReplayAll() | 1097 self.mox.ReplayAll() |
1131 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1098 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1132 relpath=self.relpath) | 1099 relpath=self.relpath) |
1133 exception = "Unsupported argument(s): %s" % ','.join(self.args) | 1100 exception = "Unsupported argument(s): %s" % ','.join(self.args) |
1134 self.assertRaisesError(exception, self._scm_wrapper.RunCommand, | 1101 self.assertRaisesError(exception, self._scm_wrapper.RunCommand, |
1135 scm, 'update', options, self.args) | 1102 scm, 'update', options, self.args) |
1136 self.mox.VerifyAll() | |
1137 | 1103 |
1138 def testRunCommandUnknown(self): | 1104 def testRunCommandUnknown(self): |
1139 # TODO(maruel): if ever used. | 1105 # TODO(maruel): if ever used. |
1140 pass | 1106 pass |
1141 | 1107 |
1142 def testRevertMissing(self): | 1108 def testRevertMissing(self): |
1143 options = self.Options(verbose=True) | 1109 options = self.Options(verbose=True) |
1144 base_path = os.path.join(self.root_dir, self.relpath) | 1110 base_path = os.path.join(self.root_dir, self.relpath) |
1145 gclient.os.path.isdir(base_path).AndReturn(False) | 1111 gclient.os.path.isdir(base_path).AndReturn(False) |
1146 # It'll to a checkout instead. | 1112 # It'll to a checkout instead. |
1147 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1113 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
1148 print("\n_____ %s is missing, synching instead" % self.relpath) | 1114 print("\n_____ %s is missing, synching instead" % self.relpath) |
1149 # Checkout. | 1115 # Checkout. |
1150 gclient.os.path.exists(base_path).AndReturn(False) | 1116 gclient.os.path.exists(base_path).AndReturn(False) |
1151 files_list = self.mox.CreateMockAnything() | 1117 files_list = self.mox.CreateMockAnything() |
1152 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1118 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
1153 self.root_dir, files_list) | 1119 self.root_dir, files_list) |
1154 | 1120 |
1155 self.mox.ReplayAll() | 1121 self.mox.ReplayAll() |
1156 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1122 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1157 relpath=self.relpath) | 1123 relpath=self.relpath) |
1158 scm.revert(options, self.args, files_list) | 1124 scm.revert(options, self.args, files_list) |
1159 self.mox.VerifyAll() | |
1160 | 1125 |
1161 def testRevertNone(self): | 1126 def testRevertNone(self): |
1162 options = self.Options(verbose=True) | 1127 options = self.Options(verbose=True) |
1163 base_path = os.path.join(self.root_dir, self.relpath) | 1128 base_path = os.path.join(self.root_dir, self.relpath) |
1164 gclient.os.path.isdir(base_path).AndReturn(True) | 1129 gclient.os.path.isdir(base_path).AndReturn(True) |
1165 gclient.CaptureSVNStatus(base_path).AndReturn([]) | 1130 gclient.CaptureSVNStatus(base_path).AndReturn([]) |
1166 | 1131 |
1167 self.mox.ReplayAll() | 1132 self.mox.ReplayAll() |
1168 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1133 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1169 relpath=self.relpath) | 1134 relpath=self.relpath) |
1170 file_list = [] | 1135 file_list = [] |
1171 scm.revert(options, self.args, file_list) | 1136 scm.revert(options, self.args, file_list) |
1172 self.mox.VerifyAll() | |
1173 | 1137 |
1174 def testRevert2Files(self): | 1138 def testRevert2Files(self): |
1175 options = self.Options(verbose=True) | 1139 options = self.Options(verbose=True) |
1176 base_path = os.path.join(self.root_dir, self.relpath) | 1140 base_path = os.path.join(self.root_dir, self.relpath) |
1177 gclient.os.path.isdir(base_path).AndReturn(True) | 1141 gclient.os.path.isdir(base_path).AndReturn(True) |
1178 items = [ | 1142 items = [ |
1179 ('M ', 'a'), | 1143 ('M ', 'a'), |
1180 ('A ', 'b'), | 1144 ('A ', 'b'), |
1181 ] | 1145 ] |
1182 gclient.CaptureSVNStatus(base_path).AndReturn(items) | 1146 gclient.CaptureSVNStatus(base_path).AndReturn(items) |
1183 | 1147 |
1184 print(os.path.join(base_path, 'a')) | 1148 print(os.path.join(base_path, 'a')) |
1185 print(os.path.join(base_path, 'b')) | 1149 print(os.path.join(base_path, 'b')) |
1186 gclient.RunSVN(['revert', 'a', 'b'], base_path) | 1150 gclient.RunSVN(['revert', 'a', 'b'], base_path) |
1187 | 1151 |
1188 self.mox.ReplayAll() | 1152 self.mox.ReplayAll() |
1189 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1153 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1190 relpath=self.relpath) | 1154 relpath=self.relpath) |
1191 file_list = [] | 1155 file_list = [] |
1192 scm.revert(options, self.args, file_list) | 1156 scm.revert(options, self.args, file_list) |
1193 self.mox.VerifyAll() | |
1194 | 1157 |
1195 def testStatus(self): | 1158 def testStatus(self): |
1196 options = self.Options(verbose=True) | 1159 options = self.Options(verbose=True) |
1197 base_path = os.path.join(self.root_dir, self.relpath) | 1160 base_path = os.path.join(self.root_dir, self.relpath) |
1198 gclient.os.path.isdir(base_path).AndReturn(True) | 1161 gclient.os.path.isdir(base_path).AndReturn(True) |
1199 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, | 1162 gclient.RunSVNAndGetFileList(['status'] + self.args, base_path, |
1200 []).AndReturn(None) | 1163 []).AndReturn(None) |
1201 | 1164 |
1202 self.mox.ReplayAll() | 1165 self.mox.ReplayAll() |
1203 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1166 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1204 relpath=self.relpath) | 1167 relpath=self.relpath) |
1205 file_list = [] | 1168 file_list = [] |
1206 self.assertEqual(scm.status(options, self.args, file_list), None) | 1169 self.assertEqual(scm.status(options, self.args, file_list), None) |
1207 self.mox.VerifyAll() | |
1208 | 1170 |
1209 | 1171 |
1210 # TODO(maruel): TEST REVISIONS!!! | 1172 # TODO(maruel): TEST REVISIONS!!! |
1211 # TODO(maruel): TEST RELOCATE!!! | 1173 # TODO(maruel): TEST RELOCATE!!! |
1212 def testUpdateCheckout(self): | 1174 def testUpdateCheckout(self): |
1213 options = self.Options(verbose=True) | 1175 options = self.Options(verbose=True) |
1214 base_path = os.path.join(self.root_dir, self.relpath) | 1176 base_path = os.path.join(self.root_dir, self.relpath) |
1215 file_info = gclient.PrintableObject() | 1177 file_info = gclient.PrintableObject() |
1216 file_info.root = 'blah' | 1178 file_info.root = 'blah' |
1217 file_info.url = self.url | 1179 file_info.url = self.url |
1218 file_info.uuid = 'ABC' | 1180 file_info.uuid = 'ABC' |
1219 file_info.revision = 42 | 1181 file_info.revision = 42 |
1220 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1182 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
1221 # Checkout. | 1183 # Checkout. |
1222 gclient.os.path.exists(base_path).AndReturn(False) | 1184 gclient.os.path.exists(base_path).AndReturn(False) |
1223 files_list = self.mox.CreateMockAnything() | 1185 files_list = self.mox.CreateMockAnything() |
1224 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], | 1186 gclient.RunSVNAndGetFileList(['checkout', self.url, base_path], |
1225 self.root_dir, files_list) | 1187 self.root_dir, files_list) |
1226 self.mox.ReplayAll() | 1188 self.mox.ReplayAll() |
1227 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1189 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1228 relpath=self.relpath) | 1190 relpath=self.relpath) |
1229 scm.update(options, (), files_list) | 1191 scm.update(options, (), files_list) |
1230 self.mox.VerifyAll() | |
1231 | 1192 |
1232 def testUpdateUpdate(self): | 1193 def testUpdateUpdate(self): |
1233 options = self.Options(verbose=True) | 1194 options = self.Options(verbose=True) |
1234 base_path = os.path.join(self.root_dir, self.relpath) | 1195 base_path = os.path.join(self.root_dir, self.relpath) |
1235 options.force = True | 1196 options.force = True |
1236 file_info = { | 1197 file_info = { |
1237 'Repository Root': 'blah', | 1198 'Repository Root': 'blah', |
1238 'URL': self.url, | 1199 'URL': self.url, |
1239 'UUID': 'ABC', | 1200 'UUID': 'ABC', |
1240 'Revision': 42, | 1201 'Revision': 42, |
1241 } | 1202 } |
1242 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) | 1203 gclient.os.path.exists(os.path.join(base_path, '.git')).AndReturn(False) |
1243 # Checkout or update. | 1204 # Checkout or update. |
1244 gclient.os.path.exists(base_path).AndReturn(True) | 1205 gclient.os.path.exists(base_path).AndReturn(True) |
1245 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' | 1206 gclient.CaptureSVNInfo(os.path.join(base_path, "."), '.' |
1246 ).AndReturn(file_info) | 1207 ).AndReturn(file_info) |
1247 # Cheat a bit here. | 1208 # Cheat a bit here. |
1248 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) | 1209 gclient.CaptureSVNInfo(file_info['URL'], '.').AndReturn(file_info) |
1249 additional_args = [] | 1210 additional_args = [] |
1250 if options.manually_grab_svn_rev: | 1211 if options.manually_grab_svn_rev: |
1251 additional_args = ['--revision', str(file_info['Revision'])] | 1212 additional_args = ['--revision', str(file_info['Revision'])] |
1252 files_list = [] | 1213 files_list = [] |
1253 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, | 1214 gclient.RunSVNAndGetFileList(['update', base_path] + additional_args, |
1254 self.root_dir, files_list) | 1215 self.root_dir, files_list) |
1255 | 1216 |
1256 self.mox.ReplayAll() | 1217 self.mox.ReplayAll() |
1257 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1218 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1258 relpath=self.relpath) | 1219 relpath=self.relpath) |
1259 scm.update(options, (), files_list) | 1220 scm.update(options, (), files_list) |
1260 self.mox.VerifyAll() | |
1261 | 1221 |
1262 def testUpdateGit(self): | 1222 def testUpdateGit(self): |
1263 options = self.Options(verbose=True) | 1223 options = self.Options(verbose=True) |
1264 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') | 1224 gclient.os.path.exists(os.path.join(self.root_dir, self.relpath, '.git') |
1265 ).AndReturn(True) | 1225 ).AndReturn(True) |
1266 print("________ found .git directory; skipping %s" % self.relpath) | 1226 print("________ found .git directory; skipping %s" % self.relpath) |
1267 | 1227 |
1268 self.mox.ReplayAll() | 1228 self.mox.ReplayAll() |
1269 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, | 1229 scm = self._scm_wrapper(url=self.url, root_dir=self.root_dir, |
1270 relpath=self.relpath) | 1230 relpath=self.relpath) |
1271 file_list = [] | 1231 file_list = [] |
1272 scm.update(options, self.args, file_list) | 1232 scm.update(options, self.args, file_list) |
1273 self.mox.VerifyAll() | |
1274 | 1233 |
1275 def testGetSVNFileInfo(self): | 1234 def testGetSVNFileInfo(self): |
1276 xml_text = r"""<?xml version="1.0"?> | 1235 xml_text = r"""<?xml version="1.0"?> |
1277 <info> | 1236 <info> |
1278 <entry kind="file" path="%s" revision="14628"> | 1237 <entry kind="file" path="%s" revision="14628"> |
1279 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url> | 1238 <url>http://src.chromium.org/svn/trunk/src/chrome/app/d</url> |
1280 <repository><root>http://src.chromium.org/svn</root></repository> | 1239 <repository><root>http://src.chromium.org/svn</root></repository> |
1281 <wc-info> | 1240 <wc-info> |
1282 <schedule>add</schedule> | 1241 <schedule>add</schedule> |
1283 <depth>infinity</depth> | 1242 <depth>infinity</depth> |
(...skipping 13 matching lines...) Expand all Loading... |
1297 'Schedule': 'add', | 1256 'Schedule': 'add', |
1298 'Copied From URL': 'http://src.chromium.org/svn/trunk/src/chrome/app/DEPS'
, | 1257 'Copied From URL': 'http://src.chromium.org/svn/trunk/src/chrome/app/DEPS'
, |
1299 'Copied From Rev': '14628', | 1258 'Copied From Rev': '14628', |
1300 'Path': self.url, | 1259 'Path': self.url, |
1301 'Revision': 14628, | 1260 'Revision': 14628, |
1302 'Node Kind': 'file', | 1261 'Node Kind': 'file', |
1303 } | 1262 } |
1304 self.mox.ReplayAll() | 1263 self.mox.ReplayAll() |
1305 file_info = self._CaptureSVNInfo(self.url, '.', True) | 1264 file_info = self._CaptureSVNInfo(self.url, '.', True) |
1306 self.assertEquals(sorted(file_info.items()), sorted(expected.items())) | 1265 self.assertEquals(sorted(file_info.items()), sorted(expected.items())) |
1307 self.mox.VerifyAll() | |
1308 | 1266 |
1309 def testCaptureSvnInfo(self): | 1267 def testCaptureSvnInfo(self): |
1310 xml_text = """<?xml version="1.0"?> | 1268 xml_text = """<?xml version="1.0"?> |
1311 <info> | 1269 <info> |
1312 <entry | 1270 <entry |
1313 kind="dir" | 1271 kind="dir" |
1314 path="." | 1272 path="." |
1315 revision="35"> | 1273 revision="35"> |
1316 <url>%s</url> | 1274 <url>%s</url> |
1317 <repository> | 1275 <repository> |
(...skipping 21 matching lines...) Expand all Loading... |
1339 'UUID': '7b9385f5-0452-0410-af26-ad4892b7a1fb', | 1297 'UUID': '7b9385f5-0452-0410-af26-ad4892b7a1fb', |
1340 'Revision': 35, | 1298 'Revision': 35, |
1341 'Repository Root': self.root_dir, | 1299 'Repository Root': self.root_dir, |
1342 'Schedule': 'normal', | 1300 'Schedule': 'normal', |
1343 'Copied From URL': None, | 1301 'Copied From URL': None, |
1344 'Copied From Rev': None, | 1302 'Copied From Rev': None, |
1345 'Path': '.', | 1303 'Path': '.', |
1346 'Node Kind': 'dir', | 1304 'Node Kind': 'dir', |
1347 } | 1305 } |
1348 self.assertEqual(file_info, expected) | 1306 self.assertEqual(file_info, expected) |
1349 self.mox.VerifyAll() | |
1350 | 1307 |
1351 | 1308 |
1352 class RunSVNTestCase(BaseTestCase): | 1309 class RunSVNTestCase(BaseTestCase): |
1353 def setUp(self): | 1310 def setUp(self): |
1354 self.mox = mox.Mox() | 1311 BaseTestCase.setUp(self) |
1355 self._OldSubprocessCall = gclient.SubprocessCall | 1312 self._OldSubprocessCall = gclient.SubprocessCall |
1356 gclient.SubprocessCall = self.mox.CreateMockAnything() | 1313 gclient.SubprocessCall = self.mox.CreateMockAnything() |
1357 | 1314 |
1358 def tearDown(self): | 1315 def tearDown(self): |
1359 gclient.SubprocessCall = self._OldSubprocessCall | 1316 gclient.SubprocessCall = self._OldSubprocessCall |
| 1317 BaseTestCase.tearDown(self) |
1360 | 1318 |
1361 def testRunSVN(self): | 1319 def testRunSVN(self): |
1362 param2 = 'bleh' | 1320 param2 = 'bleh' |
1363 gclient.SubprocessCall(['svn', 'foo', 'bar'], param2).AndReturn(None) | 1321 gclient.SubprocessCall(['svn', 'foo', 'bar'], param2).AndReturn(None) |
1364 self.mox.ReplayAll() | 1322 self.mox.ReplayAll() |
1365 gclient.RunSVN(['foo', 'bar'], param2) | 1323 gclient.RunSVN(['foo', 'bar'], param2) |
1366 self.mox.VerifyAll() | |
1367 | 1324 |
1368 | 1325 |
1369 class SubprocessCallAndCaptureTestCase(BaseTestCase): | 1326 class SubprocessCallAndCaptureTestCase(BaseTestCase): |
1370 def setUp(self): | 1327 def setUp(self): |
1371 self.mox = mox.Mox() | 1328 BaseTestCase.setUp(self) |
1372 self._sys_stdout = gclient.sys.stdout | 1329 self._sys_stdout = gclient.sys.stdout |
1373 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) | 1330 gclient.sys.stdout = self.mox.CreateMock(self._sys_stdout) |
1374 self._subprocess_Popen = gclient.subprocess.Popen | 1331 self._subprocess_Popen = gclient.subprocess.Popen |
1375 gclient.subprocess.Popen = self.mox.CreateMockAnything() | 1332 gclient.subprocess.Popen = self.mox.CreateMockAnything() |
1376 self._CaptureSVN = gclient.CaptureSVN | 1333 self._CaptureSVN = gclient.CaptureSVN |
1377 gclient.CaptureSVN = self.mox.CreateMockAnything() | 1334 gclient.CaptureSVN = self.mox.CreateMockAnything() |
1378 | 1335 |
1379 def tearDown(self): | 1336 def tearDown(self): |
1380 gclient.sys.stdout = self._sys_stdout | 1337 gclient.sys.stdout = self._sys_stdout |
1381 gclient.subprocess.Popen = self._subprocess_Popen | 1338 gclient.subprocess.Popen = self._subprocess_Popen |
1382 gclient.CaptureSVN = self._CaptureSVN | 1339 gclient.CaptureSVN = self._CaptureSVN |
| 1340 BaseTestCase.tearDown(self) |
1383 | 1341 |
1384 def testSubprocessCallAndCapture(self): | 1342 def testSubprocessCallAndCapture(self): |
1385 command = ['boo', 'foo', 'bar'] | 1343 command = ['boo', 'foo', 'bar'] |
1386 in_directory = 'bleh' | 1344 in_directory = 'bleh' |
1387 fail_status = None | 1345 fail_status = None |
1388 pattern = 'a(.*)b' | 1346 pattern = 'a(.*)b' |
1389 test_string = 'ahah\naccb\nallo\naddb\n' | 1347 test_string = 'ahah\naccb\nallo\naddb\n' |
1390 class Mock(object): | 1348 class Mock(object): |
1391 stdout = StringIO.StringIO(test_string) | 1349 stdout = StringIO.StringIO(test_string) |
1392 def wait(self): | 1350 def wait(self): |
1393 pass | 1351 pass |
1394 kid = Mock() | 1352 kid = Mock() |
1395 print("\n________ running 'boo foo bar' in 'bleh'") | 1353 print("\n________ running 'boo foo bar' in 'bleh'") |
1396 for i in test_string: | 1354 for i in test_string: |
1397 gclient.sys.stdout.write(i) | 1355 gclient.sys.stdout.write(i) |
1398 gclient.subprocess.Popen(command, bufsize=0, cwd=in_directory, | 1356 gclient.subprocess.Popen(command, bufsize=0, cwd=in_directory, |
1399 shell=(sys.platform == 'win32'), | 1357 shell=(sys.platform == 'win32'), |
1400 stdout=gclient.subprocess.PIPE).AndReturn(kid) | 1358 stdout=gclient.subprocess.PIPE).AndReturn(kid) |
1401 self.mox.ReplayAll() | 1359 self.mox.ReplayAll() |
1402 capture_list = [] | 1360 capture_list = [] |
1403 gclient.SubprocessCallAndCapture(command, in_directory, fail_status, | 1361 gclient.SubprocessCallAndCapture(command, in_directory, fail_status, |
1404 pattern, capture_list) | 1362 pattern, capture_list) |
1405 self.assertEquals(capture_list, ['cc', 'dd']) | 1363 self.assertEquals(capture_list, ['cc', 'dd']) |
1406 self.mox.VerifyAll() | |
1407 | 1364 |
1408 def testCaptureSVNStatus(self): | 1365 def testCaptureSVNStatus(self): |
1409 x = self | 1366 x = self |
1410 def CaptureSVNMock(command, in_directory=None, print_error=True): | 1367 def CaptureSVNMock(command, in_directory=None, print_error=True): |
1411 x.assertEquals(in_directory, None) | 1368 x.assertEquals(in_directory, None) |
1412 x.assertEquals(print_error, True) | 1369 x.assertEquals(print_error, True) |
1413 x.assertEquals(['status', '--xml', '.'], command) | 1370 x.assertEquals(['status', '--xml', '.'], command) |
1414 return r"""<?xml version="1.0"?> | 1371 return r"""<?xml version="1.0"?> |
1415 <status> | 1372 <status> |
1416 <target path="."> | 1373 <target path="."> |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 """ | 1430 """ |
1474 gclient.CaptureSVN = CaptureSVNMock | 1431 gclient.CaptureSVN = CaptureSVNMock |
1475 info = gclient.CaptureSVNStatus(None) | 1432 info = gclient.CaptureSVNStatus(None) |
1476 self.assertEquals(info, []) | 1433 self.assertEquals(info, []) |
1477 | 1434 |
1478 | 1435 |
1479 if __name__ == '__main__': | 1436 if __name__ == '__main__': |
1480 unittest.main() | 1437 unittest.main() |
1481 | 1438 |
1482 # vim: ts=2:sw=2:tw=80:et: | 1439 # vim: ts=2:sw=2:tw=80:et: |
OLD | NEW |