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 16 matching lines...) Expand all Loading... |
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', | 34 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', |
35 'CMDchange', 'CMDchanges', 'CMDcommit', 'CMDdelete', 'CMDdeleteempties', | 35 'CMDchange', 'CMDchanges', 'CMDcommit', 'CMDdelete', 'CMDdeleteempties', |
36 'CMDdescription', 'CMDdiff', 'CMDhelp', 'CMDlint', 'CMDnothave', | 36 'CMDdescription', 'CMDdiff', 'CMDhelp', 'CMDlint', 'CMDnothave', |
37 'CMDopened', 'CMDpresubmit', 'CMDrename', 'CMDsettings', 'CMDstatus', | 37 'CMDopened', 'CMDpassthru', 'CMDpresubmit', 'CMDrename', 'CMDsettings', |
38 'CMDtry', 'CMDupload', | 38 'CMDstatus', 'CMDtry', 'CMDupload', |
39 'ChangeInfo', 'DEFAULT_LINT_IGNORE_REGEX', | 39 'ChangeInfo', 'DEFAULT_LINT_IGNORE_REGEX', |
40 'DEFAULT_LINT_REGEX', 'CheckHomeForFile', | 40 'DEFAULT_LINT_REGEX', 'CheckHomeForFile', |
41 'DoPresubmitChecks', 'ErrorExit', 'FILES_CACHE', 'FilterFlag', | 41 'DoPresubmitChecks', 'ErrorExit', 'FILES_CACHE', 'FilterFlag', |
42 'GenerateChangeName', 'GenerateDiff', 'GetCLs', 'GetCacheDir', | 42 'GenerateChangeName', 'GenerateDiff', 'GetCLs', 'GetCacheDir', |
43 'GetCachedFile', 'GetChangelistInfoFile', 'GetChangesDir', | 43 'GetCachedFile', 'GetChangelistInfoFile', 'GetChangesDir', |
44 'GetCodeReviewSetting', 'GetEditor', 'GetFilesNotInCL', 'GetInfoDir', | 44 'GetCodeReviewSetting', 'GetEditor', 'GetFilesNotInCL', 'GetInfoDir', |
45 'GetIssueDescription', 'GetModifiedFiles', 'GetRepositoryRoot', | 45 'GetIssueDescription', 'GetModifiedFiles', 'GetRepositoryRoot', |
46 'ListFiles', | 46 'ListFiles', |
47 'LoadChangelistInfoForMultiple', 'MISSING_TEST_MSG', | 47 'LoadChangelistInfoForMultiple', 'MISSING_TEST_MSG', |
48 'OptionallyDoPresubmitChecks', 'REPOSITORY_ROOT', | 48 'OptionallyDoPresubmitChecks', 'REPOSITORY_ROOT', |
49 'RunShell', 'RunShellWithReturnCode', 'SVN', | 49 'RunShell', 'RunShellWithReturnCode', 'SVN', |
50 'SendToRietveld', 'TryChange', 'UnknownFiles', 'Warn', | 50 'SendToRietveld', 'TryChange', 'UnknownFiles', 'Warn', |
51 'breakpad', 'gclient_utils', 'getpass', 'main', 'os', 'random', 're', | 51 'breakpad', 'gclient_utils', 'getpass', 'main', 'need_change', 'os', |
52 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 'time', 'upload', | 52 'random', 're', 'shutil', 'string', 'subprocess', 'sys', 'tempfile', |
53 'urllib2', | 53 'time', 'upload', 'urllib2', |
54 ] | 54 ] |
55 # If this test fails, you should add the relevant test. | 55 # If this test fails, you should add the relevant test. |
56 self.compareMembers(gcl, members) | 56 self.compareMembers(gcl, members) |
57 | 57 |
58 def testIsSVNMoved(self): | 58 def testIsSVNMoved(self): |
59 # TODO(maruel): TEST ME | 59 # TODO(maruel): TEST ME |
60 pass | 60 pass |
61 | 61 |
62 def testGetSVNFileProperty(self): | 62 def testGetSVNFileProperty(self): |
63 # TODO(maruel): TEST ME | 63 # TODO(maruel): TEST ME |
(...skipping 17 matching lines...) Expand all Loading... |
81 root_path = gcl.os.path.join('bleh', 'prout', 'pouet') | 81 root_path = gcl.os.path.join('bleh', 'prout', 'pouet') |
82 gcl.os.getcwd().AndReturn(root_path) | 82 gcl.os.getcwd().AndReturn(root_path) |
83 gcl.SVN.GetCheckoutRoot(root_path).AndReturn(root_path + '.~') | 83 gcl.SVN.GetCheckoutRoot(root_path).AndReturn(root_path + '.~') |
84 self.mox.ReplayAll() | 84 self.mox.ReplayAll() |
85 self.assertEquals(gcl.GetRepositoryRoot(), root_path + '.~') | 85 self.assertEquals(gcl.GetRepositoryRoot(), root_path + '.~') |
86 | 86 |
87 def testHelp(self): | 87 def testHelp(self): |
88 gcl.sys.stdout.write(mox.StrContains('GCL is a wrapper for Subversion')) | 88 gcl.sys.stdout.write(mox.StrContains('GCL is a wrapper for Subversion')) |
89 gcl.sys.stdout.write('\n') | 89 gcl.sys.stdout.write('\n') |
90 self.mox.ReplayAll() | 90 self.mox.ReplayAll() |
91 gcl.CMDhelp() | 91 gcl.CMDhelp([]) |
92 | 92 |
93 | 93 |
94 class ChangeInfoUnittest(GclTestsBase): | 94 class ChangeInfoUnittest(GclTestsBase): |
95 def setUp(self): | 95 def setUp(self): |
96 GclTestsBase.setUp(self) | 96 GclTestsBase.setUp(self) |
97 self.mox.StubOutWithMock(gcl, 'GetChangelistInfoFile') | 97 self.mox.StubOutWithMock(gcl, 'GetChangelistInfoFile') |
98 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') | 98 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') |
99 | 99 |
100 def testChangeInfoMembers(self): | 100 def testChangeInfoMembers(self): |
101 self.mox.ReplayAll() | 101 self.mox.ReplayAll() |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 class CMDuploadUnittest(GclTestsBase): | 178 class CMDuploadUnittest(GclTestsBase): |
179 def setUp(self): | 179 def setUp(self): |
180 GclTestsBase.setUp(self) | 180 GclTestsBase.setUp(self) |
181 self.mox.StubOutWithMock(gcl, 'CheckHomeForFile') | 181 self.mox.StubOutWithMock(gcl, 'CheckHomeForFile') |
182 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') | 182 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') |
183 self.mox.StubOutWithMock(gcl, 'GenerateDiff') | 183 self.mox.StubOutWithMock(gcl, 'GenerateDiff') |
184 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') | 184 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') |
185 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') | 185 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') |
186 self.mox.StubOutWithMock(gcl, 'SendToRietveld') | 186 self.mox.StubOutWithMock(gcl, 'SendToRietveld') |
187 self.mox.StubOutWithMock(gcl, 'TryChange') | 187 self.mox.StubOutWithMock(gcl, 'TryChange') |
| 188 self.mox.StubOutWithMock(gcl.ChangeInfo, 'Load') |
188 | 189 |
189 def testNew(self): | 190 def testNew(self): |
190 change_info = self.mox.CreateMock(gcl.ChangeInfo) | 191 change_info = self.mox.CreateMock(gcl.ChangeInfo) |
191 change_info.name = 'naame' | 192 change_info.name = 'naame' |
192 change_info.issue = 1 | 193 change_info.issue = 1 |
193 change_info.patchset = 0 | 194 change_info.patchset = 0 |
194 change_info.description = 'deescription', | 195 change_info.description = 'deescription', |
195 change_info.files = [('A', 'aa'), ('M', 'bb')] | 196 change_info.files = [('A', 'aa'), ('M', 'bb')] |
196 change_info.patch = None | 197 change_info.patch = None |
197 files = [item[1] for item in change_info.files] | 198 files = [item[1] for item in change_info.files] |
198 args = ['--foo=bar'] | |
199 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) | 199 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
200 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 200 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
201 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 201 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
202 gcl.os.getcwd().AndReturn('somewhere') | 202 gcl.os.getcwd().AndReturn('somewhere') |
203 change_info.GetFiles().AndReturn(change_info.files) | 203 change_info.GetFiles().AndReturn(change_info.files) |
204 change_info.GetLocalRoot().AndReturn('proout') | 204 change_info.GetLocalRoot().AndReturn('proout') |
205 gcl.os.chdir('proout') | 205 gcl.os.chdir('proout') |
206 change_info.GetFileNames().AndReturn(files) | 206 change_info.GetFileNames().AndReturn(files) |
207 gcl.GenerateDiff(files) | 207 gcl.GenerateDiff(files) |
208 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', | 208 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
209 "--message=''", '--issue=1'], change_info.patch).AndReturn(("1", | 209 '-r', 'georges@example.com', |
| 210 '--message=\'\'', '--issue=1'], |
| 211 change_info.patch).AndReturn(("1", |
210 "2")) | 212 "2")) |
211 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 213 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
212 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 214 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
213 gcl.TryChange(change_info, [], swallow_exception=True) | 215 gcl.TryChange(change_info, [], swallow_exception=True) |
214 gcl.os.chdir('somewhere') | 216 gcl.os.chdir('somewhere') |
215 change_info.Save() | 217 change_info.Save() |
| 218 gcl.GetRepositoryRoot().AndReturn(self.fake_root_dir) |
| 219 gcl.ChangeInfo.Load('naame', self.fake_root_dir, True, True |
| 220 ).AndReturn(change_info) |
216 self.mox.ReplayAll() | 221 self.mox.ReplayAll() |
217 | 222 |
218 gcl.CMDupload(change_info, args) | 223 gcl.CMDupload(['naame', '-r', 'georges@example.com']) |
219 | 224 |
220 def testServerOverride(self): | 225 def testServerOverride(self): |
221 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', | 226 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
222 [('A', 'aa'), ('M', 'bb')], | 227 [('A', 'aa'), ('M', 'bb')], |
223 self.fake_root_dir) | 228 self.fake_root_dir) |
224 self.mox.StubOutWithMock(change_info, 'Save') | 229 self.mox.StubOutWithMock(change_info, 'Save') |
225 args = ['--server=a', '--no_watchlists'] | |
226 change_info.Save() | 230 change_info.Save() |
227 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) | 231 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
228 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 232 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
229 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 233 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
230 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 234 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
231 gcl.os.write(42, change_info.description) | 235 gcl.os.write(42, change_info.description) |
232 gcl.os.close(42) | 236 gcl.os.close(42) |
233 gcl.GetCodeReviewSetting('CC_LIST') | 237 gcl.GetCodeReviewSetting('CC_LIST') |
234 gcl.GetCodeReviewSetting('PRIVATE') | 238 gcl.GetCodeReviewSetting('PRIVATE') |
235 gcl.os.getcwd().AndReturn('somewhere') | 239 gcl.os.getcwd().AndReturn('somewhere') |
236 gcl.os.chdir(change_info.GetLocalRoot()) | 240 gcl.os.chdir(change_info.GetLocalRoot()) |
237 gcl.GenerateDiff(change_info.GetFileNames()) | 241 gcl.GenerateDiff(change_info.GetFileNames()) |
238 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', | 242 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', |
239 "--description_file=descfile", | 243 "--description_file=descfile", |
240 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 244 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
241 gcl.os.remove('descfile') | 245 gcl.os.remove('descfile') |
242 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 246 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
243 gcl.os.chdir('somewhere') | 247 gcl.os.chdir('somewhere') |
| 248 gcl.GetRepositoryRoot().AndReturn(self.fake_root_dir) |
| 249 gcl.ChangeInfo.Load('naame', self.fake_root_dir, True, True |
| 250 ).AndReturn(change_info) |
244 self.mox.ReplayAll() | 251 self.mox.ReplayAll() |
245 | 252 |
246 gcl.CMDupload(change_info, args) | 253 gcl.CMDupload(['naame', '--server=a', '--no_watchlists']) |
247 | 254 |
248 def testNoTry(self): | 255 def testNoTry(self): |
249 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', | 256 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
250 [('A', 'aa'), ('M', 'bb')], | 257 [('A', 'aa'), ('M', 'bb')], |
251 self.fake_root_dir) | 258 self.fake_root_dir) |
252 change_info.Save = self.mox.CreateMockAnything() | 259 change_info.Save = self.mox.CreateMockAnything() |
253 args = ['--no-try', '--no_watchlists'] | |
254 change_info.Save() | 260 change_info.Save() |
255 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 261 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
256 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 262 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
257 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 263 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
258 gcl.os.write(42, change_info.description) | 264 gcl.os.write(42, change_info.description) |
259 gcl.os.close(42) | 265 gcl.os.close(42) |
260 gcl.GetCodeReviewSetting('CC_LIST') | 266 gcl.GetCodeReviewSetting('CC_LIST') |
261 gcl.GetCodeReviewSetting('PRIVATE') | 267 gcl.GetCodeReviewSetting('PRIVATE') |
262 gcl.os.getcwd().AndReturn('somewhere') | 268 gcl.os.getcwd().AndReturn('somewhere') |
263 gcl.os.chdir(change_info.GetLocalRoot()) | 269 gcl.os.chdir(change_info.GetLocalRoot()) |
264 gcl.GenerateDiff(change_info.GetFileNames()) | 270 gcl.GenerateDiff(change_info.GetFileNames()) |
265 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', | 271 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
266 "--description_file=descfile", | 272 "--description_file=descfile", |
267 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 273 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
268 gcl.os.remove('descfile') | 274 gcl.os.remove('descfile') |
269 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 275 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
270 gcl.os.chdir('somewhere') | 276 gcl.os.chdir('somewhere') |
| 277 gcl.GetRepositoryRoot().AndReturn(self.fake_root_dir) |
| 278 gcl.ChangeInfo.Load('naame', self.fake_root_dir, True, True |
| 279 ).AndReturn(change_info) |
271 self.mox.ReplayAll() | 280 self.mox.ReplayAll() |
272 | 281 |
273 gcl.CMDupload(change_info, args) | 282 gcl.CMDupload(['naame', '--no-try', '--no_watchlists']) |
274 | 283 |
275 def testNormal(self): | 284 def testNormal(self): |
276 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', | 285 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
277 [('A', 'aa'), ('M', 'bb')], | 286 [('A', 'aa'), ('M', 'bb')], |
278 self.fake_root_dir) | 287 self.fake_root_dir) |
279 self.mox.StubOutWithMock(change_info, 'Save') | 288 self.mox.StubOutWithMock(change_info, 'Save') |
280 args = ['--no_watchlists'] | |
281 change_info.Save() | 289 change_info.Save() |
282 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) | 290 gcl.CheckHomeForFile('.gcl_upload_no_try').AndReturn(None) |
283 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) | 291 gcl.DoPresubmitChecks(change_info, False, True).AndReturn(True) |
284 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 292 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
285 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 293 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
286 gcl.os.write(42, change_info.description) | 294 gcl.os.write(42, change_info.description) |
287 gcl.os.close(42) | 295 gcl.os.close(42) |
288 gcl.GetCodeReviewSetting('CC_LIST') | 296 gcl.GetCodeReviewSetting('CC_LIST') |
289 gcl.GetCodeReviewSetting('PRIVATE') | 297 gcl.GetCodeReviewSetting('PRIVATE') |
290 gcl.os.getcwd().AndReturn('somewhere') | 298 gcl.os.getcwd().AndReturn('somewhere') |
291 gcl.os.chdir(change_info.GetLocalRoot()) | 299 gcl.os.chdir(change_info.GetLocalRoot()) |
292 gcl.GenerateDiff(change_info.GetFileNames()) | 300 gcl.GenerateDiff(change_info.GetFileNames()) |
293 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', | 301 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
294 "--description_file=descfile", | 302 "--description_file=descfile", |
295 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 303 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
296 gcl.os.remove('descfile') | 304 gcl.os.remove('descfile') |
297 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 305 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
298 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 306 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
299 gcl.TryChange(change_info, [], swallow_exception=True) | 307 gcl.TryChange(change_info, [], swallow_exception=True) |
300 gcl.os.chdir('somewhere') | 308 gcl.os.chdir('somewhere') |
| 309 gcl.GetRepositoryRoot().AndReturn(self.fake_root_dir) |
| 310 gcl.ChangeInfo.Load('naame', self.fake_root_dir, True, True |
| 311 ).AndReturn(change_info) |
301 self.mox.ReplayAll() | 312 self.mox.ReplayAll() |
302 | 313 |
303 gcl.CMDupload(change_info, args) | 314 gcl.CMDupload(['naame', '--no_watchlists']) |
304 self.assertEquals(change_info.issue, 1) | 315 self.assertEquals(change_info.issue, 1) |
305 self.assertEquals(change_info.patchset, 2) | 316 self.assertEquals(change_info.patchset, 2) |
306 | 317 |
307 | 318 |
308 if __name__ == '__main__': | 319 if __name__ == '__main__': |
309 import unittest | 320 import unittest |
310 unittest.main() | 321 unittest.main() |
OLD | NEW |