Chromium Code Reviews| 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..0c2ffc50dafe08c060507150d5a72dc83e0c32ac |
| --- /dev/null |
| +++ b/tests/owners_finder_test.py |
| @@ -0,0 +1,235 @@ |
| +#!/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): |
| + output = '' |
| + |
| + def resetText(self): |
| + self.output = '' |
| + |
| + def indent(self): |
| + self.output += '{' |
| + |
| + def unindent(self): |
| + self.output += '}' |
| + |
| + def writeln(self, text=''): |
| + self.output += text + '\n' |
| + |
| + |
| +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() |
| + self.assertEquals(finder.owners_queue, |
| + [brett, peter, ken, tom, john, darin, ben]) |
| + self.assertEquals(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.assertEquals(finder.selected_owners, set()) |
|
M-A Ruel
2013/04/24 01:32:20
assertEquals is deprecated, use assertEqual.
Bei Zhang
2013/04/24 03:29:02
Done.
|
| + self.assertEquals(finder.deselected_owners, set()) |
| + self.assertEquals(finder.reviewed_by, {}) |
| + self.assertEquals(finder.output, '') |
| + |
| + def test_select(self): |
| + finder = self.defaultFinder() |
| + finder.select_owner(john) |
| + self.assertEquals(finder.owners_queue, [brett, peter, ken, tom, ben]) |
| + self.assertEquals(finder.selected_owners, {john}) |
| + self.assertEquals(finder.deselected_owners, {darin}) |
| + self.assertEquals(finder.reviewed_by, {'content/bar/foo.cc': john, |
| + 'content/baz/ugly.cc': john, |
| + 'content/baz/ugly.h': john, |
| + 'content/content.gyp': john}) |
| + self.assertEquals(finder.output, |
| + 'Selected: john@example.com\n' |
| + 'Deselected: darin@example.com\n') |
| + |
| + finder = self.defaultFinder() |
| + finder.select_owner(darin) |
| + self.assertEquals(finder.owners_queue, [brett, peter, ken, tom, ben]) |
| + self.assertEquals(finder.selected_owners, {darin}) |
| + self.assertEquals(finder.deselected_owners, {john}) |
| + self.assertEquals(finder.reviewed_by, {'content/bar/foo.cc': darin, |
| + 'content/baz/ugly.cc': darin, |
| + 'content/baz/ugly.h': darin, |
| + 'content/content.gyp': darin}) |
| + self.assertEquals(finder.output, |
| + 'Selected: darin@example.com\n' |
| + 'Deselected: john@example.com\n') |
| + |
| + finder = self.defaultFinder() |
| + finder.select_owner(brett) |
| + self.assertEquals(finder.owners_queue, [peter, ken, tom, john, darin]) |
| + self.assertEquals(finder.selected_owners, {brett}) |
| + self.assertEquals(finder.deselected_owners, {ben}) |
| + self.assertEquals(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.assertEquals(finder.output, |
| + 'Selected: brett@example.com\n' |
| + 'Deselected: ben@example.com\n') |
| + |
| + def test_deselect(self): |
| + finder = self.defaultFinder() |
| + finder.deselect_owner(john) |
| + self.assertEquals(finder.owners_queue, [brett, peter, ken, tom, ben]) |
| + self.assertEquals(finder.selected_owners, {darin}) |
| + self.assertEquals(finder.deselected_owners, {john}) |
| + self.assertEquals(finder.reviewed_by, {'content/bar/foo.cc': darin, |
| + 'content/baz/ugly.cc': darin, |
| + 'content/baz/ugly.h': darin, |
| + 'content/content.gyp': darin}) |
| + self.assertEquals(finder.output, |
| + 'Deselected: john@example.com\n' |
| + 'Selected: darin@example.com\n') |
| + |
| + def test_print_file_info(self): |
| + finder = self.defaultFinder() |
| + finder.print_file_info('chrome/browser/defaults.h') |
| + self.assertEquals(finder.output, '{chrome/browser/defaults.h [5]\n}') |
| + finder.resetText() |
| + |
| + finder.print_file_info('chrome/renderer/gpu/gpu_channel_host.h') |
| + self.assertEquals(finder.output, |
| + '{chrome/renderer/gpu/gpu_channel_host.h [5]\n}') |
| + |
| + def test_print_file_info_detailed(self): |
| + finder = self.defaultFinder() |
| + finder.print_file_info_detailed('chrome/browser/defaults.h') |
| + self.assertEquals(finder.output, |
| + 'chrome/browser/defaults.h\n' |
| + '{ben@example.com\n' |
| + 'brett@example.com\n' |
| + 'ken@example.com\n' |
| + 'peter@example.com\n' |
| + 'tom@example.com\n}') |
| + finder.resetText() |
| + |
| + finder.print_file_info_detailed('chrome/renderer/gpu/gpu_channel_host.h') |
| + self.assertEquals(finder.output, |
| + 'chrome/renderer/gpu/gpu_channel_host.h\n' |
| + '{ben@example.com\n' |
| + 'brett@example.com\n' |
| + 'ken@example.com\n' |
| + 'peter@example.com\n' |
| + 'tom@example.com\n}') |
| + |
| + def test_print_comments(self): |
| + finder = self.defaultFinder() |
| + finder.print_comments(darin) |
| + self.assertEquals(finder.output, |
| + 'darin@example.com is commented as:\n' |
| + '{foo (at content)\n}') |
| + |
| + |
| +if __name__ == '__main__': |
| + unittest.main() |