Rev 3320: Simplify tests.test_suite. in file:///v/home/vila/src/bzr/experimental/faster-selftest/

Vincent Ladeuil v.ladeuil+lp at free.fr
Wed Mar 26 12:19:10 GMT 2008


At file:///v/home/vila/src/bzr/experimental/faster-selftest/

------------------------------------------------------------
revno: 3320
revision-id: v.ladeuil+lp at free.fr-20080326121905-8smldtdh74skxa1i
parent: v.ladeuil+lp at free.fr-20080326112940-leugmcpkbzox54c1
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: filter-by-module-test-loader
timestamp: Wed 2008-03-26 13:19:05 +0100
message:
  Simplify tests.test_suite.
  
  * bzrlib/tests/__init__.py:
  (test_suite): Simplified by creating a
  TestFilteredByModuleTestLoader if needed, using the appropriate
  loader for every category of tests and filtering once at the
  end. Punt for DocTests to keep the commit short.
modified:
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
-------------- next part --------------
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2008-03-26 08:42:01 +0000
+++ b/bzrlib/tests/__init__.py	2008-03-26 12:19:05 +0000
@@ -2794,53 +2794,39 @@
         'bzrlib.tests.test_transport_implementations',
         'bzrlib.tests.test_read_bundle',
         ]
-    suite = TestUtil.TestSuite()
     loader = TestUtil.TestLoader()
 
-    if keep_only is not None:
+    if keep_only is None:
+        loader = TestUtil.TestLoader()
+    else:
         id_filter = TestIdList(keep_only)
+        loader = TestUtil.FilteredByModuleTestLoader(id_filter.refers_to)
+    suite = loader.suiteClass()
 
     # modules building their suite with loadTestsFromModuleNames
-    if keep_only is None:
-        suite.addTest(loader.loadTestsFromModuleNames(testmod_names))
-    else:
-        for mod in [m for m in testmod_names
-                    if id_filter.refers_to(m)]:
-            mod_suite = loader.loadTestsFromModuleNames([mod])
-            mod_suite = filter_suite_by_id_list(mod_suite, id_filter)
-            suite.addTest(mod_suite)
+    suite.addTest(loader.loadTestsFromModuleNames(testmod_names))
 
     # modules adapted for transport implementations
     from bzrlib.tests.test_transport_implementations import TransportTestProviderAdapter
     adapter = TransportTestProviderAdapter()
-    if keep_only is None:
-        adapt_modules(test_transport_implementations, adapter, loader, suite)
-    else:
-        for mod in [m for m in test_transport_implementations
-                    if id_filter.refers_to(m)]:
-            mod_suite = TestUtil.TestSuite()
-            adapt_modules([mod], adapter, loader, mod_suite)
-            mod_suite = filter_suite_by_id_list(mod_suite, id_filter)
-            suite.addTest(mod_suite)
+    adapt_modules(test_transport_implementations, adapter, loader, suite)
 
     # modules defining their own test_suite()
     for package in [p for p in packages_to_test()
                     if (keep_only is None
                         or id_filter.refers_to(p.__name__))]:
         pack_suite = package.test_suite()
-        if keep_only is not None:
-            pack_suite = filter_suite_by_id_list(pack_suite, id_filter)
         suite.addTest(pack_suite)
 
     for mod in MODULES_TO_DOCTEST:
+        # FIXME: Can't filter on 'mod' since it can be either a module or its
+        # name.
+
         try:
             doc_suite = doctest.DocTestSuite(mod)
         except ValueError, e:
             print '**failed to get doctest for: %s\n%s' % (mod, e)
             raise
-        if keep_only is not None:
-            # DocTests may use ids which doesn't contain the module name
-            doc_suite = filter_suite_by_id_list(doc_suite, id_filter)
         suite.addTest(doc_suite)
 
     default_encoding = sys.getdefaultencoding()
@@ -2852,10 +2838,9 @@
         # We used to catch ImportError here and turn it into just a warning,
         # but really if you don't have --no-plugins this should be a failure.
         # mbp 20080213 - see http://bugs.launchpad.net/bugs/189771
+        if plugin_suite is None:
+            plugin_suite = plugin.load_tests(loader)
         if plugin_suite is not None:
-            if keep_only is not None:
-                plugin_suite = filter_suite_by_id_list(plugin_suite,
-                                                       id_filter)
             suite.addTest(plugin_suite)
         if default_encoding != sys.getdefaultencoding():
             bzrlib.trace.warning(
@@ -2865,6 +2850,9 @@
             sys.setdefaultencoding(default_encoding)
 
     if keep_only is not None:
+        # Now that the referred modules have loaded their tests, keep only the
+        # requested ones.
+        suite = filter_suite_by_id_list(suite, id_filter)
         # Do some sanity checks on the id_list filtering
         not_found, duplicates = suite_matches_id_list(suite, keep_only)
         for id in not_found:



More information about the bazaar-commits mailing list