[Checkins] SVN: zope.testing/trunk/ Avoid to hardcode sys.argv[0] as script;

Godefroid Chapelle gotcha at bubblenet.be
Mon Aug 10 09:44:36 EDT 2009


Log message for revision 102626:
  Avoid to hardcode sys.argv[0] as script; 
  allow for instance Zope 2 `bin/instance test` (LP#407916).
  
  

Changed:
  U   zope.testing/trunk/CHANGES.txt
  U   zope.testing/trunk/src/zope/testing/testrunner/__init__.py
  U   zope.testing/trunk/src/zope/testing/testrunner/runner.py

-=-
Modified: zope.testing/trunk/CHANGES.txt
===================================================================
--- zope.testing/trunk/CHANGES.txt	2009-08-10 11:59:08 UTC (rev 102625)
+++ zope.testing/trunk/CHANGES.txt	2009-08-10 13:44:36 UTC (rev 102626)
@@ -4,6 +4,9 @@
 3.8.1 (unreleased)
 ==================
 
+- Avoid to hardcode sys.argv[0] as script; 
+  allow for instance Zope 2 `bin/instance test` (LP#407916).
+
 - Produce a clear error message when subprocess doesn't follow the
   zope.testing.testrunner protocol (LP#407916).
 

Modified: zope.testing/trunk/src/zope/testing/testrunner/__init__.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/__init__.py	2009-08-10 11:59:08 UTC (rev 102625)
+++ zope.testing/trunk/src/zope/testing/testrunner/__init__.py	2009-08-10 13:44:36 UTC (rev 102626)
@@ -23,17 +23,17 @@
 import zope.testing.testrunner.interfaces
 
 
-def run(defaults=None, args=None):
+def run(defaults=None, args=None, script_parts=None):
     """Main runner function which can be and is being used from main programs.
 
     Will execute the tests and exit the process according to the test result.
 
     """
-    failed = run_internal(defaults, args)
+    failed = run_internal(defaults, args, script_parts=script_parts)
     sys.exit(int(failed))
 
 
-def run_internal(defaults=None, args=None):
+def run_internal(defaults=None, args=None, script_parts=None):
     """Execute tests.
 
     Returns whether errors or failures occured during testing.
@@ -41,7 +41,7 @@
     """
     # XXX Bah. Lazy import to avoid circular/early import problems
     from zope.testing.testrunner.runner import Runner
-    runner = Runner(defaults, args)
+    runner = Runner(defaults, args, script_parts=script_parts)
     runner.run()
     return runner.failed
 

Modified: zope.testing/trunk/src/zope/testing/testrunner/runner.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/runner.py	2009-08-10 11:59:08 UTC (rev 102625)
+++ zope.testing/trunk/src/zope/testing/testrunner/runner.py	2009-08-10 13:44:36 UTC (rev 102626)
@@ -77,11 +77,12 @@
     """
 
     def __init__(self, defaults=None, args=None, found_suites=None,
-                 options=None):
+                 options=None, script_parts=None):
         self.defaults = defaults
         self.args = args
         self.found_suites = found_suites
         self.options = options
+        self.script_parts = script_parts
         self.failed = True
 
         self.ran = 0
@@ -147,7 +148,6 @@
     def configure(self):
         if self.args is None:
             self.args = sys.argv[:]
-
         # Check to see if we are being run as a subprocess. If we are,
         # then use the resume-layer and defaults passed in.
         if len(self.args) > 1 and self.args[1] == '--resume-layer':
@@ -229,7 +229,7 @@
         if should_resume:
             setup_layers = None
             if layers_to_run:
-                self.ran += resume_tests(self.options, self.features,
+                self.ran += resume_tests(self.script_parts, self.options, self.features,
                     layers_to_run, self.failures, self.errors)
 
         if setup_layers:
@@ -378,13 +378,15 @@
         "Layer set up failure."
 
 
-def spawn_layer_in_subprocess(result, options, features, layer_name, layer,
+def spawn_layer_in_subprocess(result, script_parts, options, features, layer_name, layer,
         failures, errors, resume_number):
     try:
-        args = [sys.executable,
-                sys.argv[0],
-                '--resume-layer', layer_name, str(resume_number),
-                ]
+        # BBB
+        if script_parts is None:
+            script_parts = sys.argv[0:1]
+        args = [sys.executable]
+        args.extend(script_parts)
+        args.extend(['--resume-layer', layer_name, str(resume_number)])
         for d in options.testrunner_defaults:
             args.extend(['--default', d])
 
@@ -443,7 +445,7 @@
         self.done = False
 
 
-def resume_tests(options, features, layers, failures, errors):
+def resume_tests(script_parts, options, features, layers, failures, errors):
     results = []
     resume_number = int(options.processes > 1)
     ready_threads = []
@@ -452,7 +454,7 @@
         results.append(result)
         ready_threads.append(threading.Thread(
             target=spawn_layer_in_subprocess,
-            args=(result, options, features, layer_name, layer, failures,
+            args=(result, script_parts, options, features, layer_name, layer, failures,
                 errors, resume_number)))
         resume_number += 1
 



More information about the Checkins mailing list