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

Unified 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 side-by-side diff with in-line comments
Download patch
« owners_finder.py ('K') | « owners_finder.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/owners_finder_test.py
diff --git a/tests/owners_finder_test.py b/tests/owners_finder_test.py
new file mode 100755
index 0000000000000000000000000000000000000000..c9426412003574c558939653891270a3dd3ba295
--- /dev/null
+++ b/tests/owners_finder_test.py
@@ -0,0 +1,240 @@
+#!/usr/bin/env python
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unit tests for owners_finder.py."""
+
+import os
+import sys
+import unittest
+
+
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+from testing_support import filesystem_mock
+
+import owners_finder
+import owners
+
+
+ben = 'ben@example.com'
+brett = 'brett@example.com'
+darin = 'darin@example.com'
+john = 'john@example.com'
+ken = 'ken@example.com'
+peter = 'peter@example.com'
+tom = 'tom@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 += '\n'.join(kwargs.get('lines', [])) + '\n'
+ return s + '\n'.join(email_addresses) + '\n'
+
+
+def test_repo():
+ return filesystem_mock.MockFileSystem(files={
+ '/DEPS': '',
+ '/OWNERS': owners_file(ken, peter, tom),
+ '/base/vlog.h': '',
+ '/chrome/OWNERS': owners_file(ben, brett),
+ '/chrome/browser/OWNERS': owners_file(brett),
+ '/chrome/browser/defaults.h': '',
+ '/chrome/gpu/OWNERS': owners_file(ken),
+ '/chrome/gpu/gpu_channel.h': '',
+ '/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, comment='foo', noparent=True),
+ '/content/content.gyp': '',
+ '/content/bar/foo.cc': '',
+ '/content/baz/OWNERS': owners_file(brett),
+ '/content/baz/froboz.h': '',
+ '/content/baz/ugly.cc': '',
+ '/content/baz/ugly.h': '',
+ '/content/views/OWNERS': owners_file(ben, john, owners.EVERYONE,
+ noparent=True),
+ '/content/views/pie.h': '',
+ })
+
+
+class OutputInterceptedOwnersFinder(owners_finder.OwnersFinder):
+ def __init__(self, files, local_root,
+ fopen, os_path, glob,
+ disable_color=False):
+ super(OutputInterceptedOwnersFinder, self).__init__(
+ files, local_root, None,
+ fopen, os_path, glob, disable_color=disable_color)
+ self.output = []
+ self.indentation_stack = []
+
+ def resetText(self):
+ self.output = []
+ self.indentation_stack = []
+
+ def indent(self):
+ self.indentation_stack.append(self.output)
+ self.output = []
+
+ def unindent(self):
+ block = self.output
+ self.output = self.indentation_stack.pop()
+ self.output.append(block)
+
+ def writeln(self, text=''):
+ self.output.append(text)
+
+
+class _BaseTestCase(unittest.TestCase):
+ default_files = [
+ 'base/vlog.h',
+ 'chrome/browser/defaults.h',
+ 'chrome/gpu/gpu_channel.h',
+ 'chrome/renderer/gpu/gpu_channel_host.h',
+ 'chrome/renderer/safe_browsing/scorer.h',
+ 'content/content.gyp',
+ 'content/bar/foo.cc',
+ 'content/baz/ugly.cc',
+ 'content/baz/ugly.h',
+ 'content/views/pie.h'
+ ]
+
+ def setUp(self):
+ self.repo = test_repo()
+ self.root = '/'
+ self.fopen = self.repo.open_for_reading
+ self.glob = self.repo.glob
+
+ def ownersFinder(self, files):
+ finder = OutputInterceptedOwnersFinder(files, self.root,
+ fopen=self.fopen,
+ os_path=self.repo,
+ glob=self.glob,
+ disable_color=True)
+ return finder
+
+ def defaultFinder(self):
+ return self.ownersFinder(self.default_files)
+
+
+class OwnersFinderTests(_BaseTestCase):
+ def test_constructor(self):
+ self.assertNotEquals(self.defaultFinder(), None)
+
+ def test_reset(self):
+ finder = self.defaultFinder()
+ i = 0
+ while i < 2:
+ i += 1
+ self.assertEqual(finder.owners_queue,
+ [brett, john, darin, peter, ken, ben, tom])
+ self.assertEqual(finder.unreviewed_files, {
+ 'base/vlog.h',
+ 'chrome/browser/defaults.h',
+ 'chrome/gpu/gpu_channel.h',
+ 'chrome/renderer/gpu/gpu_channel_host.h',
+ 'chrome/renderer/safe_browsing/scorer.h',
+ 'content/content.gyp',
+ 'content/bar/foo.cc',
+ 'content/baz/ugly.cc',
+ 'content/baz/ugly.h'
+ })
+ self.assertEqual(finder.selected_owners, set())
+ self.assertEqual(finder.deselected_owners, set())
+ self.assertEqual(finder.reviewed_by, {})
+ self.assertEqual(finder.output, [])
+
+ finder.select_owner(john)
+ finder.reset()
+ finder.resetText()
+
+ def test_select(self):
+ finder = self.defaultFinder()
+ finder.select_owner(john)
+ self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
+ self.assertEqual(finder.selected_owners, {john})
+ self.assertEqual(finder.deselected_owners, {darin})
+ self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': john,
+ 'content/baz/ugly.cc': john,
+ 'content/baz/ugly.h': john,
+ 'content/content.gyp': john})
+ self.assertEqual(finder.output,
+ ['Selected: ' + john, 'Deselected: ' + darin])
+
+ finder = self.defaultFinder()
+ finder.select_owner(darin)
+ self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
+ self.assertEqual(finder.selected_owners, {darin})
+ self.assertEqual(finder.deselected_owners, {john})
+ self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': darin,
+ 'content/baz/ugly.cc': darin,
+ 'content/baz/ugly.h': darin,
+ 'content/content.gyp': darin})
+ self.assertEqual(finder.output,
+ ['Selected: ' + darin, 'Deselected: ' + john])
+
+ finder = self.defaultFinder()
+ finder.select_owner(brett)
+ self.assertEqual(finder.owners_queue, [john, darin, peter, ken, tom])
+ self.assertEqual(finder.selected_owners, {brett})
+ self.assertEqual(finder.deselected_owners, {ben})
+ self.assertEqual(finder.reviewed_by,
+ {'chrome/browser/defaults.h': brett,
+ 'chrome/gpu/gpu_channel.h': brett,
+ 'chrome/renderer/gpu/gpu_channel_host.h': brett,
+ 'chrome/renderer/safe_browsing/scorer.h': brett,
+ 'content/baz/ugly.cc': brett,
+ 'content/baz/ugly.h': brett})
+ self.assertEqual(finder.output,
+ ['Selected: ' + brett, 'Deselected: ' + ben])
+
+ def test_deselect(self):
+ finder = self.defaultFinder()
+ finder.deselect_owner(john)
+ self.assertEqual(finder.owners_queue, [brett, peter, ken, ben, tom])
+ self.assertEqual(finder.selected_owners, {darin})
+ self.assertEqual(finder.deselected_owners, {john})
+ self.assertEqual(finder.reviewed_by, {'content/bar/foo.cc': darin,
+ 'content/baz/ugly.cc': darin,
+ 'content/baz/ugly.h': darin,
+ 'content/content.gyp': darin})
+ self.assertEqual(finder.output,
+ ['Deselected: ' + john, 'Selected: ' + darin])
+
+ def test_print_file_info(self):
+ finder = self.defaultFinder()
+ finder.print_file_info('chrome/browser/defaults.h')
+ self.assertEqual(finder.output, ['chrome/browser/defaults.h [5]'])
+ finder.resetText()
+
+ finder.print_file_info('chrome/renderer/gpu/gpu_channel_host.h')
+ self.assertEqual(finder.output,
+ ['chrome/renderer/gpu/gpu_channel_host.h [5]'])
+
+ def test_print_file_info_detailed(self):
+ finder = self.defaultFinder()
+ finder.print_file_info_detailed('chrome/browser/defaults.h')
+ self.assertEqual(finder.output,
+ ['chrome/browser/defaults.h',
+ [ben, brett, ken, peter, tom]])
+ finder.resetText()
+
+ finder.print_file_info_detailed('chrome/renderer/gpu/gpu_channel_host.h')
+ self.assertEqual(finder.output,
+ ['chrome/renderer/gpu/gpu_channel_host.h',
+ [ben, brett, ken, peter, tom]])
+
+ def test_print_comments(self):
+ finder = self.defaultFinder()
+ finder.print_comments(darin)
+ self.assertEqual(finder.output,
+ [darin + ' is commented as:', ['foo (at content)']])
+
+
+if __name__ == '__main__':
+ unittest.main()
« 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