SVN: zope.testing/trunk/src/zope/testing/testrunner/ Fix a bug that caused a SubprocessError to be generated if a subprocess

Benji York <[email protected]>
Newsgroups gmane.comp.web.zope.zope3.cvs
Message-ID <[email protected]>
Log message for revision 88047:
  Fix a bug that caused a SubprocessError to be generated if a subprocess
  sent any output to stderr (deprecation warnings are a common cause).
  

Changed:
  U   zope.testing/trunk/src/zope/testing/testrunner/runner.py
  A   zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample2/stderrtest.py
  U   zope.testing/trunk/src/zope/testing/testrunner/testrunner-layers-ntd.txt

-=-
Modified: zope.testing/trunk/src/zope/testing/testrunner/runner.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/runner.py	2008-07-05 21:00:43 UTC (rev 88046)
+++ zope.testing/trunk/src/zope/testing/testrunner/runner.py	2008-07-06 00:04:36 UTC (rev 88047)
@@ -402,15 +402,24 @@
             else:
                 break
 
-        line = suberr.readline()
-        try:
-            ran, nfail, nerr = map(int, line.strip().split())
-        except KeyboardInterrupt:
-            raise
-        except:
-            raise SubprocessError(
-                'No subprocess summary found', line+suberr.read())
+        # The subprocess may have spewed any number of things to stderr, so
+        # we'll keep looking until we find the information we're looking for.
+        whole_suberr = ''
+        while True:
+            line = suberr.readline()
+            whole_suberr += line
+            if not line:
+                raise SubprocessError(
+                    'No subprocess summary found', whole_suberr+suberr.read())
 
+            try:
+                ran, nfail, nerr = map(int, line.strip().split())
+                break
+            except KeyboardInterrupt:
+                raise
+            except:
+                continue
+
         while nfail > 0:
             nfail -= 1
             failures.append((suberr.readline().strip(), None))

Added: zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample2/stderrtest.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample2/stderrtest.py	                        (rev 0)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample2/stderrtest.py	2008-07-06 00:04:36 UTC (rev 88047)
@@ -0,0 +1,54 @@
+##############################################################################
+#
+# Copyright (c) 2003 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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.
+#
+##############################################################################
+"""Sample tests with a layer that produces output on stderr
+
+$Id$
+"""
+
+import unittest
+from zope.testing import doctest
+import sys
+
+
+sys.stderr.write('A message on stderr.\n')
+
+
+class Layer:
+
+    def setUp(self):
+        pass
+    setUp = classmethod(setUp)
+
+    def tearDown(self):
+        pass
+    tearDown = classmethod(tearDown)
+
+
+def test_something():
+    """
+    >>> 1 + 1
+    2
+    """
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    d = doctest.DocTestSuite()
+    d.layer = Layer
+    suite.addTest(d)
+    return suite
+
+
+if __name__ == '__main__':
+    unittest.main()


Property changes on: zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample2/stderrtest.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: zope.testing/trunk/src/zope/testing/testrunner/testrunner-layers-ntd.txt
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-layers-ntd.txt	2008-07-05 21:00:43 UTC (rev 88046)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-layers-ntd.txt	2008-07-06 00:04:36 UTC (rev 88047)
@@ -238,3 +238,22 @@
 If you want to use pdb from a test in a layer that is run as a
 subprocess, then rerun the test runner selecting *just* that layer so
 that it's not run as a subprocess.
+
+
+If a test is run in a subprocess and it generates output on stderr (as
+stderrtest does), the output is ignored (but it doesn't cause a SubprocessError
+like it once did).
+
+    >>> sys.argv = [testrunner_script, '-s', 'sample2', '--tests-pattern', '(sampletests_ntd$|stderrtest)']
+    >>> testrunner.run(defaults)
+    Running sample2.sampletests_ntd.Layer tests:
+      Set up sample2.sampletests_ntd.Layer in 0.000 seconds.
+      Ran 1 tests with 0 failures and 0 errors in 0.000 seconds.
+    Running sample2.stderrtest.Layer tests:
+      Tear down sample2.sampletests_ntd.Layer ... not supported
+      Running in a subprocess.
+      Set up sample2.stderrtest.Layer in 0.000 seconds.
+      Ran 1 tests with 0 failures and 0 errors in 0.002 seconds.
+      Tear down sample2.stderrtest.Layer in 0.000 seconds.
+    Total: 2 tests, 0 failures, 0 errors in 0.197 seconds.
+    False
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.