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

Side by Side Diff: tests/owners_finder_test.py

Issue 12712002: An interactive tool to help find owners covering current change list. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix nits Created 7 years, 3 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
« owners_finder.py ('K') | « owners_finder.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
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """Unit tests for owners_finder.py."""
7
8 import os
9 import sys
10 import unittest
11
12
13 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
14
15 from testing_support import filesystem_mock
16
17 import owners_finder
18 import owners
19
20
21 ben = 'ben@example.com'
22 brett = 'brett@example.com'
23 darin = 'darin@example.com'
24 john = 'john@example.com'
25 ken = 'ken@example.com'
26 peter = 'peter@example.com'
27 tom = 'tom@example.com'
28
29
30 def owners_file(*email_addresses, **kwargs):
31 s = ''
32 if kwargs.get('comment'):
33 s += '# %s\n' % kwargs.get('comment')
34 if kwargs.get('noparent'):
35 s += 'set noparent\n'
36 s += '\n'.join(kwargs.get('lines', [])) + '\n'
37 return s + '\n'.join(email_addresses) + '\n'
38
39
40 def test_repo():
41 return filesystem_mock.MockFileSystem(files={
42 '/DEPS': '',
43 '/OWNERS': owners_file(ken, peter, tom),
44 '/base/vlog.h': '',
45 '/chrome/OWNERS': owners_file(ben, brett),
46 '/chrome/browser/OWNERS': owners_file(brett),
47 '/chrome/browser/defaults.h': '',
48 '/chrome/gpu/OWNERS': owners_file(ken),
49 '/chrome/gpu/gpu_channel.h': '',
50 '/chrome/renderer/OWNERS': owners_file(peter),
51 '/chrome/renderer/gpu/gpu_channel_host.h': '',
52 '/chrome/renderer/safe_browsing/scorer.h': '',
53 '/content/OWNERS': owners_file(john, darin, comment='foo', noparent=True),
54 '/content/content.gyp': '',
55 '/content/bar/foo.cc': '',
56 '/content/baz/OWNERS': owners_file(brett),
57 '/content/baz/froboz.h': '',
58 '/content/baz/ugly.cc': '',
59 '/content/baz/ugly.h': '',
60 '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE,
61 noparent=True),
62 '/content/views/pie.h': '',
63 })
64
65
66 class OutputInterceptedOwnersFinder(owners_finder.OwnersFinder):
67 def __init__(self, files, local_root,
68 fopen, os_path, glob,
69 disable_color=False):
70 super(OutputInterceptedOwnersFinder, self).__init__(
71 files, local_root, None,
72 fopen, os_path, glob, disable_color=disable_color)
73 self.output = []
74 self.indentation_stack = []
75
76 def resetText(self):
77 self.output = []
78 self.indentation_stack = []
79
80 def indent(self):
81 self.indentation_stack.append(self.output)
82 self.output = []
83
84 def unindent(self):
85 block = self.output
86 self.output = self.indentation_stack.pop()
87 self.output.append(block)
88
89 def writeln(self, text=''):
90 self.output.append(text)
91
92
93 class _BaseTestCase(unittest.TestCase):
94 default_files = [
95 'base/vlog.h',
96 'chrome/browser/defaults.h',
97 'chrome/gpu/gpu_channel.h',
98 'chrome/renderer/gpu/gpu_channel_host.h',
99 'chrome/renderer/safe_browsing/scorer.h',
100 'content/content.gyp',
101 'content/bar/foo.cc',
102 'content/baz/ugly.cc',
103 'content/baz/ugly.h',
104 'content/views/pie.h'
105 ]
106
107 def setUp(self):
108 self.repo = test_repo()
109 self.root = '/'
110 self.fopen = self.repo.open_for_reading
111 self.glob = self.repo.glob
112
113 def ownersFinder(self, files):
114 finder = OutputInterceptedOwnersFinder(files, self.root,
115 fopen=self.fopen,
116 os_path=self.repo,
117 glob=self.glob,
118 disable_color=True)
119 return finder
120
121 def defaultFinder(self):
122 return self.ownersFinder(self.default_files)
123
124
125 class OwnersFinderTests(_BaseTestCase):
126 def test_constructor(self):
127 self.assertNotEquals(self.defaultFinder(), None)
128
129 def test_reset(self):
130 finder = self.defaultFinder()
131 i = 0
132 while i < 2:
133 i += 1
134 self.assertEqual(finder.owners_queue,
135 [brett, john, darin, peter, ken, ben, tom])
136 self.assertEqual(finder.unreviewed_files, {
137 'base/vlog.h',
138 'chrome/browser/defaults.h',
139 'chrome/gpu/gpu_channel.h',
140 'chrome/renderer/gpu/gpu_channel_host.h',
141 'chrome/renderer/safe_browsing/scorer.h',
142 'content/content.gyp',
143 'content/bar/foo.cc',
144 'content/baz/ugly.cc',
145 'content/baz/ugly.h'
146 })
147 self.assertEqual(finder.selected_owners, set())
148 self.assertEqual(finder.deselected_owners, set())
149 self.assertEqual(finder.reviewed_by, {})
150 self.assertEqual(finder.output, [])
151
152 finder.select_owner(john)
153 finder.reset()
154 finder.resetText()
155
156 def test_select(self):
157 finder = self.defaultFinder()
158 finder.select_owner(john)
159 self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
160 self.assertEqual(finder.selected_owners, {john})
161 self.assertEqual(finder.deselected_owners, {darin})
162 self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': john,
163 'content/baz/ugly.cc': john,
164 'content/baz/ugly.h': john,
165 'content/content.gyp': john})
166 self.assertEqual(finder.output,
167 ['Selected: ' + john, 'Deselected: ' + darin])
168
169 finder = self.defaultFinder()
170 finder.select_owner(darin)
171 self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
172 self.assertEqual(finder.selected_owners, {darin})
173 self.assertEqual(finder.deselected_owners, {john})
174 self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': darin,
175 'content/baz/ugly.cc': darin,
176 'content/baz/ugly.h': darin,
177 'content/content.gyp': darin})
178 self.assertEqual(finder.output,
179 ['Selected: ' + darin, 'Deselected: ' + john])
180
181 finder = self.defaultFinder()
182 finder.select_owner(brett)
183 self.assertEqual(finder.owners_queue, [john, darin, peter, ken, tom])
184 self.assertEqual(finder.selected_owners, {brett})
185 self.assertEqual(finder.deselected_owners, {ben})
186 self.assertEqual(finder.reviewed_by,
187 {'chrome/browser/defaults.h': brett,
188 'chrome/gpu/gpu_channel.h': brett,
189 'chrome/renderer/gpu/gpu_channel_host.h': brett,
190 'chrome/renderer/safe_browsing/scorer.h': brett,
191 'content/baz/ugly.cc': brett,
192 'content/baz/ugly.h': brett})
193 self.assertEqual(finder.output,
194 ['Selected: ' + brett, 'Deselected: ' + ben])
195
196 def test_deselect(self):
197 finder = self.defaultFinder()
198 finder.deselect_owner(john)
199 self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
200 self.assertEqual(finder.selected_owners, {darin})
201 self.assertEqual(finder.deselected_owners, {john})
202 self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': darin,
203 'content/baz/ugly.cc': darin,
204 'content/baz/ugly.h': darin,
205 'content/content.gyp': darin})
206 self.assertEqual(finder.output,
207 ['Deselected: ' + john, 'Selected: ' + darin])
208
209 def test_print_file_info(self):
210 finder = self.defaultFinder()
211 finder.print_file_info('chrome/browser/defaults.h')
212 self.assertEqual(finder.output, ['chrome/browser/defaults.h [5]'])
213 finder.resetText()
214
215 finder.print_file_info('chrome/renderer/gpu/gpu_channel_host.h')
216 self.assertEqual(finder.output,
217 ['chrome/renderer/gpu/gpu_channel_host.h [5]'])
218
219 def test_print_file_info_detailed(self):
220 finder = self.defaultFinder()
221 finder.print_file_info_detailed('chrome/browser/defaults.h')
222 self.assertEqual(finder.output,
223 ['chrome/browser/defaults.h',
224 [ben, brett, ken, peter, tom]])
225 finder.resetText()
226
227 finder.print_file_info_detailed('chrome/renderer/gpu/gpu_channel_host.h')
228 self.assertEqual(finder.output,
229 ['chrome/renderer/gpu/gpu_channel_host.h',
230 [ben, brett, ken, peter, tom]])
231
232 def test_print_comments(self):
233 finder = self.defaultFinder()
234 finder.print_comments(darin)
235 self.assertEqual(finder.output,
236 [darin + ' is commented as:', ['foo (at content)']])
237
238
239 if __name__ == '__main__':
240 unittest.main()
OLDNEW
« owners_finder.py ('K') | « owners_finder.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698