Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: tests/gcl_unittest.py

Issue 118019: Save 50 lines by converting the unit test to mox.MoxTestBase. (Closed)
Patch Set: Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 StringIO
9 import os
10 import sys
11 import unittest 8 import unittest
12 9
13 # Local imports 10 # Local imports
14 import __init__ 11 import __init__
15 import gcl 12 import gcl
16 mox = __init__.mox 13 mox = __init__.mox
17 14
18 15
19 class GclTestsBase(unittest.TestCase): 16 class GclTestsBase(mox.MoxTestBase):
20 """Setups and tear downs the mocks but doesn't test anything as-is.""" 17 """Setups and tear downs the mocks but doesn't test anything as-is."""
21 def setUp(self): 18 def setUp(self):
22 self.mox = mox.Mox() 19 mox.MoxTestBase.setUp(self)
23 def RunShellMock(filename): 20 self.mox.StubOutWithMock(gcl, 'RunShell')
24 return filename 21 self.mox.StubOutWithMock(gcl.gclient, 'CaptureSVNInfo')
25 self._RunShell = gcl.RunShell 22 self.mox.StubOutWithMock(gcl, 'os')
26 gcl.RunShell = RunShellMock 23 self.mox.StubOutWithMock(gcl.os, 'getcwd')
27 self._gcl_gclient_CaptureSVNInfo = gcl.gclient.CaptureSVNInfo
28 gcl.gclient.CaptureSVNInfo = self.mox.CreateMockAnything()
29 self._gcl_os_getcwd = gcl.os.getcwd
30 gcl.os.getcwd = self.mox.CreateMockAnything()
31
32 def tearDown(self):
33 gcl.RunShell = self._RunShell
34 gcl.gclient.CaptureSVNInfo = self._gcl_gclient_CaptureSVNInfo
35 gcl.os.getcwd = self._gcl_os_getcwd
36 24
37 def compareMembers(self, object, members): 25 def compareMembers(self, object, members):
38 """If you add a member, be sure to add the relevant test!""" 26 """If you add a member, be sure to add the relevant test!"""
39 # Skip over members starting with '_' since they are usually not meant to 27 # Skip over members starting with '_' since they are usually not meant to
40 # be for public use. 28 # be for public use.
41 actual_members = [x for x in sorted(dir(object)) 29 actual_members = [x for x in sorted(dir(object))
42 if not x.startswith('_')] 30 if not x.startswith('_')]
43 expected_members = sorted(members) 31 expected_members = sorted(members)
44 if actual_members != expected_members: 32 if actual_members != expected_members:
45 diff = ([i for i in actual_members if i not in expected_members] + 33 diff = ([i for i in actual_members if i not in expected_members] +
(...skipping 21 matching lines...) Expand all
67 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile', 55 'UnknownFiles', 'UploadCL', 'Warn', 'WriteFile',
68 'gclient', 'getpass', 'main', 'os', 'random', 're', 56 'gclient', 'getpass', 'main', 'os', 'random', 're',
69 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 57 'shutil', 'string', 'subprocess', 'sys', 'tempfile',
70 'upload', 'urllib2', 'xml', 58 'upload', 'urllib2', 'xml',
71 ] 59 ]
72 # If this test fails, you should add the relevant test. 60 # If this test fails, you should add the relevant test.
73 self.compareMembers(gcl, members) 61 self.compareMembers(gcl, members)
74 62
75 63
76 def testHelp(self): 64 def testHelp(self):
77 old_stdout = sys.stdout 65 self.mox.StubOutWithMock(gcl.sys, 'stdout')
78 try: 66 gcl.sys.stdout.write(mox.StrContains('GCL is a wrapper for Subversion'))
79 dummy = StringIO.StringIO() 67 gcl.sys.stdout.write('\n')
80 gcl.sys.stdout = dummy 68 self.mox.ReplayAll()
81 gcl.Help() 69 gcl.Help()
82 self.assertEquals(len(dummy.getvalue()), 1832)
83 finally:
84 gcl.sys.stdout = old_stdout
85 70
86 def testGetRepositoryRootNone(self): 71 def testGetRepositoryRootNone(self):
87 gcl.REPOSITORY_ROOT = None 72 gcl.REPOSITORY_ROOT = None
88 gcl.os.getcwd().AndReturn("/bleh/prout") 73 gcl.os.getcwd().AndReturn("/bleh/prout")
89 result = { 74 result = {
90 "Repository Root": "" 75 "Repository Root": ""
91 } 76 }
92 gcl.gclient.CaptureSVNInfo("/bleh/prout", print_error=False).AndReturn( 77 gcl.gclient.CaptureSVNInfo("/bleh/prout", print_error=False).AndReturn(
93 result) 78 result)
94 self.mox.ReplayAll() 79 self.mox.ReplayAll()
95 self.assertRaises(Exception, gcl.GetRepositoryRoot) 80 self.assertRaises(Exception, gcl.GetRepositoryRoot)
96 self.mox.VerifyAll()
97 81
98 def testGetRepositoryRootGood(self): 82 def testGetRepositoryRootGood(self):
99 gcl.REPOSITORY_ROOT = None 83 gcl.REPOSITORY_ROOT = None
100 root_path = os.path.join('bleh', 'prout', 'pouet') 84 root_path = gcl.os.path.join('bleh', 'prout', 'pouet')
101 gcl.os.getcwd().AndReturn(root_path) 85 gcl.os.getcwd().AndReturn(root_path)
102 result1 = { "Repository Root": "Some root" } 86 result1 = { "Repository Root": "Some root" }
103 gcl.gclient.CaptureSVNInfo(root_path, print_error=False).AndReturn(result1) 87 gcl.gclient.CaptureSVNInfo(root_path, print_error=False).AndReturn(result1)
104 gcl.os.getcwd().AndReturn(root_path) 88 gcl.os.getcwd().AndReturn(root_path)
105 results2 = { "Repository Root": "A different root" } 89 results2 = { "Repository Root": "A different root" }
106 gcl.gclient.CaptureSVNInfo( 90 gcl.gclient.CaptureSVNInfo(
107 os.path.dirname(root_path), 91 gcl.os.path.dirname(root_path),
108 print_error=False).AndReturn(results2) 92 print_error=False).AndReturn(results2)
109 self.mox.ReplayAll() 93 self.mox.ReplayAll()
110 self.assertEquals(gcl.GetRepositoryRoot(), root_path) 94 self.assertEquals(gcl.GetRepositoryRoot(), root_path)
111 self.mox.VerifyAll()
112 95
113 96
114 class ChangeInfoUnittest(GclTestsBase): 97 class ChangeInfoUnittest(GclTestsBase):
115 def testChangeInfoMembers(self): 98 def testChangeInfoMembers(self):
116 members = [ 99 members = [
117 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save', 100 'CloseIssue', 'Delete', 'FileList', 'MissingTests', 'Save',
118 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name', 101 'UpdateRietveldDescription', 'description', 'files', 'issue', 'name',
119 'patch' 102 'patch'
120 ] 103 ]
121 # If this test fails, you should add the relevant test. 104 # If this test fails, you should add the relevant test.
122 self.compareMembers(gcl.ChangeInfo(), members) 105 self.compareMembers(gcl.ChangeInfo(), members)
123 106
124 def testChangeInfoBase(self): 107 def testChangeInfoBase(self):
125 files = [('M', 'foo'), ('A', 'bar')] 108 files = [('M', 'foo'), ('A', 'bar')]
126 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files) 109 o = gcl.ChangeInfo('name2', 'issue2', 'description2', files)
127 self.assertEquals(o.name, 'name2') 110 self.assertEquals(o.name, 'name2')
128 self.assertEquals(o.issue, 'issue2') 111 self.assertEquals(o.issue, 'issue2')
129 self.assertEquals(o.description, 'description2') 112 self.assertEquals(o.description, 'description2')
130 self.assertEquals(o.files, files) 113 self.assertEquals(o.files, files)
131 self.assertEquals(o.patch, None) 114 self.assertEquals(o.patch, None)
132 self.assertEquals(o.FileList(), ['foo', 'bar']) 115 self.assertEquals(o.FileList(), ['foo', 'bar'])
133 116
134 117
135 class UploadCLUnittest(GclTestsBase): 118 class UploadCLUnittest(GclTestsBase):
136 def setUp(self): 119 def setUp(self):
137 GclTestsBase.setUp(self) 120 GclTestsBase.setUp(self)
138 self._os_chdir = gcl.os.chdir 121 self.mox.StubOutWithMock(gcl.os, 'chdir')
139 gcl.os.chdir = self.mox.CreateMockAnything() 122 self.mox.StubOutWithMock(gcl.os, 'close')
140 self._os_close = gcl.os.close 123 self.mox.StubOutWithMock(gcl.os, 'remove')
141 gcl.os.close = self.mox.CreateMockAnything() 124 self.mox.StubOutWithMock(gcl.os, 'write')
142 self._os_remove = gcl.os.remove 125 self.mox.StubOutWithMock(gcl, 'tempfile')
143 gcl.os.remove = self.mox.CreateMockAnything() 126 self.mox.StubOutWithMock(gcl.upload, 'RealMain')
144 self._os_write = gcl.os.write 127 self.mox.StubOutWithMock(gcl, 'DoPresubmitChecks')
145 gcl.os.write = self.mox.CreateMockAnything() 128 self.mox.StubOutWithMock(gcl, 'GenerateDiff')
146 self._tempfile = gcl.tempfile 129 self.mox.StubOutWithMock(gcl, 'GetCodeReviewSetting')
147 gcl.tempfile = self.mox.CreateMockAnything() 130 self.mox.StubOutWithMock(gcl, 'GetRepositoryRoot')
148 self._upload_RealMain = gcl.upload.RealMain 131 self.mox.StubOutWithMock(gcl, 'SendToRietveld')
149 gcl.upload.RealMain = self.mox.CreateMockAnything() 132 self.mox.StubOutWithMock(gcl, 'TryChange')
150 self._DoPresubmitChecks = gcl.DoPresubmitChecks
151 gcl.DoPresubmitChecks = self.mox.CreateMockAnything()
152 self._GenerateDiff = gcl.GenerateDiff
153 gcl.GenerateDiff = self.mox.CreateMockAnything()
154 self._GetCodeReviewSetting = gcl.GetCodeReviewSetting
155 gcl.GetCodeReviewSetting = self.mox.CreateMockAnything()
156 self._GetRepositoryRoot = gcl.GetRepositoryRoot
157 gcl.GetRepositoryRoot = self.mox.CreateMockAnything()
158 self._SendToRietveld = gcl.SendToRietveld
159 gcl.SendToRietveld = self.mox.CreateMockAnything()
160 self._TryChange = gcl.TryChange
161 gcl.TryChange = self.mox.CreateMockAnything()
162
163 def tearDown(self):
164 GclTestsBase.tearDown(self)
165 gcl.os.chdir = self._os_chdir
166 gcl.os.close = self._os_close
167 gcl.os.remove = self._os_remove
168 gcl.os.write = self._os_write
169 gcl.tempfile = self._tempfile
170 gcl.upload.RealMain = self._upload_RealMain
171 gcl.DoPresubmitChecks = self._DoPresubmitChecks
172 gcl.GenerateDiff = self._GenerateDiff
173 gcl.GetCodeReviewSetting = self._GetCodeReviewSetting
174 gcl.GetRepositoryRoot = self._GetRepositoryRoot
175 gcl.SendToRietveld = self._SendToRietveld
176 gcl.TryChange = self._TryChange
177 133
178 def testNew(self): 134 def testNew(self):
179 change_info = gcl.ChangeInfo('naame', 'iissue', 'deescription', 135 change_info = gcl.ChangeInfo('naame', 'iissue', 'deescription',
180 ['aa', 'bb']) 136 ['aa', 'bb'])
181 change_info.Save = self.mox.CreateMockAnything() 137 change_info.Save = self.mox.CreateMockAnything()
182 args = ['--foo=bar'] 138 args = ['--foo=bar']
183 change_info.Save() 139 change_info.Save()
184 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 140 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
185 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 141 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
186 gcl.os.getcwd().AndReturn('somewhere') 142 gcl.os.getcwd().AndReturn('somewhere')
187 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 143 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
188 gcl.GenerateDiff(change_info.FileList()) 144 gcl.GenerateDiff(change_info.FileList())
189 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', 145 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar',
190 "--message=''", '--issue=iissue'], change_info.patch).AndReturn(("1", 146 "--message=''", '--issue=iissue'], change_info.patch).AndReturn(("1",
191 "2")) 147 "2"))
192 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 148 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
193 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') 149 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True')
194 gcl.TryChange(change_info, 150 gcl.TryChange(change_info,
195 ['--issue', '1', '--patchset', '2'], 151 ['--issue', '1', '--patchset', '2'],
196 swallow_exception=True) 152 swallow_exception=True)
197 gcl.os.chdir('somewhere') 153 gcl.os.chdir('somewhere')
198 self.mox.ReplayAll() 154 self.mox.ReplayAll()
199 gcl.UploadCL(change_info, args) 155 gcl.UploadCL(change_info, args)
200 self.mox.VerifyAll()
201 156
202 def testServerOverride(self): 157 def testServerOverride(self):
203 change_info = gcl.ChangeInfo('naame', '', 'deescription', 158 change_info = gcl.ChangeInfo('naame', '', 'deescription',
204 ['aa', 'bb']) 159 ['aa', 'bb'])
205 change_info.Save = self.mox.CreateMockAnything() 160 change_info.Save = self.mox.CreateMockAnything()
206 args = ['--server=a'] 161 args = ['--server=a']
207 change_info.Save() 162 change_info.Save()
208 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 163 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
209 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 164 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
210 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 165 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
211 gcl.os.write(42, change_info.description) 166 gcl.os.write(42, change_info.description)
212 gcl.os.close(42) 167 gcl.os.close(42)
213 gcl.GetCodeReviewSetting('CC_LIST') 168 gcl.GetCodeReviewSetting('CC_LIST')
214 gcl.os.getcwd().AndReturn('somewhere') 169 gcl.os.getcwd().AndReturn('somewhere')
215 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 170 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
216 gcl.GenerateDiff(change_info.FileList()) 171 gcl.GenerateDiff(change_info.FileList())
217 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', 172 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a',
218 "--description_file=descfile", 173 "--description_file=descfile",
219 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 174 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
220 gcl.os.remove('descfile') 175 gcl.os.remove('descfile')
221 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 176 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
222 #gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True')
223 #gcl.TryChange(change_info,
224 # ['--issue', '1', '--patchset', '2'],
225 # swallow_exception=True)
226 gcl.os.chdir('somewhere') 177 gcl.os.chdir('somewhere')
227 self.mox.ReplayAll() 178 self.mox.ReplayAll()
228 gcl.UploadCL(change_info, args) 179 gcl.UploadCL(change_info, args)
229 self.mox.VerifyAll()
230 180
231 def testNoTry(self): 181 def testNoTry(self):
232 change_info = gcl.ChangeInfo('naame', '', 'deescription', 182 change_info = gcl.ChangeInfo('naame', '', 'deescription',
233 ['aa', 'bb']) 183 ['aa', 'bb'])
234 change_info.Save = self.mox.CreateMockAnything() 184 change_info.Save = self.mox.CreateMockAnything()
235 args = ['--no-try'] 185 args = ['--no-try']
236 change_info.Save() 186 change_info.Save()
237 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 187 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
238 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 188 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
239 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 189 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
240 gcl.os.write(42, change_info.description) 190 gcl.os.write(42, change_info.description)
241 gcl.os.close(42) 191 gcl.os.close(42)
242 gcl.GetCodeReviewSetting('CC_LIST') 192 gcl.GetCodeReviewSetting('CC_LIST')
243 gcl.os.getcwd().AndReturn('somewhere') 193 gcl.os.getcwd().AndReturn('somewhere')
244 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 194 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
245 gcl.GenerateDiff(change_info.FileList()) 195 gcl.GenerateDiff(change_info.FileList())
246 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', 196 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server',
247 "--description_file=descfile", 197 "--description_file=descfile",
248 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 198 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
249 gcl.os.remove('descfile') 199 gcl.os.remove('descfile')
250 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 200 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
251 gcl.os.chdir('somewhere') 201 gcl.os.chdir('somewhere')
252 self.mox.ReplayAll() 202 self.mox.ReplayAll()
253 gcl.UploadCL(change_info, args) 203 gcl.UploadCL(change_info, args)
254 self.mox.VerifyAll()
255 204
256 def testNormal(self): 205 def testNormal(self):
257 change_info = gcl.ChangeInfo('naame', '', 'deescription', 206 change_info = gcl.ChangeInfo('naame', '', 'deescription',
258 ['aa', 'bb']) 207 ['aa', 'bb'])
259 change_info.Save = self.mox.CreateMockAnything() 208 self.mox.StubOutWithMock(change_info, 'Save')
260 args = [] 209 args = []
261 change_info.Save() 210 change_info.Save()
262 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) 211 gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True)
263 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') 212 gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server')
264 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) 213 gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile'))
265 gcl.os.write(42, change_info.description) 214 gcl.os.write(42, change_info.description)
266 gcl.os.close(42) 215 gcl.os.close(42)
267 gcl.GetCodeReviewSetting('CC_LIST') 216 gcl.GetCodeReviewSetting('CC_LIST')
268 gcl.os.getcwd().AndReturn('somewhere') 217 gcl.os.getcwd().AndReturn('somewhere')
269 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) 218 gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None))
270 gcl.GenerateDiff(change_info.FileList()) 219 gcl.GenerateDiff(change_info.FileList())
271 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', 220 gcl.upload.RealMain(['upload.py', '-y', '--server=my_server',
272 "--description_file=descfile", 221 "--description_file=descfile",
273 "--message=deescription"], change_info.patch).AndReturn(("1", "2")) 222 "--message=deescription"], change_info.patch).AndReturn(("1", "2"))
274 gcl.os.remove('descfile') 223 gcl.os.remove('descfile')
275 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) 224 gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5)
276 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') 225 gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True')
277 gcl.TryChange(change_info, 226 gcl.TryChange(change_info,
278 ['--issue', '1', '--patchset', '2'], 227 ['--issue', '1', '--patchset', '2'],
279 swallow_exception=True) 228 swallow_exception=True)
280 gcl.os.chdir('somewhere') 229 gcl.os.chdir('somewhere')
281 self.mox.ReplayAll() 230 self.mox.ReplayAll()
282 gcl.UploadCL(change_info, args) 231 gcl.UploadCL(change_info, args)
283 self.mox.VerifyAll()
284 232
285 233
286 if __name__ == '__main__': 234 if __name__ == '__main__':
287 unittest.main() 235 unittest.main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698