[Checkins] SVN: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/ Moved the listing into its own feature and made it a report.

Christian Theune ct at gocept.com
Sun May 4 12:23:35 EDT 2008


Log message for revision 86399:
  Moved the listing into its own feature and made it a report.
  

Changed:
  U   zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/filter.py
  A   zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/listing.py
  U   zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py

-=-
Modified: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/filter.py
===================================================================
--- zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/filter.py	2008-05-04 16:17:25 UTC (rev 86398)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/filter.py	2008-05-04 16:23:35 UTC (rev 86399)
@@ -21,7 +21,7 @@
 
 
 class Filter(zope.testing.testrunner.feature.Feature):
-    """Filters all tests registered until now."""
+    """Filters and orders all tests registered until now."""
 
     active = True
 

Added: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/listing.py
===================================================================
--- zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/listing.py	                        (rev 0)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/listing.py	2008-05-04 16:23:35 UTC (rev 86399)
@@ -0,0 +1,39 @@
+##############################################################################
+#
+# Copyright (c) 2004-2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Filter which tests to run.
+
+$Id: __init__.py 86218 2008-05-03 14:17:26Z ctheune $
+"""
+
+import time
+import zope.testing.testrunner.feature
+
+
+class Listing(zope.testing.testrunner.feature.Feature):
+    """Lists all tests in the report instead of running the tests."""
+
+    def __init__(self, runner):
+        super(Listing, self).__init__(runner)
+        self.active = bool(runner.options.list_tests)
+
+    def global_setup(self):
+        self.runner.do_run_tests = False
+        self.runner.failed = False
+
+    def report(self):
+        layers = self.runner.tests_by_layer_name
+        if 'unit' in layers:
+            self.runner.options.output.list_of_tests(layers['unit'], 'unit')
+        for layer_name, layer, tests in self.runner.ordered_layers():
+            self.runner.options.output.list_of_tests(tests, layer_name)


Property changes on: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/listing.py
___________________________________________________________________
Name: svn:eol-style
   + native

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 16:17:25 UTC (rev 86398)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py	2008-05-04 16:23:35 UTC (rev 86399)
@@ -43,6 +43,7 @@
 import zope.testing.testrunner.timing
 import zope.testing.testrunner.filter
 import zope.testing.testrunner.garbagecollection
+import zope.testing.testrunner.listing
 
 
 PYREFCOUNT_PATTERN = re.compile('\[[0-9]+ refs\]')
@@ -95,11 +96,20 @@
         self.nlayers = 0
 
         self.show_report = True
+        self.do_run_tests = True
 
         self.features = []
 
         self.tests_by_layer_name = {}
 
+    def ordered_layers(self):
+        layer_names = dict([(layer_from_name(layer_name), layer_name)
+                            for layer_name in self.tests_by_layer_name
+                            if layer_name != 'unit'])
+        for layer in order_by_bases(layer_names):
+            layer_name = layer_names[layer]
+            yield layer_name, layer, self.tests_by_layer_name[layer_name]
+
     def register_tests(self, tests):
         """Registers tests."""
         # XXX To support multiple features that find tests this shouldn't be
@@ -139,7 +149,8 @@
             feature.late_setup()
 
         try:
-            self.run_tests()
+            if self.do_run_tests:
+                self.run_tests()
         finally:
             # Early teardown
             for feature in reversed(self.features):
@@ -149,7 +160,8 @@
                 feature.global_teardown()
 
         if self.show_report:
-            self.report()
+            if self.do_run_tests:
+                self.report()
             for feature in self.features:
                 feature.report()
 
@@ -193,6 +205,7 @@
         self.features.append(zope.testing.testrunner.garbagecollection.Debug(self))
         self.features.append(zope.testing.testrunner.find.Find(self))
         self.features.append(zope.testing.testrunner.filter.Filter(self))
+        self.features.append(zope.testing.testrunner.listing.Listing(self))
 
         # Remove all features that aren't activated
         self.features = [f for f in self.features if f.active]
@@ -205,21 +218,19 @@
         """
         if 'unit' in self.tests_by_layer_name:
             tests = self.tests_by_layer_name.pop('unit')
-            if self.options.list_tests:
-                self.options.output.list_of_tests(tests, 'unit')
-            else:
-                self.options.output.info("Running unit tests:")
-                self.nlayers += 1
-                try:
-                    self.ran += run_tests(self.options, tests, 'unit',
-                                          self.failures, self.errors)
-                except EndRun:
-                    self.failed = True
-                    return
+            self.options.output.info("Running unit tests:")
+            self.nlayers += 1
+            try:
+                self.ran += run_tests(self.options, tests, 'unit',
+                                      self.failures, self.errors)
+            except EndRun:
+                self.failed = True
+                return
 
         setup_layers = {}
 
-        layers_to_run = list(ordered_layers(self.tests_by_layer_name))
+        layers_to_run = list(self.ordered_layers())
+
         if self.options.resume_layer is not None:
             layers_to_run = [
                 (layer_name, layer, tests)
@@ -233,13 +244,6 @@
                 if filter(None, [pat(layer_name) for pat in self.options.layer])
             ]
 
-        if self.options.list_tests:
-            for layer_name, layer, tests in layers_to_run:
-                self.options.output.list_of_tests(tests, layer_name)
-            self.failed = False
-            self.show_report = False
-            return
-
         for layer_name, layer, tests in layers_to_run:
             self.nlayers += 1
             try:
@@ -629,12 +633,6 @@
             self.options.output.test_threads(test, new_threads)
 
 
-def ordered_layers(tests_by_layer_name):
-    layer_names = dict([(layer_from_name(layer_name), layer_name)
-                        for layer_name in tests_by_layer_name])
-    for layer in order_by_bases(layer_names):
-        layer_name = layer_names[layer]
-        yield layer_name, layer, tests_by_layer_name[layer_name]
 
 
 def layer_from_name(layer_name):



More information about the Checkins mailing list