SVN: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/ Moved out finding of tests into its own feature.

Christian Theune <[email protected]>
Newsgroups gmane.comp.web.zope.zope3.cvs
Message-ID <[email protected]>
Log message for revision 86369:
  Moved out finding of tests into its own feature.
  

Changed:
  U   zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/find.py
  U   zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py

-=-
Modified: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/find.py
===================================================================
--- zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/find.py	2008-05-04 13:24:20 UTC (rev 86368)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/find.py	2008-05-04 13:26:17 UTC (rev 86369)
@@ -20,8 +20,8 @@
 import os
 import unittest
 import sys
+import zope.testing.testrunner.feature
 
-
 identifier = re.compile(r'[_a-zA-Z]\w*$').match
 
 
@@ -323,3 +323,27 @@
         name = layer.__module__ + '.' + layer.__name__
     _layer_name_cache[name] = layer
     return name
+
+
+class Find(zope.testing.testrunner.feature.Feature):
+    """Finds tests and registers them with the test runner."""
+
+    active = True
+
+    def global_setup(self):
+        # Add directories to the path
+        for path in self.runner.options.path:
+            if path not in sys.path:
+                sys.path.append(path)
+
+        tests = find_tests(self.runner.options, self.runner.found_suites)
+        self.import_errors = tests.pop(None, None)
+        self.runner.register_tests(tests)
+
+        # XXX move to reporting ???
+        self.runner.options.output.import_errors(self.import_errors)
+        self.runner.import_errors = bool(self.import_errors)
+
+    def report(self):
+        self.runner.options.output.modules_with_import_problems(
+            self.import_errors)

Modified: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py
===================================================================
--- zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py	2008-05-04 13:24:20 UTC (rev 86368)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py	2008-05-04 13:26:17 UTC (rev 86369)
@@ -97,16 +97,37 @@
 
         self.features = []
 
+        self.tests_by_layer_name = {}
+
+    def register_tests(self, tests):
+        """Registers tests."""
+        # XXX To support multiple features that find tests this shouldn't be
+        # an update but merge the various layers individually.
+        self.tests_by_layer_name.update(tests)
+
     def run(self):
         self.configure()
         if self.options.fail:
             return True
 
+        # XXX Hacky to support existing code.
+        self.layer_name_cache = _layer_name_cache
+        self.layer_name_cache.clear()
+
         # Global setup
         for feature in self.features:
             feature.global_setup()
 
-        self.find_tests()
+        # XXX Where should this go?
+        if self.options.resume_layer:
+            self.original_stderr = sys.stderr
+            sys.stderr = sys.stdout
+        elif self.options.verbose:
+            if self.options.all:
+                msg = "Running tests at all levels"
+            else:
+                msg = "Running tests at level %d" % self.options.at_level
+            self.options.output.info(msg)
 
         # Late setup
         #
@@ -158,7 +179,7 @@
 
         self.options = options
 
-        # XXX I moved this here mechanically.
+        # XXX I moved this here mechanically. Move to find feature?
         self.test_directories = test_dirs(self.options, {})
 
         self.features.append(zope.testing.testrunner.selftest.SelfTest(self))
@@ -169,36 +190,11 @@
         self.features.append(zope.testing.testrunner.timing.Timing(self))
         self.features.append(zope.testing.testrunner.garbagecollection.Threshold(self))
         self.features.append(zope.testing.testrunner.garbagecollection.Debug(self))
+        self.features.append(zope.testing.testrunner.find.Find(self))
 
         # Remove all features that aren't activated
         self.features = [f for f in self.features if f.active]
 
-    def find_tests(self):
-        global _layer_name_cache
-        _layer_name_cache.clear() # Reset to enforce test isolation
-
-        output = self.options.output
-
-        if self.options.resume_layer:
-            self.original_stderr = sys.stderr
-            sys.stderr = sys.stdout
-        elif self.options.verbose:
-            if self.options.all:
-                msg = "Running tests at all levels"
-            else:
-                msg = "Running tests at level %d" % self.options.at_level
-            output.info(msg)
-
-        # Add directories to the path
-        for path in self.options.path:
-            if path not in sys.path:
-                sys.path.append(path)
-
-        self.tests_by_layer_name = find_tests(self.options, self.found_suites)
-        self.import_errors = self.tests_by_layer_name.pop(None, None)
-        # XXX move to reporting
-        output.import_errors(self.import_errors)
-
     def run_tests(self):
         """Find and run tests
 
@@ -298,8 +294,6 @@
                 self.options.output.totals(self.ran, len(self.failures),
                                            len(self.errors), self.total_time)
 
-            self.options.output.modules_with_import_problems(
-                self.import_errors)
 
 
 def run_tests(options, tests, name, failures, errors):
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.