Rev 3197: Make TestTestIdListFilter aware that a test exists for a module or one of in file:///v/home/vila/src/bzr/experimental/selftest/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Sun Jan 20 17:45:28 GMT 2008
At file:///v/home/vila/src/bzr/experimental/selftest/
------------------------------------------------------------
revno: 3197
revision-id:v.ladeuil+lp at free.fr-20080120174523-n84kq5xsin1vualx
parent: v.ladeuil+lp at free.fr-20080120101950-dj7a3l2vdb9w9yxc
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest
timestamp: Sun 2008-01-20 18:45:23 +0100
message:
Make TestTestIdListFilter aware that a test exists for a module or one of
its sub modules.
* bzrlib/tests/test_selftest.py:
(TestTestIdListFilter): Some refactoring, some fixes, add new
tests for get_tests_under and is_module_name_used.
* bzrlib/tests/__init__.py:
(TestIdListFilter): Fix typo, thks Jelmer.
(TestIdListFilter.__init__): Build module hierarchies for fast
access.
(TestIdListFilter.get_tests): Renamed from module_tests.
(TestIdListFilter.get_tests_under): Get module tests and all sub
module tests.
(TestIdListFilter.is_module_name_used): Is there a test for a
module or one of its sub modules.
modified:
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/test_selftest.py test_selftest.py-20051202044319-c110a115d8c0456a
-------------- next part --------------
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py 2008-01-20 10:19:50 +0000
+++ b/bzrlib/tests/__init__.py 2008-01-20 17:45:23 +0000
@@ -2561,7 +2561,7 @@
Relying on the assumption that test ids are built as:
<module>.<class>.<method>[(<param>+)], this class offers methods to :
- - avoid building a test suite for modules not reffered to in the test list,
+ - avoid building a test suite for modules not refered to in the test list,
- keep only the tests listed from the module test suite.
"""
@@ -2584,13 +2584,41 @@
by_modules[mod_name] = [test_id]
else:
by_module.append(test_id)
- self.by_modules = by_modules
+ self.tests_by_modules = by_modules
+
+ by_bases = {}
+ for module_name in by_modules.keys():
+ base = module_name
+ while base:
+ by_base = by_bases.get(base, None)
+ if by_base is None:
+ by_bases[base] = [module_name]
+ else:
+ by_base.append(module_name)
+ try:
+ base, sub_mod_name = base.rsplit('.', 1)
+ except ValueError:
+ base = None
+ self.module_hierarchies = by_bases
def used_modules(self):
- return self.by_modules.keys()
-
- def module_tests(self, module_name):
- return self.by_modules.get(module_name, None)
+ """Return the modules containing the test classes."""
+ return self.tests_by_modules.keys()
+
+ def get_tests(self, module_name):
+ """Return tests defined in the module itself."""
+ return self.tests_by_modules.get(module_name, [])
+
+ def get_tests_under(self, module_name):
+ """Return tests defined in the module or one of its submodules."""
+ tests_list = []
+ for mod in self.module_hierarchies.get(module_name, []):
+ tests_list.extend(self.get_tests(mod))
+ return tests_list
+
+ def is_module_name_used(self, module_name):
+ """Is there tests for the module or one of its sub modules."""
+ return self.module_hierarchies.has_key(module_name)
def test_suite():
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2008-01-20 10:19:50 +0000
+++ b/bzrlib/tests/test_selftest.py 2008-01-20 17:45:23 +0000
@@ -1865,37 +1865,67 @@
self.assertEqual(2, loader.loadTestsFromModule(module).countTestCases())
-class TestSplitTestListByModules(tests.TestCase):
+class TestTestIdListFilter(tests.TestCase):
+
+ def _create_filter(self, test_list):
+ return tests.TestIdListFilter(test_list)
def test_empty_list(self):
- filter = tests.TestIdListFilter([])
+ filter = self._create_filter([])
self.assertEquals([], filter.used_modules())
def test_valid_list(self):
- test_list = ['mod1.cl1.meth1', 'mod1.cl1.meth2',
- 'mod1.cl2.meth1', 'mod1.cl2.meth2',
- 'mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2',
- ]
- filter = tests.TestIdListFilter(test_list)
+ filter = self._create_filter(
+ ['mod1.cl1.meth1', 'mod1.cl1.meth2',
+ 'mod1.cl2.meth1', 'mod1.cl2.meth2',
+ 'mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2',
+ ])
self.assertEquals(['mod1', 'mod1.submod2'], filter.used_modules())
self.assertEquals(['mod1.cl1.meth1', 'mod1.cl1.meth2',
'mod1.cl2.meth1', 'mod1.cl2.meth2',],
- filter.module_tests('mod1'))
+ filter.get_tests('mod1'))
self.assertEquals(['mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2'],
- filter.module_tests('mod1.submod2'))
+ filter.get_tests('mod1.submod2'))
+
+ def test_get_tests_under(self):
+ filter = self._create_filter(
+ ['mod.cl1.meth1','mod.cl2.meth2',
+ 'mod.submod.cl1.meth1', 'mod.submod.cl2.meth2',
+ 'mod2.cl1.meth1',
+ ])
+ self.assertEquals(['mod.cl1.meth1', 'mod.cl2.meth2',],
+ filter.get_tests('mod'))
+ self.assertEquals(['mod.submod.cl1.meth1', 'mod.submod.cl2.meth2'],
+ filter.get_tests('mod.submod'))
+ self.assertEquals(set(['mod.cl1.meth1','mod.cl2.meth2',
+ 'mod.submod.cl1.meth1', 'mod.submod.cl2.meth2']),
+ set(filter.get_tests_under('mod')))
+
def test_too_short_test_name(self):
- test_list = ['mod1', 'mod2.method1', 'mod3.cl1']
- filter = tests.TestIdListFilter(test_list)
+ filter = self._create_filter(['mod1', 'mod2.method1', 'mod3.cl1'])
self.assertEquals([''],filter.used_modules())
self.assertEquals(['mod1', 'mod2.method1', 'mod3.cl1'],
- filter.module_tests(''))
+ filter.get_tests(''))
def test_bad_chars_in_params(self):
- test_list = ['mod1.cl1.meth1(xx.yy)']
- filter = tests.TestIdListFilter(test_list)
+ filter = self._create_filter(['mod1.cl1.meth1(xx.yy)'])
self.assertEquals(['mod1'], filter.used_modules())
self.assertEquals(['mod1.cl1.meth1(xx.yy)'],
- filter.module_tests('mod1'))
+ filter.get_tests('mod1'))
+
+ def test_module_used(self):
+ filter = self._create_filter(['mod.class.meth'])
+ self.assertTrue(filter.is_module_name_used('mod'))
+
+ def test_module_used_includes_sub_modules(self):
+ filter = self._create_filter(['mod.sub_mod.class.meth'])
+ self.assertTrue(filter.is_module_name_used('mod'))
+ self.assertTrue(filter.is_module_name_used('mod.sub_mod'))
+
+ def test_module_used_refuses_class(self):
+ filter = self._create_filter(['mod.sub_mod.class.meth'])
+ self.assertFalse(filter.is_module_name_used('mod.sub_mod.class'))
+
More information about the bazaar-commits
mailing list