| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 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 presubmit_support.py and presubmit_canned_checks.py.""" | 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" |
| 7 | 7 |
| 8 # pylint: disable=E1101,E1103 | 8 # pylint: disable=E1101,E1103 |
| 9 | 9 |
| 10 import logging | 10 import logging |
| (...skipping 2201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2212 self.mox.ReplayAll() | 2212 self.mox.ReplayAll() |
| 2213 | 2213 |
| 2214 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( | 2214 results = presubmit_canned_checks.CheckBuildbotPendingBuilds( |
| 2215 input_api, presubmit.OutputApi, 'uurl', 2, ('foo')) | 2215 input_api, presubmit.OutputApi, 'uurl', 2, ('foo')) |
| 2216 self.assertEquals(len(results), 1) | 2216 self.assertEquals(len(results), 1) |
| 2217 self.assertEquals(results[0].__class__, | 2217 self.assertEquals(results[0].__class__, |
| 2218 presubmit.OutputApi.PresubmitNotifyResult) | 2218 presubmit.OutputApi.PresubmitNotifyResult) |
| 2219 | 2219 |
| 2220 def AssertOwnersWorks(self, tbr=False, issue='1', approvers=None, | 2220 def AssertOwnersWorks(self, tbr=False, issue='1', approvers=None, |
| 2221 reviewers=None, is_committing=True, rietveld_response=None, | 2221 reviewers=None, is_committing=True, rietveld_response=None, |
| 2222 uncovered_dirs=None, expected_output=''): | 2222 uncovered_files=None, expected_output=''): |
| 2223 if approvers is None: | 2223 if approvers is None: |
| 2224 approvers = set() | 2224 approvers = set() |
| 2225 if reviewers is None: | 2225 if reviewers is None: |
| 2226 reviewers = set() | 2226 reviewers = set() |
| 2227 reviewers = reviewers.union(approvers) | 2227 reviewers = reviewers.union(approvers) |
| 2228 if uncovered_dirs is None: | 2228 if uncovered_files is None: |
| 2229 uncovered_dirs = set() | 2229 uncovered_files = set() |
| 2230 | 2230 |
| 2231 change = self.mox.CreateMock(presubmit.Change) | 2231 change = self.mox.CreateMock(presubmit.Change) |
| 2232 change.issue = issue | 2232 change.issue = issue |
| 2233 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) | 2233 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) |
| 2234 input_api = self.MockInputApi(change, False) | 2234 input_api = self.MockInputApi(change, False) |
| 2235 fake_db = self.mox.CreateMock(owners.Database) | 2235 fake_db = self.mox.CreateMock(owners.Database) |
| 2236 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP) | 2236 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP) |
| 2237 input_api.owners_db = fake_db | 2237 input_api.owners_db = fake_db |
| 2238 input_api.is_committing = is_committing | 2238 input_api.is_committing = is_committing |
| 2239 input_api.tbr = tbr | 2239 input_api.tbr = tbr |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2256 people = approvers | 2256 people = approvers |
| 2257 else: | 2257 else: |
| 2258 people = reviewers | 2258 people = reviewers |
| 2259 | 2259 |
| 2260 if issue: | 2260 if issue: |
| 2261 input_api.rietveld.get_issue_properties( | 2261 input_api.rietveld.get_issue_properties( |
| 2262 issue=int(input_api.change.issue), messages=True).AndReturn( | 2262 issue=int(input_api.change.issue), messages=True).AndReturn( |
| 2263 rietveld_response) | 2263 rietveld_response) |
| 2264 people.add(owner_email) | 2264 people.add(owner_email) |
| 2265 | 2265 |
| 2266 fake_db.directories_not_covered_by(set(['foo/xyz.cc']), | 2266 fake_db.files_not_covered_by(set(['foo/xyz.cc']), |
| 2267 people).AndReturn(uncovered_dirs) | 2267 people).AndReturn(uncovered_files) |
| 2268 if not is_committing and uncovered_dirs: | 2268 if not is_committing and uncovered_files: |
| 2269 fake_db.reviewers_for(set(['foo/xyz.cc'])).AndReturn(owner_email) | 2269 fake_db.reviewers_for(set(['foo/xyz.cc'])).AndReturn(owner_email) |
| 2270 | 2270 |
| 2271 self.mox.ReplayAll() | 2271 self.mox.ReplayAll() |
| 2272 output = presubmit.PresubmitOutput() | 2272 output = presubmit.PresubmitOutput() |
| 2273 results = presubmit_canned_checks.CheckOwners(input_api, | 2273 results = presubmit_canned_checks.CheckOwners(input_api, |
| 2274 presubmit.OutputApi) | 2274 presubmit.OutputApi) |
| 2275 if results: | 2275 if results: |
| 2276 results[0].handle(output) | 2276 results[0].handle(output) |
| 2277 self.assertEquals(output.getvalue(), expected_output) | 2277 self.assertEquals(output.getvalue(), expected_output) |
| 2278 | 2278 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2345 | 2345 |
| 2346 def testCannedCheckOwners_NoIssueNoFiles(self): | 2346 def testCannedCheckOwners_NoIssueNoFiles(self): |
| 2347 self.AssertOwnersWorks(issue=None, | 2347 self.AssertOwnersWorks(issue=None, |
| 2348 expected_output="OWNERS check failed: this change has no Rietveld " | 2348 expected_output="OWNERS check failed: this change has no Rietveld " |
| 2349 "issue number, so we can't check it for approvals.\n") | 2349 "issue number, so we can't check it for approvals.\n") |
| 2350 self.AssertOwnersWorks(issue=None, is_committing=False, | 2350 self.AssertOwnersWorks(issue=None, is_committing=False, |
| 2351 expected_output="") | 2351 expected_output="") |
| 2352 | 2352 |
| 2353 def testCannedCheckOwners_NoIssue(self): | 2353 def testCannedCheckOwners_NoIssue(self): |
| 2354 self.AssertOwnersWorks(issue=None, | 2354 self.AssertOwnersWorks(issue=None, |
| 2355 uncovered_dirs=set(['foo']), | 2355 uncovered_files=set(['foo']), |
| 2356 expected_output="OWNERS check failed: this change has no Rietveld " | 2356 expected_output="OWNERS check failed: this change has no Rietveld " |
| 2357 "issue number, so we can't check it for approvals.\n") | 2357 "issue number, so we can't check it for approvals.\n") |
| 2358 self.AssertOwnersWorks(issue=None, | 2358 self.AssertOwnersWorks(issue=None, |
| 2359 is_committing=False, | 2359 is_committing=False, |
| 2360 uncovered_dirs=set(['foo']), | 2360 uncovered_files=set(['foo']), |
| 2361 expected_output='Missing OWNER reviewers for files in these ' | 2361 expected_output='Missing OWNER reviewers for these files:\n' |
| 2362 'directories:\n' | |
| 2363 ' foo\n' | 2362 ' foo\n' |
| 2364 'Until the issue is uploaded, this list will include ' | 2363 'Until the issue is uploaded, this list will include ' |
| 2365 'directories for which you \n' | 2364 'files for which you are an OWNER.\n') |
| 2366 'are an OWNER.\n') | |
| 2367 | 2365 |
| 2368 def testCannedCheckOwners_NoLGTM(self): | 2366 def testCannedCheckOwners_NoLGTM(self): |
| 2369 self.AssertOwnersWorks(expected_output='Missing LGTM from someone ' | 2367 self.AssertOwnersWorks(expected_output='Missing LGTM from someone ' |
| 2370 'other than john@example.com\n') | 2368 'other than john@example.com\n') |
| 2371 self.AssertOwnersWorks(is_committing=False, expected_output='') | 2369 self.AssertOwnersWorks(is_committing=False, expected_output='') |
| 2372 | 2370 |
| 2373 def testCannedCheckOwners_OnlyOwnerLGTM(self): | 2371 def testCannedCheckOwners_OnlyOwnerLGTM(self): |
| 2374 self.AssertOwnersWorks(approvers=set(['john@example.com']), | 2372 self.AssertOwnersWorks(approvers=set(['john@example.com']), |
| 2375 expected_output='Missing LGTM from someone ' | 2373 expected_output='Missing LGTM from someone ' |
| 2376 'other than john@example.com\n') | 2374 'other than john@example.com\n') |
| 2377 self.AssertOwnersWorks(approvers=set(['john@example.com']), | 2375 self.AssertOwnersWorks(approvers=set(['john@example.com']), |
| 2378 is_committing=False, | 2376 is_committing=False, |
| 2379 expected_output='') | 2377 expected_output='') |
| 2380 | 2378 |
| 2381 def testCannedCheckOwners_TBR(self): | 2379 def testCannedCheckOwners_TBR(self): |
| 2382 self.AssertOwnersWorks(tbr=True, | 2380 self.AssertOwnersWorks(tbr=True, |
| 2383 expected_output='--tbr was specified, skipping OWNERS check\n') | 2381 expected_output='--tbr was specified, skipping OWNERS check\n') |
| 2384 self.AssertOwnersWorks(tbr=True, is_committing=False, expected_output='') | 2382 self.AssertOwnersWorks(tbr=True, is_committing=False, expected_output='') |
| 2385 | 2383 |
| 2386 def testCannedCheckOwners_WithoutOwnerLGTM(self): | 2384 def testCannedCheckOwners_WithoutOwnerLGTM(self): |
| 2387 self.AssertOwnersWorks(uncovered_dirs=set(['foo']), | 2385 self.AssertOwnersWorks(uncovered_files=set(['foo']), |
| 2388 expected_output='Missing LGTM from an OWNER for files in these ' | 2386 expected_output='Missing LGTM from an OWNER for these files:\n' |
| 2389 'directories:\n' | |
| 2390 ' foo\n') | 2387 ' foo\n') |
| 2391 self.AssertOwnersWorks(uncovered_dirs=set(['foo']), | 2388 self.AssertOwnersWorks(uncovered_files=set(['foo']), |
| 2392 is_committing=False, | 2389 is_committing=False, |
| 2393 expected_output='Missing OWNER reviewers for files in these ' | 2390 expected_output='Missing OWNER reviewers for these files:\n' |
| 2394 'directories:\n' | |
| 2395 ' foo\n') | 2391 ' foo\n') |
| 2396 | 2392 |
| 2397 def testCannedCheckOwners_WithLGTMs(self): | 2393 def testCannedCheckOwners_WithLGTMs(self): |
| 2398 self.AssertOwnersWorks(approvers=set(['ben@example.com']), | 2394 self.AssertOwnersWorks(approvers=set(['ben@example.com']), |
| 2399 uncovered_dirs=set()) | 2395 uncovered_files=set()) |
| 2400 self.AssertOwnersWorks(approvers=set(['ben@example.com']), | 2396 self.AssertOwnersWorks(approvers=set(['ben@example.com']), |
| 2401 is_committing=False, | 2397 is_committing=False, |
| 2402 uncovered_dirs=set()) | 2398 uncovered_files=set()) |
| 2403 | 2399 |
| 2404 def testCannedRunUnitTests(self): | 2400 def testCannedRunUnitTests(self): |
| 2405 change = presubmit.Change( | 2401 change = presubmit.Change( |
| 2406 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None) | 2402 'foo1', 'description1', self.fake_root_dir, None, 0, 0, None) |
| 2407 input_api = self.MockInputApi(change, False) | 2403 input_api = self.MockInputApi(change, False) |
| 2408 input_api.verbose = True | 2404 input_api.verbose = True |
| 2409 unit_tests = ['allo', 'bar.py'] | 2405 unit_tests = ['allo', 'bar.py'] |
| 2410 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) | 2406 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) |
| 2411 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) | 2407 input_api.PresubmitLocalPath().AndReturn(self.fake_root_dir) |
| 2412 input_api.subprocess.check_call( | 2408 input_api.subprocess.check_call( |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2491 owners_check=False) | 2487 owners_check=False) |
| 2492 self.assertEqual(1, len(results)) | 2488 self.assertEqual(1, len(results)) |
| 2493 self.assertEqual( | 2489 self.assertEqual( |
| 2494 'Found line ending with white spaces in:', results[0]._message) | 2490 'Found line ending with white spaces in:', results[0]._message) |
| 2495 self.checkstdout('') | 2491 self.checkstdout('') |
| 2496 | 2492 |
| 2497 | 2493 |
| 2498 if __name__ == '__main__': | 2494 if __name__ == '__main__': |
| 2499 import unittest | 2495 import unittest |
| 2500 unittest.main() | 2496 unittest.main() |
| OLD | NEW |