| Index: tests/owners_unittest.py
|
| diff --git a/tests/owners_unittest.py b/tests/owners_unittest.py
|
| index f205aed697cf3bd6b74e1e62fcb3f246a1866c31..5cb177411c6d6061107299ce8fb85a8e2d9c650a 100755
|
| --- a/tests/owners_unittest.py
|
| +++ b/tests/owners_unittest.py
|
| @@ -30,6 +30,8 @@ def owners_file(*email_addresses, **kwargs):
|
| s += '# %s\n' % kwargs.get('comment')
|
| if kwargs.get('noparent'):
|
| s += 'set noparent\n'
|
| + if kwargs.get('file'):
|
| + s += 'file:%s\n' % kwargs.get('file')
|
| s += '\n'.join(kwargs.get('lines', [])) + '\n'
|
| return s + '\n'.join(email_addresses) + '\n'
|
|
|
| @@ -54,6 +56,11 @@ def test_repo():
|
| '/content/baz/froboz.h': '',
|
| '/content/baz/ugly.cc': '',
|
| '/content/baz/ugly.h': '',
|
| + '/content/garply/OWNERS': owners_file(file='test/OWNERS'),
|
| + '/content/garply/foo.cc': '',
|
| + '/content/garply/test/OWNERS': owners_file(peter),
|
| + '/content/qux/OWNERS': owners_file(peter, file='//content/baz/OWNERS'),
|
| + '/content/qux/foo.cc': '',
|
| '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE,
|
| noparent=True),
|
| '/content/views/pie.h': '',
|
| @@ -209,6 +216,50 @@ class OwnersDatabaseTest(_BaseTestCase):
|
| self.assertRaises(owners.SyntaxErrorInOwnersFile,
|
| self.db().files_not_covered_by, ['DEPS'], [brett])
|
|
|
| + def test_file_include_absolute_path(self):
|
| + self.assert_files_not_covered_by(['content/qux/foo.cc'], [brett], [])
|
| + self.assert_files_not_covered_by(['content/qux/bar.cc'], [peter], [])
|
| + self.assert_files_not_covered_by(['content/qux/baz.cc'],
|
| + [tom], ['content/qux/baz.cc'])
|
| +
|
| + def test_file_include_relative_path(self):
|
| + self.assert_files_not_covered_by(['content/garply/foo.cc'], [peter], [])
|
| + self.assert_files_not_covered_by(['content/garply/bar.cc'], [darin], [])
|
| + self.assert_files_not_covered_by(['content/garply/baz.cc'],
|
| + [tom], ['content/garply/baz.cc'])
|
| +
|
| + def test_file_include_per_file_absolute_path(self):
|
| + self.files['/content/qux/OWNERS'] = owners_file(peter,
|
| + lines=['per-file foo.*=file://content/baz/OWNERS'])
|
| +
|
| + self.assert_files_not_covered_by(['content/qux/foo.cc'], [brett], [])
|
| + self.assert_files_not_covered_by(['content/qux/baz.cc'],
|
| + [brett], ['content/qux/baz.cc'])
|
| +
|
| + def test_file_include_per_file_relative_path(self):
|
| + self.files['/content/garply/OWNERS'] = owners_file(brett,
|
| + lines=['per-file foo.*=file:test/OWNERS'])
|
| +
|
| + self.assert_files_not_covered_by(['content/garply/foo.cc'], [peter], [])
|
| + self.assert_files_not_covered_by(['content/garply/baz.cc'],
|
| + [peter], ['content/garply/baz.cc'])
|
| +
|
| + def test_file_include_recursive(self):
|
| + self.files['/content/baz/OWNERS'] = owners_file(file='//chrome/gpu/OWNERS')
|
| + self.assert_files_not_covered_by(['content/qux/foo.cc'], [ken], [])
|
| +
|
| + def test_file_include_recursive_loop(self):
|
| + self.files['/content/baz/OWNERS'] = owners_file(brett,
|
| + file='//content/qux/OWNERS')
|
| + self.test_file_include_absolute_path()
|
| +
|
| + def test_file_include_different_filename(self):
|
| + self.files['/owners/garply'] = owners_file(peter)
|
| + self.files['/content/garply/OWNERS'] = owners_file(john,
|
| + lines=['per-file foo.*=file://owners/garply'])
|
| +
|
| + self.assert_files_not_covered_by(['content/garply/foo.cc'], [peter], [])
|
| +
|
| def assert_syntax_error(self, owners_file_contents):
|
| db = self.db()
|
| self.files['/foo/OWNERS'] = owners_file_contents
|
| @@ -228,6 +279,12 @@ class OwnersDatabaseTest(_BaseTestCase):
|
| def test_syntax_error__bad_email(self):
|
| self.assert_syntax_error('ben\n')
|
|
|
| + def test_syntax_error__invalid_absolute_file(self):
|
| + self.assert_syntax_error('file://foo/bar/baz\n')
|
| +
|
| + def test_syntax_error__invalid_relative_file(self):
|
| + self.assert_syntax_error('file:foo/bar/baz\n')
|
| +
|
|
|
| class ReviewersForTest(_BaseTestCase):
|
| def assert_reviewers_for(self, files, potential_suggested_reviewers,
|
| @@ -322,6 +379,33 @@ class ReviewersForTest(_BaseTestCase):
|
| self.assert_reviewers_for(['chrome/gpu/gpu_channel.h'],
|
| [[ben], [brett]], author=ken)
|
|
|
| + def test_reviewers_file_includes__absolute(self):
|
| + self.assert_reviewers_for(['content/qux/foo.cc'],
|
| + [[peter], [brett], [john], [darin]])
|
| +
|
| + def test_reviewers_file_includes__relative(self):
|
| + self.assert_reviewers_for(['content/garply/foo.cc'],
|
| + [[peter], [john], [darin]])
|
| +
|
| + def test_reviewers_file_includes__per_file(self):
|
| + self.files['/content/garply/OWNERS'] = owners_file(brett,
|
| + lines=['per-file foo.*=file:test/OWNERS'])
|
| +
|
| + self.assert_reviewers_for(['content/garply/foo.cc'],
|
| + [[brett], [peter]])
|
| + self.assert_reviewers_for(['content/garply/bar.cc'],
|
| + [[brett]])
|
| +
|
| + def test_reviewers_file_includes__per_file_noparent(self):
|
| + self.files['/content/garply/OWNERS'] = owners_file(brett,
|
| + lines=['per-file foo.*=set noparent',
|
| + 'per-file foo.*=file:test/OWNERS'])
|
| +
|
| + self.assert_reviewers_for(['content/garply/foo.cc'],
|
| + [[peter]])
|
| + self.assert_reviewers_for(['content/garply/bar.cc'],
|
| + [[brett]])
|
| +
|
|
|
| class LowestCostOwnersTest(_BaseTestCase):
|
| # Keep the data in the test_lowest_cost_owner* methods as consistent with
|
|
|