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

Side by Side Diff: tests/presubmit_unittest.py

Issue 12326151: Add a way to require approval from owners other than the author. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: fix wording in comment Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « tests/owners_unittest.py ('k') | 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/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
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_files=None, expected_output=''): 2222 uncovered_files=None, expected_output='', author_counts_as_owner=True):
2223 if approvers is None: 2223 if approvers is None:
2224 # The set of people who lgtm'ed a change.
2224 approvers = set() 2225 approvers = set()
2225 if reviewers is None: 2226 if reviewers is None:
2226 reviewers = set() 2227 # The set of people needed to lgtm a change. We default to
2227 reviewers = reviewers.union(approvers) 2228 # the same list as the people who approved it. We use 'reviewers'
2229 # to avoid a name collision w/ owners.py.
2230 reviewers = approvers
2228 if uncovered_files is None: 2231 if uncovered_files is None:
2229 uncovered_files = set() 2232 uncovered_files = set()
2230 2233
2231 change = self.mox.CreateMock(presubmit.Change) 2234 change = self.mox.CreateMock(presubmit.Change)
2232 change.issue = issue 2235 change.issue = issue
2233 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile) 2236 affected_file = self.mox.CreateMock(presubmit.SvnAffectedFile)
2234 input_api = self.MockInputApi(change, False) 2237 input_api = self.MockInputApi(change, False)
2235 fake_db = self.mox.CreateMock(owners.Database) 2238 fake_db = self.mox.CreateMock(owners.Database)
2236 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP) 2239 fake_db.email_regexp = input_api.re.compile(owners.BASIC_EMAIL_REGEXP)
2237 input_api.owners_db = fake_db 2240 input_api.owners_db = fake_db
(...skipping 18 matching lines...) Expand all
2256 people = approvers 2259 people = approvers
2257 else: 2260 else:
2258 people = reviewers 2261 people = reviewers
2259 2262
2260 if issue: 2263 if issue:
2261 input_api.rietveld.get_issue_properties( 2264 input_api.rietveld.get_issue_properties(
2262 issue=int(input_api.change.issue), messages=True).AndReturn( 2265 issue=int(input_api.change.issue), messages=True).AndReturn(
2263 rietveld_response) 2266 rietveld_response)
2264 people.add(owner_email) 2267 people.add(owner_email)
2265 2268
2266 fake_db.files_not_covered_by(set(['foo/xyz.cc']), 2269 if author_counts_as_owner:
2267 people).AndReturn(uncovered_files) 2270 fake_db.files_not_covered_by(set(['foo/xyz.cc']),
2271 people).AndReturn(uncovered_files)
2272 else:
2273 fake_db.files_not_covered_by(set(['foo/xyz.cc']),
2274 people.difference(set([owner_email]))).AndReturn(uncovered_files)
2268 if not is_committing and uncovered_files: 2275 if not is_committing and uncovered_files:
2269 fake_db.reviewers_for(set(['foo/xyz.cc'])).AndReturn(owner_email) 2276 fake_db.reviewers_for(set(['foo/xyz.cc']),
2277 owner_email if issue else '').AndReturn(owner_email)
2270 2278
2271 self.mox.ReplayAll() 2279 self.mox.ReplayAll()
2272 output = presubmit.PresubmitOutput() 2280 output = presubmit.PresubmitOutput()
2273 results = presubmit_canned_checks.CheckOwners(input_api, 2281 results = presubmit_canned_checks.CheckOwners(input_api,
2274 presubmit.OutputApi) 2282 presubmit.OutputApi, author_counts_as_owner=author_counts_as_owner)
2275 if results: 2283 if results:
2276 results[0].handle(output) 2284 results[0].handle(output)
2277 self.assertEquals(output.getvalue(), expected_output) 2285 self.assertEquals(output.getvalue(), expected_output)
2278 2286
2279 def testCannedCheckOwners_Approved(self): 2287 def testCannedCheckOwners_Approved(self):
2280 response = { 2288 response = {
2281 "owner_email": "john@example.com", 2289 "owner_email": "john@example.com",
2282 "messages": [ 2290 "messages": [
2283 { 2291 {
2284 "sender": "ben@example.com", "text": "foo", "approval": True, 2292 "sender": "ben@example.com", "text": "foo", "approval": True,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2369 self.AssertOwnersWorks(is_committing=False, expected_output='') 2377 self.AssertOwnersWorks(is_committing=False, expected_output='')
2370 2378
2371 def testCannedCheckOwners_OnlyOwnerLGTM(self): 2379 def testCannedCheckOwners_OnlyOwnerLGTM(self):
2372 self.AssertOwnersWorks(approvers=set(['john@example.com']), 2380 self.AssertOwnersWorks(approvers=set(['john@example.com']),
2373 expected_output='Missing LGTM from someone ' 2381 expected_output='Missing LGTM from someone '
2374 'other than john@example.com\n') 2382 'other than john@example.com\n')
2375 self.AssertOwnersWorks(approvers=set(['john@example.com']), 2383 self.AssertOwnersWorks(approvers=set(['john@example.com']),
2376 is_committing=False, 2384 is_committing=False,
2377 expected_output='') 2385 expected_output='')
2378 2386
2387 def testCannedCheckOwners_AuthorCountsAsOwner(self):
2388 self.AssertOwnersWorks(approvers=set(['john@example.com',
2389 'brett@example.com']),
2390 reviewers=set(['john@example.com',
2391 'ben@example.com']),
2392 uncovered_files=set(['foo/xyz.cc']),
2393 expected_output='Missing LGTM from an OWNER '
2394 'for these files:\n foo/xyz.cc\n',
2395 author_counts_as_owner=False)
2396
2379 def testCannedCheckOwners_TBR(self): 2397 def testCannedCheckOwners_TBR(self):
2380 self.AssertOwnersWorks(tbr=True, 2398 self.AssertOwnersWorks(tbr=True,
2381 expected_output='--tbr was specified, skipping OWNERS check\n') 2399 expected_output='--tbr was specified, skipping OWNERS check\n')
2382 self.AssertOwnersWorks(tbr=True, is_committing=False, expected_output='') 2400 self.AssertOwnersWorks(tbr=True, is_committing=False, expected_output='')
2383 2401
2384 def testCannedCheckOwners_WithoutOwnerLGTM(self): 2402 def testCannedCheckOwners_WithoutOwnerLGTM(self):
2385 self.AssertOwnersWorks(uncovered_files=set(['foo']), 2403 self.AssertOwnersWorks(uncovered_files=set(['foo']),
2386 expected_output='Missing LGTM from an OWNER for these files:\n' 2404 expected_output='Missing LGTM from an OWNER for these files:\n'
2387 ' foo\n') 2405 ' foo\n')
2388 self.AssertOwnersWorks(uncovered_files=set(['foo']), 2406 self.AssertOwnersWorks(uncovered_files=set(['foo']),
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2487 owners_check=False) 2505 owners_check=False)
2488 self.assertEqual(1, len(results)) 2506 self.assertEqual(1, len(results))
2489 self.assertEqual( 2507 self.assertEqual(
2490 'Found line ending with white spaces in:', results[0]._message) 2508 'Found line ending with white spaces in:', results[0]._message)
2491 self.checkstdout('') 2509 self.checkstdout('')
2492 2510
2493 2511
2494 if __name__ == '__main__': 2512 if __name__ == '__main__':
2495 import unittest 2513 import unittest
2496 unittest.main() 2514 unittest.main()
OLDNEW
« no previous file with comments | « tests/owners_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698