SVN: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/ Moving slowly to a pluggable approach for features

Christian Theune <[email protected]>
Newsgroups gmane.comp.web.zope.zope3.cvs
Message-ID <20080504104051.1D2AD39996__17182.6296988458$1209897707$gmane$org@mail.zope.org>
Log message for revision 86329:
  Moving slowly to a pluggable approach for features
  

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

-=-
Added: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/interfaces.py
===================================================================
--- zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/interfaces.py	                        (rev 0)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/interfaces.py	2008-05-04 10:40:50 UTC (rev 86329)
@@ -0,0 +1,86 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Test runner interfaces
+
+XXX Note: These interfaces are still being sketched out. Please do not rely on
+them, yet.
+
+$Id: __init__.py 86232 2008-05-03 15:09:33Z ctheune $
+
+"""
+
+import zope.interface
+
+
+class IFeature(zope.interface.Interface):
+    """Features extend the test runners functionality in a pipe-lined
+    order.
+    """
+
+    def global_setup():
+        """Executed once when the test runner is being set up."""
+
+    def late_setup():
+        """Executed once right before the actual tests get executed and after
+        all global setups have happened.
+
+        Should do as little work as possible to avoid timing interferences
+        with other features.
+
+        It is guaranteed that the calling stack frame is not left until
+        early_teardown was called.
+
+        """
+
+    def test_setup():
+        """Executed once before each test."""
+
+    def test_teardown():
+        """Executed once after each test."""
+
+    def early_teardown():
+        """Executed once directly after all tests.
+
+        This method should do as little as possible to avoid timing issues.
+
+        It is guaranteed to be called directly from the same stack frame that
+        called `late_setup`.
+
+        """
+
+    def global_teardown():
+        """Executed once after all tests where run and early teardowns have
+        happened.
+
+        """
+
+    def report():
+        """Executed once after all tests have been run and all setup was
+        teared down.
+
+        This is the only method that should produce output.
+
+        """
+
+
+class ITestRunner(zope.interface.Interface):
+    """The test runner manages test layers and their execution.
+
+    The functionality of a test runner can be extended by configuring
+    features.
+
+    """
+
+    options = zope.interface.Attribute(
+      "Provides access to configuration options.")


Property changes on: zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/interfaces.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 10:27:15 UTC (rev 86328)
+++ zope.testing/branches/ctheune-cleanup/src/zope/testing/testrunner/runner.py	2008-05-04 10:40:50 UTC (rev 86329)
@@ -95,6 +95,8 @@
 
         self.show_report = True
 
+        self.features = []
+
     def run(self):
         self.configure()
         if self.options.fail:
@@ -103,21 +105,37 @@
         self.setup_features()
         self.find_tests()
 
+        # Global setup
+        for feature in self.features:
+            feature.global_setup()
+
+        # Late setup
+        #
         # Some system tools like profilers are really bad with stack frames.
         # E.g. hotshot doesn't like it when we leave the stack frame that we
         # called start() from.
         for init in self.late_initializers:
             init()
+        for feature in self.features:
+            feature.late_setup()
 
         try:
             self.run_tests()
         finally:
             for shutdown in self.early_shutdown:
                 shutdown()
+            # Early teardown
+            for feature in reversed(self.features):
+                feature.early_teardown()
+            # Global teardown
+            for feature in reversed(self.features):
+                feature.global_teardown()
             self.shutdown_features()
 
         if self.show_report:
             self.report()
+            for feature in self.features:
+                feature.report()
 
     def configure(self):
         if self.args is None:
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.