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 |