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