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

Side by Side Diff: tests/owners_unittest.py

Issue 9621012: Show a list of directories missing OWNER reviewers on upload, and show directories rather than file… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Addressing Dirk's comments Created 8 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 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 owners.py.""" 6 """Unit tests for owners.py."""
7 7
8 import os 8 import os
9 import sys 9 import sys
10 import unittest 10 import unittest
(...skipping 26 matching lines...) Expand all
37 '/OWNERS': owners_file(owners.EVERYONE), 37 '/OWNERS': owners_file(owners.EVERYONE),
38 '/base/vlog.h': '', 38 '/base/vlog.h': '',
39 '/chrome/OWNERS': owners_file(ben, brett), 39 '/chrome/OWNERS': owners_file(ben, brett),
40 '/chrome/gpu/OWNERS': owners_file(ken), 40 '/chrome/gpu/OWNERS': owners_file(ken),
41 '/chrome/gpu/gpu_channel.h': '', 41 '/chrome/gpu/gpu_channel.h': '',
42 '/chrome/renderer/OWNERS': owners_file(peter), 42 '/chrome/renderer/OWNERS': owners_file(peter),
43 '/chrome/renderer/gpu/gpu_channel_host.h': '', 43 '/chrome/renderer/gpu/gpu_channel_host.h': '',
44 '/chrome/renderer/safe_browsing/scorer.h': '', 44 '/chrome/renderer/safe_browsing/scorer.h': '',
45 '/content/OWNERS': owners_file(john, darin, comment='foo', noparent=True), 45 '/content/OWNERS': owners_file(john, darin, comment='foo', noparent=True),
46 '/content/content.gyp': '', 46 '/content/content.gyp': '',
47 '/content/bar/foo.cc': '',
47 '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE, 48 '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE,
48 noparent=True), 49 noparent=True),
49 }) 50 })
50 51
51 52
52 class OwnersDatabaseTest(unittest.TestCase): 53 class OwnersDatabaseTest(unittest.TestCase):
53 def setUp(self): 54 def setUp(self):
54 self.repo = test_repo() 55 self.repo = test_repo()
55 self.files = self.repo.files 56 self.files = self.repo.files
56 self.root = '/' 57 self.root = '/'
(...skipping 23 matching lines...) Expand all
80 def test_covered_by__owners_plus_everyone(self): 81 def test_covered_by__owners_plus_everyone(self):
81 self.assert_covered_by(['/content/views/OWNERS'], [ben]) 82 self.assert_covered_by(['/content/views/OWNERS'], [ben])
82 self.assert_covered_by(['/content/views/OWNERS'], [ken]) 83 self.assert_covered_by(['/content/views/OWNERS'], [ken])
83 84
84 def test_covered_by__owners_propagates_down(self): 85 def test_covered_by__owners_propagates_down(self):
85 self.assert_covered_by(['chrome/gpu/OWNERS'], [ben]) 86 self.assert_covered_by(['chrome/gpu/OWNERS'], [ben])
86 87
87 def test_covered_by__no_file_in_dir(self): 88 def test_covered_by__no_file_in_dir(self):
88 self.assert_covered_by(['/chrome/renderer/gpu/gpu_channel_host.h'], [peter]) 89 self.assert_covered_by(['/chrome/renderer/gpu/gpu_channel_host.h'], [peter])
89 90
90 def assert_not_covered_by(self, files, reviewers, unreviewed_files): 91 def test_covered_by__no_files(self):
92 self.assert_covered_by([], [ben])
93
94 def test_covered_by__no_files_no_reviewers(self):
95 self.assert_covered_by([], [])
96
97 def test_covered_by__at_least_one_reviewer(self):
91 db = self.db() 98 db = self.db()
92 self.assertEquals(db.files_not_covered_by(set(files), set(reviewers)), 99 self.assertFalse(db.files_are_covered_by(set(['DEPS']), set([])))
93 set(unreviewed_files))
94 100
95 def test_not_covered_by__need_at_least_one_reviewer(self): 101 def test_covered_by__valid_inputs(self):
96 self.assert_not_covered_by(['DEPS'], [], ['DEPS'])
97
98 def test_not_covered_by__owners_propagates_down(self):
99 self.assert_not_covered_by(
100 ['chrome/gpu/gpu_channel.h', 'chrome/renderer/gpu/gpu_channel_host.h'],
101 [ben], [])
102
103 def test_not_covered_by__partial_covering(self):
104 self.assert_not_covered_by(
105 ['content/content.gyp', 'chrome/renderer/gpu/gpu_channel_host.h'],
106 [peter], ['content/content.gyp'])
107
108 def test_not_covered_by__set_noparent_works(self):
109 self.assert_not_covered_by(['content/content.gyp'], [ben],
110 ['content/content.gyp'])
111
112 def test_not_covered_by__valid_inputs(self):
113 db = self.db() 102 db = self.db()
114 103
115 # Check that we're passed in a sequence that isn't a string. 104 # Check that we're passed in a sequence that isn't a string.
116 self.assertRaises(AssertionError, db.files_not_covered_by, 'foo', []) 105 self.assertRaises(AssertionError, db.directories_not_covered_by, 'foo', [])
117 if hasattr(owners.collections, 'Iterable'): 106 if hasattr(owners.collections, 'Iterable'):
118 self.assertRaises(AssertionError, db.files_not_covered_by, 107 self.assertRaises(AssertionError, db.directories_not_covered_by,
119 (f for f in ['x', 'y']), []) 108 (f for f in ['x', 'y']), [])
120 109
121 # Check that the files are under the root. 110 # Check that the files are under the root.
122 db.root = '/checkout' 111 db.root = '/checkout'
123 self.assertRaises(AssertionError, db.files_not_covered_by, ['/OWNERS'], 112 self.assertRaises(AssertionError, db.directories_not_covered_by,
124 []) 113 ['/OWNERS'], [])
125 db.root = '/' 114 db.root = '/'
126 115
127 # Check invalid email address. 116 # Check invalid email address.
128 self.assertRaises(AssertionError, db.files_not_covered_by, ['OWNERS'], 117 self.assertRaises(AssertionError, db.directories_not_covered_by,
129 ['foo']) 118 ['OWNERS'], ['foo'])
119
120 def assert_dirs_not_covered_by(self, files, reviewers, unreviewed_dirs):
121 db = self.db()
122 self.assertEquals(
123 db.directories_not_covered_by(set(files), set(reviewers)),
124 set(unreviewed_dirs))
125
126 def test_dirs_not_covered_by__owners_propagates_down(self):
127 self.assert_dirs_not_covered_by(
128 ['chrome/gpu/gpu_channel.h', 'chrome/renderer/gpu/gpu_channel_host.h'],
129 [ben], [])
130
131 def test_dirs_not_covered_by__partial_covering(self):
132 self.assert_dirs_not_covered_by(
133 ['content/content.gyp', 'chrome/renderer/gpu/gpu_channel_host.h'],
134 [peter], ['content'])
135
136 def test_dirs_not_covered_by__set_noparent_works(self):
137 self.assert_dirs_not_covered_by(['content/content.gyp'], [ben],
138 ['content'])
139
140 def test_dirs_not_covered_by__combines_directories(self):
141 self.assert_dirs_not_covered_by(['content/content.gyp',
142 'content/bar/foo.cc',
143 'chrome/renderer/gpu/gpu_channel_host.h'],
144 [peter],
145 ['content'])
146
147 def test_dirs_not_covered_by__multiple_directories(self):
148 self.assert_dirs_not_covered_by(['content/content.gyp',
149 'content/bar/foo.cc',
150 'chrome/renderer/gpu/gpu_channel_host.h'],
151 [ken],
152 ['content'])
130 153
131 154
132 def assert_reviewers_for(self, files, expected_reviewers): 155 def assert_reviewers_for(self, files, expected_reviewers):
133 db = self.db() 156 db = self.db()
134 self.assertEquals(db.reviewers_for(set(files)), set(expected_reviewers)) 157 self.assertEquals(db.reviewers_for(set(files)), set(expected_reviewers))
135 158
136 def test_reviewers_for__basic_functionality(self): 159 def test_reviewers_for__basic_functionality(self):
137 self.assert_reviewers_for(['chrome/gpu/gpu_channel.h'], 160 self.assert_reviewers_for(['chrome/gpu/gpu_channel.h'],
138 [ken, ben, brett, owners.EVERYONE]) 161 [ken, ben, brett, owners.EVERYONE])
139 162
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 194
172 def test_syntax_error__unknown_set(self): 195 def test_syntax_error__unknown_set(self):
173 self.assert_syntax_error('set myfatherisbillgates\n') 196 self.assert_syntax_error('set myfatherisbillgates\n')
174 197
175 def test_syntax_error__bad_email(self): 198 def test_syntax_error__bad_email(self):
176 self.assert_syntax_error('ben\n') 199 self.assert_syntax_error('ben\n')
177 200
178 201
179 if __name__ == '__main__': 202 if __name__ == '__main__':
180 unittest.main() 203 unittest.main()
OLDNEW
« owners.py ('K') | « presubmit_canned_checks.py ('k') | tests/presubmit_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698