Index: tests/owners_unittest.py |
diff --git a/tests/owners_unittest.py b/tests/owners_unittest.py |
index cc4e0d834d87d9c6aa5c2cfafc09bb1660001aee..7531f83af3c391c24e45aefb153afa78bc833779 100755 |
--- a/tests/owners_unittest.py |
+++ b/tests/owners_unittest.py |
@@ -19,15 +19,17 @@ peter = 'peter@example.com' |
def owners_file(*email_addresses, **kwargs): |
s = '' |
+ if kwargs.get('comment'): |
+ s += '# %s\n' % kwargs.get('comment') |
if kwargs.get('noparent'): |
- s = 'set noparent\n' |
+ s += 'set noparent\n' |
return s + '\n'.join(email_addresses) + '\n' |
def test_repo(): |
return filesystem_mock.MockFileSystem(files={ |
'/DEPS' : '', |
- '/OWNERS': owners_file('*'), |
+ '/OWNERS': owners_file(owners.EVERYONE), |
'/base/vlog.h': '', |
'/chrome/OWNERS': owners_file(ben, brett), |
'/chrome/gpu/OWNERS': owners_file(ken), |
@@ -35,7 +37,7 @@ def test_repo(): |
'/chrome/renderer/OWNERS': owners_file(peter), |
'/chrome/renderer/gpu/gpu_channel_host.h': '', |
'/chrome/renderer/safe_browsing/scorer.h': '', |
- '/content/OWNERS': owners_file(john, darin, noparent=True), |
+ '/content/OWNERS': owners_file(john, darin, comment='foo', noparent=True), |
'/content/content.gyp': '', |
}) |
@@ -53,70 +55,76 @@ class OwnersDatabaseTest(unittest.TestCase): |
os_path = os_path or self.repo |
return owners.Database(root, fopen, os_path) |
- def assertReviewersFor(self, files, expected_reviewers): |
- db = self.db() |
- self.assertEquals(db.ReviewersFor(set(files)), set(expected_reviewers)) |
+ def test_Constructor(self): |
+ self.assertNotEquals(self.db(), None) |
- def assertCoveredBy(self, files, reviewers): |
+ def assert_CoveredBy(self, files, reviewers): |
db = self.db() |
self.assertTrue(db.FilesAreCoveredBy(set(files), set(reviewers))) |
- def assertNotCoveredBy(self, files, reviewers, unreviewed_files): |
+ def test_CoveredBy_Everyone(self): |
+ self.assert_CoveredBy(['DEPS'], [john]) |
+ self.assert_CoveredBy(['DEPS'], [darin]) |
+ |
+ def test_CoveredBy_Explicit(self): |
+ self.assert_CoveredBy(['content/content.gyp'], [john]) |
+ self.assert_CoveredBy(['chrome/gpu/OWNERS'], [ken]) |
+ |
+ def test_CoveredBy_OwnersPropagatesDown(self): |
+ self.assert_CoveredBy(['chrome/gpu/OWNERS'], [ben]) |
+ self.assert_CoveredBy(['/chrome/renderer/gpu/gpu_channel_host.h'], [peter]) |
+ |
+ def assert_NotCoveredBy(self, files, reviewers, unreviewed_files): |
db = self.db() |
self.assertEquals(db.FilesNotCoveredBy(set(files), set(reviewers)), |
set(unreviewed_files)) |
- def test_constructor(self): |
- self.assertNotEquals(self.db(), None) |
+ def test_NotCoveredBy_NeedAtLeastOneReviewer(self): |
+ self.assert_NotCoveredBy(['DEPS'], [], ['DEPS']) |
- def test_owners_for(self): |
- self.assertReviewersFor(['DEPS'], [owners.ANYONE]) |
- self.assertReviewersFor(['content/content.gyp'], [john, darin]) |
- self.assertReviewersFor(['chrome/gpu/gpu_channel.h'], [ken]) |
- |
- def test_covered_by(self): |
- self.assertCoveredBy(['DEPS'], [john]) |
- self.assertCoveredBy(['DEPS'], [darin]) |
- self.assertCoveredBy(['content/content.gyp'], [john]) |
- self.assertCoveredBy(['chrome/gpu/OWNERS'], [ken]) |
- self.assertCoveredBy(['chrome/gpu/OWNERS'], [ben]) |
- |
- def test_not_covered_by(self): |
- self.assertNotCoveredBy(['DEPS'], [], ['DEPS']) |
- self.assertNotCoveredBy(['content/content.gyp'], [ben], |
- ['content/content.gyp']) |
- self.assertNotCoveredBy( |
- ['chrome/gpu/gpu_channel.h', 'chrome/renderer/gpu/gpu_channel_host.h'], |
- [peter], ['chrome/gpu/gpu_channel.h']) |
- self.assertNotCoveredBy( |
+ def test_NotCoveredBy_OwnersPropagatesDown(self): |
+ self.assert_NotCoveredBy( |
['chrome/gpu/gpu_channel.h', 'chrome/renderer/gpu/gpu_channel_host.h'], |
[ben], []) |
- def test_comments_in_owners_file(self): |
- # pylint: disable=W0212 |
+ def test_NotCoveredBy_PartialCovering(self): |
+ self.assert_NotCoveredBy( |
+ ['content/content.gyp', 'chrome/renderer/gpu/gpu_channel_host.h'], |
+ [peter], ['content/content.gyp']) |
+ |
+ def test_NotCoveredBy_SetNoParentWorks(self): |
+ self.assert_NotCoveredBy(['content/content.gyp'], [ben], |
+ ['content/content.gyp']) |
+ |
+ def assert_ReviewersFor(self, files, expected_reviewers): |
db = self.db() |
- # Tests that this doesn't raise an error. |
- db._ReadOwnersFile('OWNERS', 'DEPS') |
+ self.assertEquals(db.ReviewersFor(set(files)), set(expected_reviewers)) |
+ |
+ def test_ReviewersFor_BasicFunctionality(self): |
+ self.assert_ReviewersFor(['chrome/gpu/gpu_channel.h'], |
+ [ken, ben, brett, owners.EVERYONE]) |
+ |
+ def test_ReviewersFor_SetNoParentWorks(self): |
+ self.assert_ReviewersFor(['content/content.gyp'], [john, darin]) |
- def test_syntax_error_in_owners_file(self): |
- # pylint: disable=W0212 |
+ def test_ReviewersFor_WildcardDir(self): |
+ self.assert_ReviewersFor(['DEPS'], [owners.EVERYONE]) |
+ |
+ def assert_SyntaxError(self, owners_file_contents): |
db = self.db() |
- self.files['/foo/OWNERS'] = '{}\n' |
- self.files['/foo/DEPS'] = '# DEPS\n' |
- self.assertRaises(owners.SyntaxErrorInOwnersFile, db._ReadOwnersFile, |
- '/foo/OWNERS', '/foo/DEPS') |
- |
- self.files['/bar/OWNERS'] = 'set myparentislinus\n' |
- self.files['/bar/DEPS'] = '# DEPS\n' |
- self.assertRaises(owners.SyntaxErrorInOwnersFile, db._ReadOwnersFile, |
- '/bar/OWNERS', '/bar/DEPS') |
- |
- def test_owners_propagates_down(self): |
- self.assertCoveredBy(['/chrome/renderer/gpu/gpu_channel_host.h'], [peter]) |
- |
- def test_set_noparent(self): |
- self.assertNotCoveredBy(['/content/content.gyp'], [peter], |
- ['/content/content.gyp']) |
+ self.files['/foo/OWNERS'] = owners_file_contents |
+ self.files['/foo/DEPS'] = '' |
+ self.assertRaises(owners.SyntaxErrorInOwnersFile, db.ReviewersFor, |
+ ['/foo/DEPS']) |
+ |
+ def test_SyntaxError_UnknownToken(self): |
+ self.assert_SyntaxError('{}\n') |
+ |
+ def test_SyntaxError_UnknownSet(self): |
+ self.assert_SyntaxError('set myfatherisbillgates\n') |
+ |
+ def test_SyntaxError_BadEmail(self): |
+ self.assert_SyntaxError('ben\n') |
if __name__ == '__main__': |