| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2009 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2009 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 import unittest | 8 import unittest |
| 9 | 9 |
| 10 # Local imports | 10 # Local imports |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 def testMembersChanged(self): | 41 def testMembersChanged(self): |
| 42 members = [ | 42 members = [ |
| 43 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'CPP_EXTENSIONS', | 43 'CODEREVIEW_SETTINGS', 'CODEREVIEW_SETTINGS_FILE', 'CPP_EXTENSIONS', |
| 44 'Change', 'ChangeInfo', 'Changes', 'Commit', 'DoPresubmitChecks', | 44 'Change', 'ChangeInfo', 'Changes', 'Commit', 'DoPresubmitChecks', |
| 45 'ErrorExit', 'FILES_CACHE', 'GenerateChangeName', 'GenerateDiff', | 45 'ErrorExit', 'FILES_CACHE', 'GenerateChangeName', 'GenerateDiff', |
| 46 'GetCacheDir', 'GetCachedFile', 'GetChangesDir', 'GetCLs', | 46 'GetCacheDir', 'GetCachedFile', 'GetChangesDir', 'GetCLs', |
| 47 'GetChangelistInfoFile', 'GetCodeReviewSetting', 'GetEditor', | 47 'GetChangelistInfoFile', 'GetCodeReviewSetting', 'GetEditor', |
| 48 'GetFilesNotInCL', 'GetInfoDir', 'GetIssueDescription', | 48 'GetFilesNotInCL', 'GetInfoDir', 'GetIssueDescription', |
| 49 'GetModifiedFiles', 'GetRepositoryRoot', | 49 'GetModifiedFiles', 'GetRepositoryRoot', |
| 50 'GetSVNFileProperty', 'Help', 'IGNORE_PATHS', 'IsSVNMoved', | 50 'GetSVNFileProperty', 'Help', 'IGNORE_PATHS', 'IsSVNMoved', |
| 51 'Lint', 'LoadChangelistInfo', 'LoadChangelistInfoForMultiple', | 51 'Lint', 'LoadChangelistInfoForMultiple', |
| 52 'MISSING_TEST_MSG', 'Opened', 'PresubmitCL', 'ReadFile', | 52 'MISSING_TEST_MSG', 'Opened', 'PresubmitCL', 'ReadFile', |
| 53 'REPOSITORY_ROOT', 'RunShell', | 53 'REPOSITORY_ROOT', 'RunShell', |
| 54 'RunShellWithReturnCode', 'SEPARATOR', 'SendToRietveld', 'TryChange', | 54 'RunShellWithReturnCode', 'SendToRietveld', 'TryChange', |
| 55 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile', | 55 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile', |
| 56 'gclient', 'getpass', 'main', 'os', 'random', 're', | 56 'gclient', 'getpass', 'main', 'os', 'random', 're', |
| 57 'shutil', 'string', 'subprocess', 'sys', 'tempfile', | 57 'shutil', 'string', 'subprocess', 'sys', 'tempfile', |
| 58 'upload', 'urllib2', 'xml', | 58 'upload', 'urllib2', 'xml', |
| 59 ] | 59 ] |
| 60 # If this test fails, you should add the relevant test. | 60 # If this test fails, you should add the relevant test. |
| 61 self.compareMembers(gcl, members) | 61 self.compareMembers(gcl, members) |
| 62 | 62 |
| 63 | 63 |
| 64 def testHelp(self): | 64 def testHelp(self): |
| (...skipping 23 matching lines...) Expand all Loading... |
| 88 gcl.os.getcwd().AndReturn(root_path) | 88 gcl.os.getcwd().AndReturn(root_path) |
| 89 results2 = { "Repository Root": "A different root" } | 89 results2 = { "Repository Root": "A different root" } |
| 90 gcl.gclient.CaptureSVNInfo( | 90 gcl.gclient.CaptureSVNInfo( |
| 91 gcl.os.path.dirname(root_path), | 91 gcl.os.path.dirname(root_path), |
| 92 print_error=False).AndReturn(results2) | 92 print_error=False).AndReturn(results2) |
| 93 self.mox.ReplayAll() | 93 self.mox.ReplayAll() |
| 94 self.assertEquals(gcl.GetRepositoryRoot(), root_path) | 94 self.assertEquals(gcl.GetRepositoryRoot(), root_path) |
| 95 | 95 |
| 96 | 96 |
| 97 class ChangeInfoUnittest(GclTestsBase): | 97 class ChangeInfoUnittest(GclTestsBase): |
| 98 def setUp(self): |
| 99 GclTestsBase.setUp(self) |
| 100 self.mox.StubOutWithMock(gcl, 'GetChangelistInfoFile') |
| 101 self.mox.StubOutWithMock(gcl.os.path, 'exists') |
| 102 self.mox.StubOutWithMock(gcl, 'ReadFile') |
| 103 self.mox.StubOutWithMock(gcl, 'WriteFile') |
| 104 |
| 98 def testChangeInfoMembers(self): | 105 def testChangeInfoMembers(self): |
| 99 members = [ | 106 members = [ |
| 100 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save', | 107 'CloseIssue', 'Delete', 'FileList', 'Load', 'MissingTests', 'Save', |
| 101 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', | 108 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', |
| 102 'patch' | 109 'patch', 'patchset', |
| 103 ] | 110 ] |
| 104 # If this test fails, you should add the relevant test. | 111 # If this test fails, you should add the relevant test. |
| 105 self.compareMembers(gcl.ChangeInfo(), members) | 112 self.compareMembers(gcl.ChangeInfo('', 0, 0, '', None), members) |
| 106 | 113 |
| 107 def testChangeInfoBase(self): | 114 def testChangeInfoBase(self): |
| 108 files = [('M', 'foo'), ('A', 'bar')] | 115 files = [('M', 'foo'), ('A', 'bar')] |
| 109 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files) | 116 self.mox.ReplayAll() |
| 117 o = gcl.ChangeInfo('name2', '42', '53', 'description2', files) |
| 110 self.assertEquals(o.name, 'name2') | 118 self.assertEquals(o.name, 'name2') |
| 111 self.assertEquals(o.issue, 'issue2') | 119 self.assertEquals(o.issue, 42) |
| 120 self.assertEquals(o.patchset, 53) |
| 112 self.assertEquals(o.description, 'description2') | 121 self.assertEquals(o.description, 'description2') |
| 113 self.assertEquals(o.files, files) | 122 self.assertEquals(o.files, files) |
| 114 self.assertEquals(o.patch, None) | 123 self.assertEquals(o.patch, None) |
| 115 self.assertEquals(o.FileList(), ['foo', 'bar']) | 124 self.assertEquals(o.FileList(), ['foo', 'bar']) |
| 116 | 125 |
| 126 def testLoadWithIssue(self): |
| 127 description = ["This is some description.", "force an extra separator."] |
| 128 gcl.GetChangelistInfoFile('bleh').AndReturn('bleeeh') |
| 129 gcl.os.path.exists('bleeeh').AndReturn(True) |
| 130 gcl.ReadFile('bleeeh').AndReturn( |
| 131 gcl.ChangeInfo._SEPARATOR.join(["42,53", "G b.cc"] + description)) |
| 132 self.mox.ReplayAll() |
| 133 |
| 134 change_info = gcl.ChangeInfo.Load('bleh', True, False) |
| 135 self.assertEquals(change_info.name, 'bleh') |
| 136 self.assertEquals(change_info.issue, 42) |
| 137 self.assertEquals(change_info.patchset, 53) |
| 138 self.assertEquals(change_info.description, |
| 139 gcl.ChangeInfo._SEPARATOR.join(description)) |
| 140 self.assertEquals(change_info.files, [('G ', 'b.cc')]) |
| 141 |
| 142 def testLoadEmpty(self): |
| 143 gcl.GetChangelistInfoFile('bleh').AndReturn('bleeeh') |
| 144 gcl.os.path.exists('bleeeh').AndReturn(True) |
| 145 gcl.ReadFile('bleeeh').AndReturn( |
| 146 gcl.ChangeInfo._SEPARATOR.join(["", "", ""])) |
| 147 self.mox.ReplayAll() |
| 148 |
| 149 change_info = gcl.ChangeInfo.Load('bleh', True, False) |
| 150 self.assertEquals(change_info.name, 'bleh') |
| 151 self.assertEquals(change_info.issue, 0) |
| 152 self.assertEquals(change_info.patchset, 0) |
| 153 self.assertEquals(change_info.description, "") |
| 154 self.assertEquals(change_info.files, []) |
| 155 |
| 156 def testSaveEmpty(self): |
| 157 gcl.GetChangelistInfoFile('').AndReturn('foo') |
| 158 gcl.WriteFile('foo', gcl.ChangeInfo._SEPARATOR.join(['0, 0', '', ''])) |
| 159 self.mox.ReplayAll() |
| 160 change_info = gcl.ChangeInfo('', 0, 0, '', None) |
| 161 change_info.Save() |
| 162 |
| 117 | 163 |
| 118 class UploadCLUnittest(GclTestsBase): | 164 class UploadCLUnittest(GclTestsBase): |
| 119 def setUp(self): | 165 def setUp(self): |
| 120 GclTestsBase.setUp(self) | 166 GclTestsBase.setUp(self) |
| 121 self.mox.StubOutWithMock(gcl.os, 'chdir') | 167 self.mox.StubOutWithMock(gcl.os, 'chdir') |
| 122 self.mox.StubOutWithMock(gcl.os, 'close') | 168 self.mox.StubOutWithMock(gcl.os, 'close') |
| 123 self.mox.StubOutWithMock(gcl.os, 'remove') | 169 self.mox.StubOutWithMock(gcl.os, 'remove') |
| 124 self.mox.StubOutWithMock(gcl.os, 'write') | 170 self.mox.StubOutWithMock(gcl.os, 'write') |
| 125 self.mox.StubOutWithMock(gcl, 'tempfile') | 171 self.mox.StubOutWithMock(gcl, 'tempfile') |
| 126 self.mox.StubOutWithMock(gcl.upload, 'RealMain') | 172 self.mox.StubOutWithMock(gcl.upload, 'RealMain') |
| 127 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') | 173 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks') |
| 128 self.mox.StubOutWithMock(gcl, 'GenerateDiff') | 174 self.mox.StubOutWithMock(gcl, 'GenerateDiff') |
| 129 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') | 175 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting') |
| 130 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') | 176 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot') |
| 131 self.mox.StubOutWithMock(gcl, 'SendToRietveld') | 177 self.mox.StubOutWithMock(gcl, 'SendToRietveld') |
| 132 self.mox.StubOutWithMock(gcl, 'TryChange') | 178 self.mox.StubOutWithMock(gcl, 'TryChange') |
| 133 | 179 |
| 134 def testNew(self): | 180 def testNew(self): |
| 135 change_info = gcl.ChangeInfo('naame', 'iissue', 'deescription', | 181 change_info = gcl.ChangeInfo('naame', 1, 0, 'deescription', |
| 136 ['aa', 'bb']) | 182 ['aa', 'bb']) |
| 137 change_info.Save = self.mox.CreateMockAnything() | 183 self.mox.StubOutWithMock(change_info, 'Save') |
| 138 args = ['--foo=bar'] | 184 args = ['--foo=bar'] |
| 139 change_info.Save() | 185 change_info.Save() |
| 140 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) | 186 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) |
| 141 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 187 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
| 142 gcl.os.getcwd().AndReturn('somewhere') | 188 gcl.os.getcwd().AndReturn('somewhere') |
| 143 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) | 189 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) |
| 144 gcl.GenerateDiff(change_info.FileList()) | 190 gcl.GenerateDiff(change_info.FileList()) |
| 145 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', | 191 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', |
| 146 "--message=''", '--issue=iissue'], change_info.patch).AndReturn(("1", | 192 "--message=''", '--issue=1'], change_info.patch).AndReturn(("1", |
| 147 "2")) | 193 "2")) |
| 148 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 194 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
| 149 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 195 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
| 150 gcl.TryChange(change_info, | 196 gcl.TryChange(change_info, [], swallow_exception=True) |
| 151 ['--issue', '1', '--patchset', '2'], | |
| 152 swallow_exception=True) | |
| 153 gcl.os.chdir('somewhere') | 197 gcl.os.chdir('somewhere') |
| 154 self.mox.ReplayAll() | 198 self.mox.ReplayAll() |
| 155 gcl.UploadCL(change_info, args) | 199 gcl.UploadCL(change_info, args) |
| 156 | 200 |
| 157 def testServerOverride(self): | 201 def testServerOverride(self): |
| 158 change_info = gcl.ChangeInfo('naame', '', 'deescription', | 202 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
| 159 ['aa', 'bb']) | 203 ['aa', 'bb']) |
| 160 change_info.Save = self.mox.CreateMockAnything() | 204 change_info.Save = self.mox.CreateMockAnything() |
| 161 args = ['--server=a'] | 205 args = ['--server=a'] |
| 162 change_info.Save() | 206 change_info.Save() |
| 163 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) | 207 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) |
| 164 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 208 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
| 165 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 209 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
| 166 gcl.os.write(42, change_info.description) | 210 gcl.os.write(42, change_info.description) |
| 167 gcl.os.close(42) | 211 gcl.os.close(42) |
| 168 gcl.GetCodeReviewSetting('CC_LIST') | 212 gcl.GetCodeReviewSetting('CC_LIST') |
| 169 gcl.os.getcwd().AndReturn('somewhere') | 213 gcl.os.getcwd().AndReturn('somewhere') |
| 170 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) | 214 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) |
| 171 gcl.GenerateDiff(change_info.FileList()) | 215 gcl.GenerateDiff(change_info.FileList()) |
| 172 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', | 216 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', |
| 173 "--description_file=descfile", | 217 "--description_file=descfile", |
| 174 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 218 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
| 175 gcl.os.remove('descfile') | 219 gcl.os.remove('descfile') |
| 176 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 220 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
| 177 gcl.os.chdir('somewhere') | 221 gcl.os.chdir('somewhere') |
| 178 self.mox.ReplayAll() | 222 self.mox.ReplayAll() |
| 179 gcl.UploadCL(change_info, args) | 223 gcl.UploadCL(change_info, args) |
| 180 | 224 |
| 181 def testNoTry(self): | 225 def testNoTry(self): |
| 182 change_info = gcl.ChangeInfo('naame', '', 'deescription', | 226 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
| 183 ['aa', 'bb']) | 227 ['aa', 'bb']) |
| 184 change_info.Save = self.mox.CreateMockAnything() | 228 change_info.Save = self.mox.CreateMockAnything() |
| 185 args = ['--no-try'] | 229 args = ['--no-try'] |
| 186 change_info.Save() | 230 change_info.Save() |
| 187 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) | 231 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) |
| 188 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 232 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
| 189 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 233 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
| 190 gcl.os.write(42, change_info.description) | 234 gcl.os.write(42, change_info.description) |
| 191 gcl.os.close(42) | 235 gcl.os.close(42) |
| 192 gcl.GetCodeReviewSetting('CC_LIST') | 236 gcl.GetCodeReviewSetting('CC_LIST') |
| 193 gcl.os.getcwd().AndReturn('somewhere') | 237 gcl.os.getcwd().AndReturn('somewhere') |
| 194 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) | 238 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) |
| 195 gcl.GenerateDiff(change_info.FileList()) | 239 gcl.GenerateDiff(change_info.FileList()) |
| 196 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', | 240 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
| 197 "--description_file=descfile", | 241 "--description_file=descfile", |
| 198 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 242 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
| 199 gcl.os.remove('descfile') | 243 gcl.os.remove('descfile') |
| 200 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 244 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
| 201 gcl.os.chdir('somewhere') | 245 gcl.os.chdir('somewhere') |
| 202 self.mox.ReplayAll() | 246 self.mox.ReplayAll() |
| 203 gcl.UploadCL(change_info, args) | 247 gcl.UploadCL(change_info, args) |
| 204 | 248 |
| 205 def testNormal(self): | 249 def testNormal(self): |
| 206 change_info = gcl.ChangeInfo('naame', '', 'deescription', | 250 change_info = gcl.ChangeInfo('naame', 0, 0, 'deescription', |
| 207 ['aa', 'bb']) | 251 ['aa', 'bb']) |
| 208 self.mox.StubOutWithMock(change_info, 'Save') | 252 self.mox.StubOutWithMock(change_info, 'Save') |
| 209 args = [] | 253 args = [] |
| 210 change_info.Save() | 254 change_info.Save() |
| 211 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) | 255 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) |
| 212 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') | 256 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') |
| 213 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) | 257 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) |
| 214 gcl.os.write(42, change_info.description) | 258 gcl.os.write(42, change_info.description) |
| 215 gcl.os.close(42) | 259 gcl.os.close(42) |
| 216 gcl.GetCodeReviewSetting('CC_LIST') | 260 gcl.GetCodeReviewSetting('CC_LIST') |
| 217 gcl.os.getcwd().AndReturn('somewhere') | 261 gcl.os.getcwd().AndReturn('somewhere') |
| 218 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) | 262 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) |
| 219 gcl.GenerateDiff(change_info.FileList()) | 263 gcl.GenerateDiff(change_info.FileList()) |
| 220 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', | 264 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', |
| 221 "--description_file=descfile", | 265 "--description_file=descfile", |
| 222 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) | 266 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) |
| 223 gcl.os.remove('descfile') | 267 gcl.os.remove('descfile') |
| 224 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) | 268 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) |
| 225 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') | 269 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') |
| 226 gcl.TryChange(change_info, | 270 gcl.TryChange(change_info, [], swallow_exception=True) |
| 227 ['--issue', '1', '--patchset', '2'], | |
| 228 swallow_exception=True) | |
| 229 gcl.os.chdir('somewhere') | 271 gcl.os.chdir('somewhere') |
| 230 self.mox.ReplayAll() | 272 self.mox.ReplayAll() |
| 273 |
| 231 gcl.UploadCL(change_info, args) | 274 gcl.UploadCL(change_info, args) |
| 275 self.assertEquals(change_info.issue, 1) |
| 276 self.assertEquals(change_info.patchset, 2) |
| 232 | 277 |
| 233 | 278 |
| 234 if __name__ == '__main__': | 279 if __name__ == '__main__': |
| 235 unittest.main() | 280 unittest.main() |
| OLD | NEW |