Rev 3196: Create a TestIdListFilter helper object to make testing easier. in file:///v/home/vila/src/bzr/experimental/selftest/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Sun Jan 20 10:19:55 GMT 2008
At file:///v/home/vila/src/bzr/experimental/selftest/
------------------------------------------------------------
revno: 3196
revision-id:v.ladeuil+lp at free.fr-20080120101950-dj7a3l2vdb9w9yxc
parent: v.ladeuil+lp at free.fr-20080119101219-gjdsba7mxzyhkjhy
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: selftest
timestamp: Sun 2008-01-20 11:19:50 +0100
message:
Create a TestIdListFilter helper object to make testing easier.
* bzrlib/tests/__init__.py:
(TestIdListFilter): Use split_test_list_by_module as a constructor
and delete it.
* bzrlib/tests/test_selftest.py:
(TestSplitTestListByModules): Refactor the tests to use a
TestIdListFilter helper object.
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-19 10:12:19 +0000
+++ b/bzrlib/tests/__init__.py 2008-01-20 10:19:50 +0000
@@ -2556,6 +2556,43 @@
default_transport = old_transport
+class TestIdListFilter(object):
+ """Test suite filter against a test id list.
+
+ 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,
+ - keep only the tests listed from the module test suite.
+ """
+
+ def __init__(self, test_id_list):
+ by_modules = {}
+ for test_id in test_id_list:
+ if '(' in test_id:
+ # Get read of params in case they contain '.' chars
+ name, params = test_id.split('(')
+ else:
+ name = test_id
+ try:
+ mod_name, klass, meth_name = name.rsplit('.', 2)
+ except ValueError:
+ # Not enough components. Put the test in the "empty" module
+ # since we can't reliably find its associated module.
+ mod_name = ''
+ by_module = by_modules.get(mod_name, None)
+ if by_module is None:
+ by_modules[mod_name] = [test_id]
+ else:
+ by_module.append(test_id)
+ self.by_modules = by_modules
+
+ def used_modules(self):
+ return self.by_modules.keys()
+
+ def module_tests(self, module_name):
+ return self.by_modules.get(module_name, None)
+
+
def test_suite():
"""Build and return TestSuite for the whole of bzrlib.
@@ -2730,28 +2767,6 @@
return suite
-def split_test_list_by_module(test_name_list):
- by_modules = {}
- for test_name in test_name_list:
- if '(' in test_name:
- # Get read of params in case they contain '.' chars
- name, params = test_name.split('(')
- else:
- name = test_name
- try:
- mod_name, klass, meth_name = name.rsplit('.', 2)
- except ValueError:
- # Not enough components. Put the test in a special module since we
- # can't reliably find its associated module.
- mod_name = ''
- by_module = by_modules.get(mod_name, None)
- if by_module is None:
- by_modules[mod_name] = [test_name]
- else:
- by_module.append(test_name)
- return by_modules
-
-
def multiply_tests_from_modules(module_name_list, scenario_iter):
"""Adapt all tests in some given modules to given scenarios.
=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py 2008-01-19 10:12:19 +0000
+++ b/bzrlib/tests/test_selftest.py 2008-01-20 10:19:50 +0000
@@ -1868,37 +1868,34 @@
class TestSplitTestListByModules(tests.TestCase):
def test_empty_list(self):
- names_by_module = tests.split_test_list_by_module([])
- self.assertEquals({}, names_by_module)
+ filter = tests.TestIdListFilter([])
+ 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',
]
- names_by_module = tests.split_test_list_by_module(test_list)
- self.assertEquals(['mod1', 'mod1.submod2'], names_by_module.keys())
+ filter = tests.TestIdListFilter(test_list)
+ self.assertEquals(['mod1', 'mod1.submod2'], filter.used_modules())
self.assertEquals(['mod1.cl1.meth1', 'mod1.cl1.meth2',
'mod1.cl2.meth1', 'mod1.cl2.meth2',],
- names_by_module['mod1'])
+ filter.module_tests('mod1'))
self.assertEquals(['mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2'],
- names_by_module['mod1.submod2'])
+ filter.module_tests('mod1.submod2'))
def test_too_short_test_name(self):
test_list = ['mod1', 'mod2.method1', 'mod3.cl1']
- names_by_module = tests.split_test_list_by_module(test_list)
- self.assertEquals([''], names_by_module.keys())
+ filter = tests.TestIdListFilter(test_list)
+ self.assertEquals([''],filter.used_modules())
self.assertEquals(['mod1', 'mod2.method1', 'mod3.cl1'],
- names_by_module[''])
+ filter.module_tests(''))
def test_bad_chars_in_params(self):
test_list = ['mod1.cl1.meth1(xx.yy)']
- names_by_module = tests.split_test_list_by_module(test_list)
- self.assertEquals(['mod1'], names_by_module.keys())
+ filter = tests.TestIdListFilter(test_list)
+ self.assertEquals(['mod1'], filter.used_modules())
self.assertEquals(['mod1.cl1.meth1(xx.yy)'],
- names_by_module['mod1'])
-
-# blank line
-# comment
+ filter.module_tests('mod1'))
More information about the bazaar-commits
mailing list