OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Unit tests for gcl.py.""" | 6 """Unit tests for gcl.py.""" |
7 | 7 |
8 # Fixes include path. | 8 # Fixes include path. |
9 from super_mox import mox, SuperMoxTestBase | 9 from super_mox import mox, SuperMoxTestBase |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 gcl.REPOSITORY_ROOT = None | 26 gcl.REPOSITORY_ROOT = None |
27 | 27 |
28 | 28 |
29 class GclUnittest(GclTestsBase): | 29 class GclUnittest(GclTestsBase): |
30 """General gcl.py tests.""" | 30 """General gcl.py tests.""" |
31 def testMembersChanged(self): | 31 def testMembersChanged(self): |
32 self.mox.ReplayAll() | 32 self.mox.ReplayAll() |
33 members = [ | 33 members = [ |
34 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'Change', | 34 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'Change', |
35 'ChangeInfo', 'Changes', 'Commit', 'DEFAULT_LINT_IGNORE_REGEX', | 35 'ChangeInfo', 'Changes', 'Commit', 'DEFAULT_LINT_IGNORE_REGEX', |
36 'DEFAULT_LINT_REGEX', 'DeleteEmptyChangeLists', 'DoPresubmitChecks', | 36 'DEFAULT_LINT_REGEX', 'CheckHomeForFile', 'DeleteEmptyChangeLists', |
37 'ErrorExit', 'FILES_CACHE', 'FilterFlag', 'GenerateChangeName', | 37 'DoPresubmitChecks', 'ErrorExit', 'FILES_CACHE', 'FilterFlag', |
38 'GenerateDiff', 'GetCLs', 'GetCacheDir', 'GetCachedFile', | 38 'GenerateChangeName', 'GenerateDiff', 'GetCLs', 'GetCacheDir', |
39 'GetChangelistInfoFile', 'GetChangesDir', 'GetCodeReviewSetting', | 39 'GetCachedFile', 'GetChangelistInfoFile', 'GetChangesDir', |
40 'GetEditor', 'GetFilesNotInCL', 'GetInfoDir', 'GetIssueDescription', | 40 'GetCodeReviewSetting', 'GetEditor', 'GetFilesNotInCL', 'GetInfoDir', |
41 'GetModifiedFiles', 'GetRepositoryRoot', 'Help', 'Lint', | 41 'GetIssueDescription', 'GetModifiedFiles', 'GetRepositoryRoot', 'Help', |
42 'LoadChangelistInfoForMultiple', 'MISSING_TEST_MSG', 'Opened', | 42 'Lint', 'LoadChangelistInfoForMultiple', 'MISSING_TEST_MSG', 'Opened', |
43 'OptionallyDoPresubmitChecks', 'PresubmitCL', 'REPOSITORY_ROOT', | 43 'OptionallyDoPresubmitChecks', 'PresubmitCL', 'REPOSITORY_ROOT', |
44 'RunShell', 'RunShellWithReturnCode', 'SVN', | 44 'RunShell', 'RunShellWithReturnCode', 'SVN', |
45 'SendToRietveld', 'TryChange', 'UnknownFiles', 'UploadCL', 'Warn', | 45 'SendToRietveld', 'TryChange', 'UnknownFiles', 'UploadCL', 'Warn', |
46 'breakpad', 'gclient_utils', 'getpass', 'main', 'os', 'random', 're', | 46 'breakpad', 'gclient_utils', 'getpass', 'main', 'os', 'random', 're', |
47 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 'upload', | 47 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 'upload', |
48 'urllib2', | 48 'urllib2', |
49 ] | 49 ] |
50 # If this test fails, you should add the relevant test. | 50 # If this test fails, you should add the relevant test. |
51 self.compareMembers(gcl, members) | 51 self.compareMembers(gcl, members) |
52 | 52 |
53 def testIsSVNMoved(self): | 53 def testIsSVNMoved(self): |
54 # TODO(maruel): TEST ME | 54 # TODO(maruel): TEST ME |
55 pass | 55 pass |
56 | 56 |
57 def testGetSVNFileProperty(self): | 57 def testGetSVNFileProperty(self): |
58 # TODO(maruel): TEST ME | 58 # TODO(maruel): TEST ME |
59 pass | 59 pass |
60 | 60 |
61 def testUnknownFiles(self): | 61 def testUnknownFiles(self): |
62 # TODO(maruel): TEST ME | 62 # TODO(maruel): TEST ME |
63 pass | 63 pass |
64 | 64 |
| 65 def testCheckHomeForFile(self): |
| 66 # TODO(maruel): TEST ME |
| 67 pass |
| 68 |
65 def testGetRepositoryRootNone(self): | 69 def testGetRepositoryRootNone(self): |
66 gcl.os.getcwd().AndReturn(self.fake_root_dir) | 70 gcl.os.getcwd().AndReturn(self.fake_root_dir) |
67 gcl.SVN.GetCheckoutRoot(self.fake_root_dir).AndReturn(None) | 71 gcl.SVN.GetCheckoutRoot(self.fake_root_dir).AndReturn(None) |
68 self.mox.ReplayAll() | 72 self.mox.ReplayAll() |
69 self.assertRaises(gcl.gclient_utils.Error, gcl.GetRepositoryRoot) | 73 self.assertRaises(gcl.gclient_utils.Error, gcl.GetRepositoryRoot) |
70 | 74 |
71 def testGetRepositoryRootGood(self): | 75 def testGetRepositoryRootGood(self): |
72 root_path = gcl.os.path.join('bleh', 'prout', 'pouet') | 76 root_path = gcl.os.path.join('bleh', 'prout', 'pouet') |
73 gcl.os.getcwd().AndReturn(root_path) | 77 gcl.os.getcwd().AndReturn(root_path) |
74 gcl.SVN.GetCheckoutRoot(root_path).AndReturn(root_path + '.~') | 78 gcl.SVN.GetCheckoutRoot(root_path).AndReturn(root_path + '.~') |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 self.mox.ReplayAll() | 226 self.mox.ReplayAll() |
223 | 227 |
224 change_info = gcl.ChangeInfo('', 0, 0, '', None, self.fake_root_dir, | 228 change_info = gcl.ChangeInfo('', 0, 0, '', None, self.fake_root_dir, |
225 needs_upload=True) | 229 needs_upload=True) |
226 change_info.Save() | 230 change_info.Save() |
227 | 231 |
228 | 232 |
229 class UploadCLUnittest(GclTestsBase): | 233 class UploadCLUnittest(GclTestsBase): |
230 def setUp(self): | 234 def setUp(self): |
231 GclTestsBase.setUp(self) | 235 GclTestsBase.setUp(self) |
| 236 self.mox.StubOutWithMock(gcl, 'CheckHomeForFile') |
232 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') | 237 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') |
233 self.mox.StubOutWithMock(gcl, 'GenerateDiff') | 238 self.mox.StubOutWithMock(gcl, 'GenerateDiff') |
234 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') | 239 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') |
235 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') | 240 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') |
236 self.mox.StubOutWithMock(gcl, 'SendToRietveld') | 241 self.mox.StubOutWithMock(gcl, 'SendToRietveld') |
237 self.mox.StubOutWithMock(gcl, 'TryChange') | 242 self.mox.StubOutWithMock(gcl, 'TryChange') |
238 | 243 |
239 def testNew(self): | 244 def testNew(self): |
240 change_info = self.mox.CreateMock(gcl.ChangeInfo) | 245 change_info = self.mox.CreateMock(gcl.ChangeInfo) |
241 change_info.name = 'naame' | 246 change_info.name = 'naame' |
242 change_info.issue = 1 | 247 change_info.issue = 1 |
243 change_info.patchset = 0 | 248 change_info.patchset = 0 |
244 change_info.description = 'deescription', | 249 change_info.description = 'deescription', |
245 change_info.files = [('A', 'aa'), ('M', 'bb')] | 250 change_info.files = [('A', 'aa'), ('M', 'bb')] |
246 change_info.patch = None | 251 change_info.patch = None |
247 files = [item[1] for item in change_info.files] | 252 files = [item[1] for item in change_info.files] |
248 args = ['--foo=bar'] | 253 args = ['--foo=bar'] |
| 254 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
249 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 255 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
250 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 256 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
251 gcl.os.getcwd().AndReturn('somewhere') | 257 gcl.os.getcwd().AndReturn('somewhere') |
252 change_info.GetFiles().AndReturn(change_info.files) | 258 change_info.GetFiles().AndReturn(change_info.files) |
253 change_info.GetLocalRoot().AndReturn('proout') | 259 change_info.GetLocalRoot().AndReturn('proout') |
254 gcl.os.chdir('proout') | 260 gcl.os.chdir('proout') |
255 change_info.GetFileNames().AndReturn(files) | 261 change_info.GetFileNames().AndReturn(files) |
256 gcl.GenerateDiff(files) | 262 gcl.GenerateDiff(files) |
257 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', | 263 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', |
258 "--message=''", '--issue=1'], change_info.patch).AndReturn(("1", | 264 "--message=''", '--issue=1'], change_info.patch).AndReturn(("1", |
259 "2")) | 265 "2")) |
260 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 266 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
261 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 267 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
262 gcl.TryChange(change_info, [], swallow_exception=True) | 268 gcl.TryChange(change_info, [], swallow_exception=True) |
263 gcl.os.chdir('somewhere') | 269 gcl.os.chdir('somewhere') |
264 change_info.Save() | 270 change_info.Save() |
265 self.mox.ReplayAll() | 271 self.mox.ReplayAll() |
266 | 272 |
267 gcl.UploadCL(change_info, args) | 273 gcl.UploadCL(change_info, args) |
268 | 274 |
269 def testServerOverride(self): | 275 def testServerOverride(self): |
270 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', | 276 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
271 [('A', 'aa'), ('M', 'bb')], | 277 [('A', 'aa'), ('M', 'bb')], |
272 self.fake_root_dir) | 278 self.fake_root_dir) |
273 self.mox.StubOutWithMock(change_info, 'Save') | 279 self.mox.StubOutWithMock(change_info, 'Save') |
274 args = ['--server=a', '--no_watchlists'] | 280 args = ['--server=a', '--no_watchlists'] |
275 change_info.Save() | 281 change_info.Save() |
| 282 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
276 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 283 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
277 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 284 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
278 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 285 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
279 gcl.os.write(42, change_info.description) | 286 gcl.os.write(42, change_info.description) |
280 gcl.os.close(42) | 287 gcl.os.close(42) |
281 gcl.GetCodeReviewSetting('CC_LIST') | 288 gcl.GetCodeReviewSetting('CC_LIST') |
282 gcl.GetCodeReviewSetting('PRIVATE') | 289 gcl.GetCodeReviewSetting('PRIVATE') |
283 gcl.os.getcwd().AndReturn('somewhere') | 290 gcl.os.getcwd().AndReturn('somewhere') |
284 gcl.os.chdir(change_info.GetLocalRoot()) | 291 gcl.os.chdir(change_info.GetLocalRoot()) |
285 gcl.GenerateDiff(change_info.GetFileNames()) | 292 gcl.GenerateDiff(change_info.GetFileNames()) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 | 327 |
321 gcl.UploadCL(change_info, args) | 328 gcl.UploadCL(change_info, args) |
322 | 329 |
323 def testNormal(self): | 330 def testNormal(self): |
324 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', | 331 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
325 [('A', 'aa'), ('M', 'bb')], | 332 [('A', 'aa'), ('M', 'bb')], |
326 self.fake_root_dir) | 333 self.fake_root_dir) |
327 self.mox.StubOutWithMock(change_info, 'Save') | 334 self.mox.StubOutWithMock(change_info, 'Save') |
328 args = ['--no_watchlists'] | 335 args = ['--no_watchlists'] |
329 change_info.Save() | 336 change_info.Save() |
| 337 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
330 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 338 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
331 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 339 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
332 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 340 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
333 gcl.os.write(42, change_info.description) | 341 gcl.os.write(42, change_info.description) |
334 gcl.os.close(42) | 342 gcl.os.close(42) |
335 gcl.GetCodeReviewSetting('CC_LIST') | 343 gcl.GetCodeReviewSetting('CC_LIST') |
336 gcl.GetCodeReviewSetting('PRIVATE') | 344 gcl.GetCodeReviewSetting('PRIVATE') |
337 gcl.os.getcwd().AndReturn('somewhere') | 345 gcl.os.getcwd().AndReturn('somewhere') |
338 gcl.os.chdir(change_info.GetLocalRoot()) | 346 gcl.os.chdir(change_info.GetLocalRoot()) |
339 gcl.GenerateDiff(change_info.GetFileNames()) | 347 gcl.GenerateDiff(change_info.GetFileNames()) |
340 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', | 348 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
341 "--description_file=descfile", | 349 "--description_file=descfile", |
342 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 350 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
343 gcl.os.remove('descfile') | 351 gcl.os.remove('descfile') |
344 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 352 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
345 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 353 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
346 gcl.TryChange(change_info, [], swallow_exception=True) | 354 gcl.TryChange(change_info, [], swallow_exception=True) |
347 gcl.os.chdir('somewhere') | 355 gcl.os.chdir('somewhere') |
348 self.mox.ReplayAll() | 356 self.mox.ReplayAll() |
349 | 357 |
350 gcl.UploadCL(change_info, args) | 358 gcl.UploadCL(change_info, args) |
351 self.assertEquals(change_info.issue, 1) | 359 self.assertEquals(change_info.issue, 1) |
352 self.assertEquals(change_info.patchset, 2) | 360 self.assertEquals(change_info.patchset, 2) |
353 | 361 |
354 | 362 |
355 if __name__ == '__main__': | 363 if __name__ == '__main__': |
356 import unittest | 364 import unittest |
357 unittest.main() | 365 unittest.main() |
OLD | NEW |