SVN: zope.testing/branches/benji-optimize/src/zope/testing/testrunner/runner.py checkpoint; tests pass

Benji York <[email protected]>
Newsgroups gmane.comp.web.zope.zope3.cvs
Message-ID <20080712104538.D23FD399CD__23659.9406380721$1215859623$gmane$org@mail.zope.org>
Log message for revision 88281:
  checkpoint; tests pass
  

Changed:
  U   zope.testing/branches/benji-optimize/src/zope/testing/testrunner/runner.py

-=-
Modified: zope.testing/branches/benji-optimize/src/zope/testing/testrunner/runner.py
===================================================================
--- zope.testing/branches/benji-optimize/src/zope/testing/testrunner/runner.py	2008-07-12 10:45:10 UTC (rev 88280)
+++ zope.testing/branches/benji-optimize/src/zope/testing/testrunner/runner.py	2008-07-12 10:45:38 UTC (rev 88281)
@@ -21,6 +21,7 @@
 import glob
 import os
 import pdb
+import pickle
 import re
 import sys
 import tempfile
@@ -74,6 +75,26 @@
     """
 
 
+def fork_and_call(func, *args, **kws):
+    if not hasattr(os, 'fork'):
+        return func(*args, **kws)
+
+    read_pipe, write_pipe = os.pipe()
+    pid = os.fork()
+    if pid: # am parent
+        os.close(write_pipe)
+        child_exit = os.waitpid(pid)
+        assert child_exit == 0
+        result = pickle.loads(os.read(read_pipe, 999999))
+    else: # am child
+        os.close(read_pipe)
+        result = func(*args, **kws)
+        os.write(write_pipe, pickle.dumps(result))
+        os.exit(0)
+
+    return result # will only get here in the parent
+
+
 class Runner(object):
     """The test runner.
 
@@ -212,8 +233,10 @@
             for feature in self.features:
                 feature.layer_setup(layer)
             try:
-                self.ran += run_layer(self.options, layer_name, layer, tests,
-                                      setup_layers, self.failures, self.errors)
+                (ran, self.options, layer, tests, setup_layers, self.failures,
+                    self.errors) = run_layer(self.options, layer_name, layer,
+                        tests, setup_layers, self.failures, self.errors)
+                self.ran += ran
             except EndRun:
                 self.failed = True
                 return
@@ -360,10 +383,12 @@
         traceback.print_exc(file=f)
         output.error(f.getvalue())
         errors.append((SetUpLayerFailure(), sys.exc_info()))
-        return 0
+        ran = 0
     else:
-        return run_tests(options, tests, layer_name, failures, errors)
+        ran = run_tests(options, tests, layer_name, failures, errors)
 
+    return ran, options, layer, tests, setup_layers, failures, errors
+
 class SetUpLayerFailure(unittest.TestCase):
 
     def runTest(self):
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.