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

Side by Side Diff: tests/gclient_smoketest.py

Issue 2265002: Reapply 48271 with fix (again) (Closed)
Patch Set: Another fix + more smoke tests Created 10 years, 7 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 | « tests/fake_repos.py ('k') | tests/gclient_test.py » ('j') | 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) 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 """Smoke tests for gclient.py. 6 """Smoke tests for gclient.py.
7 7
8 Shell out 'gclient' and run basic conformance tests. 8 Shell out 'gclient' and run basic conformance tests.
9 9
10 This test assumes GClientSmokeBase.URL_BASE is valid. 10 This test assumes GClientSmokeBase.URL_BASE is valid.
11 """ 11 """
12 12
13 import logging 13 import logging
14 import os 14 import os
15 import pprint 15 import pprint
16 import re
16 import shutil 17 import shutil
17 import subprocess 18 import subprocess
18 import sys 19 import sys
19 import unittest 20 import unittest
20 21
21 from fake_repos import rmtree, write, FakeRepos 22 from fake_repos import rmtree, write, FakeRepos
22 23
23 join = os.path.join 24 join = os.path.join
24 25
25 SHOULD_LEAK = False 26 SHOULD_LEAK = False
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 100
100 def gclient(self, cmd, cwd=None): 101 def gclient(self, cmd, cwd=None):
101 if not cwd: 102 if not cwd:
102 cwd = self.root_dir 103 cwd = self.root_dir
103 process = subprocess.Popen([GCLIENT_PATH] + cmd, cwd=cwd, env=self.env, 104 process = subprocess.Popen([GCLIENT_PATH] + cmd, cwd=cwd, env=self.env,
104 stdout=subprocess.PIPE, stderr=subprocess.PIPE, 105 stdout=subprocess.PIPE, stderr=subprocess.PIPE,
105 shell=sys.platform.startswith('win')) 106 shell=sys.platform.startswith('win'))
106 (stdout, stderr) = process.communicate() 107 (stdout, stderr) = process.communicate()
107 return (stdout, stderr, process.returncode) 108 return (stdout, stderr, process.returncode)
108 109
110 def checkString(self, expected, result):
111 if expected != result:
112 # Strip the begining
113 while expected and result and expected[0] == result[0]:
114 expected = expected[1:]
115 result = result[1:]
116 # The exception trace makes it hard to read so dump it too.
117 if '\n' in result:
118 print result
119 self.assertEquals(expected, result)
120
109 def check(self, expected, results): 121 def check(self, expected, results):
110 def checkString(expected, result): 122 self.checkString(expected[0], results[0])
111 if expected != result: 123 self.checkString(expected[1], results[1])
112 while expected and result and expected[0] == result[0]:
113 expected = expected[1:]
114 result = result[1:]
115 self.assertEquals(expected, result)
116 checkString(expected[0], results[0])
117 checkString(expected[1], results[1])
118 self.assertEquals(expected[2], results[2]) 124 self.assertEquals(expected[2], results[2])
119 125
120 def assertTree(self, tree): 126 def assertTree(self, tree):
121 actual = read_tree(self.root_dir) 127 actual = read_tree(self.root_dir)
122 diff = dict_diff(tree, actual) 128 diff = dict_diff(tree, actual)
123 if diff: 129 if diff:
124 logging.debug('Actual %s\n%s' % (self.root_dir, pprint.pformat(actual))) 130 logging.debug('Actual %s\n%s' % (self.root_dir, pprint.pformat(actual)))
125 logging.debug('Expected\n%s' % pprint.pformat(tree)) 131 logging.debug('Expected\n%s' % pprint.pformat(tree))
126 logging.debug('Diff\n%s' % pprint.pformat(diff)) 132 logging.debug('Diff\n%s' % pprint.pformat(diff))
127 self.assertEquals(tree, actual) 133 self.assertEquals(tree, actual)
128 134
129 135
130 class GClientSmoke(GClientSmokeBase): 136 class GClientSmoke(GClientSmokeBase):
131 def testCommands(self): 137 def testCommands(self):
132 """This test is to make sure no new command was added.""" 138 """This test is to make sure no new command was added."""
133 result = self.gclient(['help']) 139 result = self.gclient(['help'])
134 self.assertEquals(3189, len(result[0])) 140 self.assertEquals(1197, len(result[0]))
135 self.assertEquals(0, len(result[1])) 141 self.assertEquals(0, len(result[1]))
136 self.assertEquals(0, result[2]) 142 self.assertEquals(0, result[2])
137 143
138 def testNotConfigured(self): 144 def testNotConfigured(self):
139 res = ('', 'Error: client not configured; see \'gclient config\'\n', 1) 145 res = ('', 'Error: client not configured; see \'gclient config\'\n', 1)
140 self.check(res, self.gclient(['cleanup'])) 146 self.check(res, self.gclient(['cleanup']))
141 self.check(res, self.gclient(['diff'])) 147 self.check(res, self.gclient(['diff']))
142 self.check(res, self.gclient(['export', 'foo'])) 148 self.check(res, self.gclient(['export', 'foo']))
143 self.check(res, self.gclient(['pack'])) 149 self.check(res, self.gclient(['pack']))
144 self.check(res, self.gclient(['revert'])) 150 self.check(res, self.gclient(['revert']))
145 self.check(res, self.gclient(['revinfo'])) 151 self.check(res, self.gclient(['revinfo']))
146 self.check(res, self.gclient(['runhooks'])) 152 self.check(res, self.gclient(['runhooks']))
147 self.check(res, self.gclient(['status'])) 153 self.check(res, self.gclient(['status']))
148 self.check(res, self.gclient(['sync'])) 154 self.check(res, self.gclient(['sync']))
149 self.check(res, self.gclient(['update'])) 155 self.check(res, self.gclient(['update']))
150 156
151 157
152 class GClientSmokeSVN(GClientSmokeBase): 158 class GClientSmokeSVN(GClientSmokeBase):
153 """sync is the most important command. Hence test it more.""" 159 """sync is the most important command. Hence test it more."""
154 def testSync(self): 160 def testSync(self):
155 """Test pure gclient svn checkout, example of Chromium checkout"""
156 self.gclient(['config', self.svn_base + 'trunk/src/']) 161 self.gclient(['config', self.svn_base + 'trunk/src/'])
157 # Test unversioned checkout. 162 # Test unversioned checkout.
158 results = self.gclient(['sync', '--deps', 'mac']) 163 results = self.gclient(['sync', '--deps', 'mac'])
159 logging.debug(results[0]) 164 logging.debug(results[0])
160 self.assertEquals('', results[1]) 165 out = results[0].splitlines(False)
166 self.assertEquals(17, len(out))
167 self.checkString('', results[1])
161 self.assertEquals(0, results[2]) 168 self.assertEquals(0, results[2])
162 tree = mangle_svn_tree( 169 tree = mangle_svn_tree(
163 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), 170 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
164 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'), 171 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
165 FAKE.svn_revs[1]), 172 FAKE.svn_revs[1]),
166 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), 173 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
167 ) 174 )
175 tree[join('src', 'hooked1')] = 'hooked1'
168 self.assertTree(tree) 176 self.assertTree(tree)
169 177
178 # Manually remove hooked1 before synching to make sure it's not recreated.
179 os.remove(join(self.root_dir, 'src', 'hooked1'))
180
170 # Test incremental versioned sync: sync backward. 181 # Test incremental versioned sync: sync backward.
171 results = self.gclient(['sync', '--revision', 'src@1', '--deps', 'mac', 182 results = self.gclient(['sync', '--revision', 'src@1', '--deps', 'mac',
172 '--delete_unversioned_trees']) 183 '--delete_unversioned_trees'])
173 logging.debug(results[0]) 184 logging.debug(results[0])
174 self.assertEquals('', results[1]) 185 out = results[0].splitlines(False)
186 self.assertEquals(19, len(out))
187 self.checkString('', results[1])
175 self.assertEquals(0, results[2]) 188 self.assertEquals(0, results[2])
176 tree = mangle_svn_tree( 189 tree = mangle_svn_tree(
177 (join('trunk', 'src'), 'src', FAKE.svn_revs[1]), 190 (join('trunk', 'src'), 'src', FAKE.svn_revs[1]),
178 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'), 191 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'),
179 FAKE.svn_revs[2]), 192 FAKE.svn_revs[2]),
180 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), 193 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
181 (join('trunk', 'third_party', 'foo'), 194 (join('trunk', 'third_party', 'foo'),
182 join('src', 'third_party', 'prout'), 195 join('src', 'third_party', 'prout'),
183 FAKE.svn_revs[2]), 196 FAKE.svn_revs[2]),
184 ) 197 )
185 self.assertTree(tree) 198 self.assertTree(tree)
186 # Test incremental sync: delete-unversioned_trees isn't there. 199 # Test incremental sync: delete-unversioned_trees isn't there.
187 results = self.gclient(['sync', '--deps', 'mac']) 200 results = self.gclient(['sync', '--deps', 'mac'])
188 logging.debug(results[0]) 201 logging.debug(results[0])
189 self.assertEquals('', results[1]) 202 out = results[0].splitlines(False)
203 self.assertEquals(21, len(out))
204 self.checkString('', results[1])
190 self.assertEquals(0, results[2]) 205 self.assertEquals(0, results[2])
191 tree = mangle_svn_tree( 206 tree = mangle_svn_tree(
192 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), 207 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
193 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'), 208 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'fpp'),
194 FAKE.svn_revs[2]), 209 FAKE.svn_revs[2]),
195 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'), 210 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
196 FAKE.svn_revs[1]), 211 FAKE.svn_revs[1]),
197 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), 212 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
198 (join('trunk', 'third_party', 'foo'), 213 (join('trunk', 'third_party', 'foo'),
199 join('src', 'third_party', 'prout'), 214 join('src', 'third_party', 'prout'),
200 FAKE.svn_revs[2]), 215 FAKE.svn_revs[2]),
201 ) 216 )
217 tree[join('src', 'hooked1')] = 'hooked1'
202 self.assertTree(tree) 218 self.assertTree(tree)
203 219
204 def testRevertAndStatus(self): 220 def testRevertAndStatus(self):
205 self.gclient(['config', self.svn_base + 'trunk/src/']) 221 self.gclient(['config', self.svn_base + 'trunk/src/'])
206 results = self.gclient(['sync', '--deps', 'mac']) 222 # Tested in testSync.
223 self.gclient(['sync', '--deps', 'mac'])
207 write(join(self.root_dir, 'src', 'third_party', 'foo', 'hi'), 'Hey!') 224 write(join(self.root_dir, 'src', 'third_party', 'foo', 'hi'), 'Hey!')
208 225
209 results = self.gclient(['status']) 226 results = self.gclient(['status'])
210 out = results[0].splitlines(False) 227 out = results[0].splitlines(False)
211 self.assertEquals(7, len(out))
212 self.assertEquals(out[0], '') 228 self.assertEquals(out[0], '')
213 self.assertTrue(out[1].startswith('________ running \'svn status\' in \'')) 229 self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
214 self.assertEquals(out[2], '? other') 230 self.assertEquals(out[2], '? other')
215 self.assertEquals(out[3], '? third_party/foo') 231 self.assertEquals(out[3], '? hooked1')
216 self.assertEquals(out[4], '') 232 self.assertEquals(out[4], '? third_party/foo')
217 self.assertTrue(out[5].startswith('________ running \'svn status\' in \'')) 233 self.assertEquals(out[5], '')
218 self.assertEquals(out[6], '? hi') 234 self.assertTrue(out[6].startswith('________ running \'svn status\' in \''))
235 self.assertEquals(out[7], '? hi')
236 self.assertEquals(8, len(out))
219 self.assertEquals('', results[1]) 237 self.assertEquals('', results[1])
220 self.assertEquals(0, results[2]) 238 self.assertEquals(0, results[2])
221 239
240 # Revert implies --force implies running hooks without looking at pattern
241 # matching.
222 results = self.gclient(['revert']) 242 results = self.gclient(['revert'])
223 self.assertEquals('', results[1]) 243 out = results[0].splitlines(False)
244 self.assertEquals(22, len(out))
245 self.checkString('', results[1])
224 self.assertEquals(0, results[2]) 246 self.assertEquals(0, results[2])
225 tree = mangle_svn_tree( 247 tree = mangle_svn_tree(
226 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]), 248 (join('trunk', 'src'), 'src', FAKE.svn_revs[-1]),
227 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'), 249 (join('trunk', 'third_party', 'foo'), join('src', 'third_party', 'foo'),
228 FAKE.svn_revs[1]), 250 FAKE.svn_revs[1]),
229 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]), 251 (join('trunk', 'other'), join('src', 'other'), FAKE.svn_revs[2]),
230 ) 252 )
253 tree[join('src', 'hooked1')] = 'hooked1'
254 tree[join('src', 'hooked2')] = 'hooked2'
231 self.assertTree(tree) 255 self.assertTree(tree)
232 256
233 results = self.gclient(['status']) 257 results = self.gclient(['status'])
234 out = results[0].splitlines(False) 258 out = results[0].splitlines(False)
235 self.assertEquals(4, len(out))
236 self.assertEquals(out[0], '') 259 self.assertEquals(out[0], '')
237 self.assertTrue(out[1].startswith('________ running \'svn status\' in \'')) 260 self.assertTrue(out[1].startswith('________ running \'svn status\' in \''))
238 self.assertEquals(out[2], '? other') 261 self.assertEquals(out[2], '? other')
239 self.assertEquals(out[3], '? third_party/foo') 262 self.assertEquals(out[3], '? hooked1')
240 self.assertEquals('', results[1]) 263 self.assertEquals(out[4], '? hooked2')
264 self.assertEquals(out[5], '? third_party/foo')
265 self.assertEquals(6, len(out))
266 self.checkString('', results[1])
241 self.assertEquals(0, results[2]) 267 self.assertEquals(0, results[2])
242 268
269 def testRunHooks(self):
270 self.gclient(['config', self.svn_base + 'trunk/src/'])
271 self.gclient(['sync', '--deps', 'mac'])
272 results = self.gclient(['runhooks'])
273 out = results[0].splitlines(False)
274 self.assertEquals(4, len(out))
275 self.assertEquals(out[0], '')
276 self.assertTrue(re.match(r'^________ running \'.*?python -c '
277 r'open\(\'src/hooked1\', \'w\'\)\.write\(\'hooked1\'\)\' in \'.*',
278 out[1]))
279 self.assertEquals(out[2], '')
280 # runhooks runs all hooks even if not matching by design.
281 self.assertTrue(re.match(r'^________ running \'.*?python -c '
282 r'open\(\'src/hooked2\', \'w\'\)\.write\(\'hooked2\'\)\' in \'.*',
283 out[3]))
284 self.checkString('', results[1])
285 self.assertEquals(0, results[2])
286
287 def testRunHooksDepsOs(self):
288 self.gclient(['config', self.svn_base + 'trunk/src/'])
289 self.gclient(['sync', '--deps', 'mac', '--revision', 'src@1'])
290 results = self.gclient(['runhooks'])
291 self.check(('', '', 0), results)
292
293 def testRevInfo(self):
294 # TODO(maruel): Test multiple solutions.
295 self.gclient(['config', self.svn_base + 'trunk/src/'])
296 self.gclient(['sync', '--deps', 'mac'])
297 results = self.gclient(['revinfo'])
298 out = ('src: %(base)s/src@2;\n'
299 'src/other: %(base)s/other@2;\n'
300 'src/third_party/foo: %(base)s/third_party/foo@1\n' %
301 { 'base': self.svn_base + 'trunk' })
302 self.check((out, '', 0), results)
303
243 304
244 class GClientSmokeGIT(GClientSmokeBase): 305 class GClientSmokeGIT(GClientSmokeBase):
245 def testSyncGit(self): 306 def testSync(self):
246 """Test pure gclient git checkout, example of Chromium OS checkout"""
247 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) 307 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
248 # Test unversioned checkout. 308 # Test unversioned checkout.
249 results = self.gclient(['sync', '--deps', 'mac']) 309 results = self.gclient(['sync', '--deps', 'mac'])
250 logging.debug(results[0]) 310 out = results[0].splitlines(False)
311 # TODO(maruel): http://crosbug.com/3582 hooks run even if not matching, must
312 # add sync parsing to get the list of updated files.
313 self.assertEquals(13, len(out))
251 self.assertTrue(results[1].startswith('Switched to a new branch \'')) 314 self.assertTrue(results[1].startswith('Switched to a new branch \''))
252 self.assertEquals(0, results[2]) 315 self.assertEquals(0, results[2])
253 tree = mangle_git_tree( 316 tree = mangle_git_tree(
254 ('src', FAKE.git_hashes['repo_1'][1][1]), 317 ('src', FAKE.git_hashes['repo_1'][1][1]),
255 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]), 318 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]),
256 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]), 319 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
257 ) 320 )
321 tree[join('src', 'hooked1')] = 'hooked1'
322 tree[join('src', 'hooked2')] = 'hooked2'
258 self.assertTree(tree) 323 self.assertTree(tree)
259 324
325 # Manually remove hooked1 before synching to make sure it's not recreated.
326 os.remove(join(self.root_dir, 'src', 'hooked1'))
327
260 # Test incremental versioned sync: sync backward. 328 # Test incremental versioned sync: sync backward.
261 results = self.gclient(['sync', '--revision', 329 results = self.gclient(['sync', '--revision',
262 'src@' + FAKE.git_hashes['repo_1'][0][0], 330 'src@' + FAKE.git_hashes['repo_1'][0][0],
263 '--deps', 'mac', '--delete_unversioned_trees']) 331 '--deps', 'mac', '--delete_unversioned_trees'])
264 logging.debug(results[0]) 332 logging.debug(results[0])
265 self.assertEquals('', results[1]) 333 out = results[0].splitlines(False)
334 self.assertEquals(20, len(out))
335 self.checkString('', results[1])
266 self.assertEquals(0, results[2]) 336 self.assertEquals(0, results[2])
267 tree = mangle_git_tree( 337 tree = mangle_git_tree(
268 ('src', FAKE.git_hashes['repo_1'][0][1]), 338 ('src', FAKE.git_hashes['repo_1'][0][1]),
269 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]), 339 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]),
270 (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]), 340 (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]),
271 (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]), 341 (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]),
272 ) 342 )
343 tree[join('src', 'hooked2')] = 'hooked2'
273 self.assertTree(tree) 344 self.assertTree(tree)
274 # Test incremental sync: delete-unversioned_trees isn't there. 345 # Test incremental sync: delete-unversioned_trees isn't there.
275 results = self.gclient(['sync', '--deps', 'mac']) 346 results = self.gclient(['sync', '--deps', 'mac'])
276 logging.debug(results[0]) 347 logging.debug(results[0])
277 self.assertEquals('', results[1]) 348 out = results[0].splitlines(False)
349 self.assertEquals(25, len(out))
350 self.checkString('', results[1])
278 self.assertEquals(0, results[2]) 351 self.assertEquals(0, results[2])
279 tree = mangle_git_tree( 352 tree = mangle_git_tree(
280 ('src', FAKE.git_hashes['repo_1'][1][1]), 353 ('src', FAKE.git_hashes['repo_1'][1][1]),
281 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]), 354 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][1][1]),
282 (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]), 355 (join('src', 'repo2', 'repo3'), FAKE.git_hashes['repo_3'][1][1]),
283 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]), 356 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
284 (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]), 357 (join('src', 'repo4'), FAKE.git_hashes['repo_4'][1][1]),
285 ) 358 )
359 tree[join('src', 'hooked1')] = 'hooked1'
360 tree[join('src', 'hooked2')] = 'hooked2'
286 self.assertTree(tree) 361 self.assertTree(tree)
287 362
288 def testRevertAndStatus(self): 363 def testRevertAndStatus(self):
289 """TODO(maruel): Remove this line once this test is fixed.""" 364 """TODO(maruel): Remove this line once this test is fixed."""
290 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src']) 365 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
291 results = self.gclient(['sync', '--deps', 'mac']) 366 # Tested in testSync.
367 self.gclient(['sync', '--deps', 'mac'])
292 write(join(self.root_dir, 'src', 'repo2', 'hi'), 'Hey!') 368 write(join(self.root_dir, 'src', 'repo2', 'hi'), 'Hey!')
293 369
294 results = self.gclient(['status']) 370 results = self.gclient(['status'])
295 out = results[0].splitlines(False) 371 out = results[0].splitlines(False)
296 # TODO(maruel): THIS IS WRONG. 372 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned
373 # files.
297 self.assertEquals(0, len(out)) 374 self.assertEquals(0, len(out))
298 375
376 # Revert implies --force implies running hooks without looking at pattern
377 # matching.
299 results = self.gclient(['revert']) 378 results = self.gclient(['revert'])
300 self.assertEquals('', results[1]) 379 out = results[0].splitlines(False)
380 # TODO(maruel): http://crosbug.com/3583 It just runs the hooks right now.
381 self.assertEquals(7, len(out))
382 self.checkString('', results[1])
301 self.assertEquals(0, results[2]) 383 self.assertEquals(0, results[2])
302 tree = mangle_git_tree( 384 tree = mangle_git_tree(
303 ('src', FAKE.git_hashes['repo_1'][1][1]), 385 ('src', FAKE.git_hashes['repo_1'][1][1]),
304 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]), 386 (join('src', 'repo2'), FAKE.git_hashes['repo_2'][0][1]),
305 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]), 387 (join('src', 'repo2', 'repo_renamed'), FAKE.git_hashes['repo_3'][1][1]),
306 ) 388 )
307 # TODO(maruel): THIS IS WRONG. 389 # TODO(maruel): http://crosbug.com/3583 This file should have been removed.
308 tree[join('src', 'repo2', 'hi')] = 'Hey!' 390 tree[join('src', 'repo2', 'hi')] = 'Hey!'
391 tree[join('src', 'hooked1')] = 'hooked1'
392 tree[join('src', 'hooked2')] = 'hooked2'
309 self.assertTree(tree) 393 self.assertTree(tree)
310 394
311 results = self.gclient(['status']) 395 results = self.gclient(['status'])
312 out = results[0].splitlines(False) 396 out = results[0].splitlines(False)
313 # TODO(maruel): THIS IS WRONG. 397 # TODO(maruel): http://crosbug.com/3584 It should output the unversioned
398 # files.
314 self.assertEquals(0, len(out)) 399 self.assertEquals(0, len(out))
315 400
316 401 def testRunHooks(self):
317 class GClientSmokeRevInfo(GClientSmokeBase): 402 self.gclient(['config', self.git_base + 'repo_1', '--name', 'src'])
318 """revert is the second most important command. Hence test it more.""" 403 self.gclient(['sync', '--deps', 'mac'])
319 def setUp(self): 404 results = self.gclient(['runhooks'])
320 GClientSmokeBase.setUp(self) 405 logging.debug(results[0])
321 self.gclient(['config', self.URL_BASE]) 406 out = results[0].splitlines(False)
407 self.assertEquals(4, len(out))
408 self.assertEquals(out[0], '')
409 self.assertTrue(re.match(r'^________ running \'.*?python -c '
410 r'open\(\'src/hooked1\', \'w\'\)\.write\(\'hooked1\'\)\' in \'.*',
411 out[1]))
412 self.assertEquals(out[2], '')
413 # runhooks runs all hooks even if not matching by design.
414 self.assertTrue(re.match(r'^________ running \'.*?python -c '
415 r'open\(\'src/hooked2\', \'w\'\)\.write\(\'hooked2\'\)\' in \'.*',
416 out[3]))
417 self.checkString('', results[1])
418 self.assertEquals(0, results[2])
322 419
323 420
324 if __name__ == '__main__': 421 if __name__ == '__main__':
325 if '-v' in sys.argv: 422 if '-v' in sys.argv:
326 logging.basicConfig(level=logging.DEBUG) 423 logging.basicConfig(level=logging.DEBUG)
327 if '-l' in sys.argv: 424 if '-l' in sys.argv:
328 SHOULD_LEAK = True 425 SHOULD_LEAK = True
329 sys.argv.remove('-l') 426 sys.argv.remove('-l')
330 FAKE = FakeRepos(TRIAL_DIR, SHOULD_LEAK, True) 427 FAKE = FakeRepos(TRIAL_DIR, SHOULD_LEAK, True)
331 try: 428 try:
332 FAKE.setUp() 429 FAKE.setUp()
333 unittest.main() 430 unittest.main()
334 finally: 431 finally:
335 FAKE.tearDown() 432 FAKE.tearDown()
OLDNEW
« no previous file with comments | « tests/fake_repos.py ('k') | tests/gclient_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698