[py-svn] r11839 - in py/dist/py/test: . terminal testing

hpk at codespeak.net hpk at codespeak.net
Tue May 3 12:36:16 CEST 2005


Author: hpk
Date: Tue May  3 12:36:16 2005
New Revision: 11839

Modified:
   py/dist/py/test/collect.py
   py/dist/py/test/terminal/terminal.py
   py/dist/py/test/testing/test_session.py
Log:
do stdout/stderr capturing for module collectors 
by default and differentiate captured out/err 
with the terminal output some more (to avoid loosing
info) 



Modified: py/dist/py/test/collect.py
==============================================================================
--- py/dist/py/test/collect.py	(original)
+++ py/dist/py/test/collect.py	Tue May  3 12:36:16 2005
@@ -30,6 +30,7 @@
 """ 
 from __future__ import generators 
 import py
+from py.__.misc.simplecapture import SimpleOutErrCapture 
 isclass = py.std.inspect.isclass 
 
 def configproperty(name):
@@ -211,6 +212,8 @@
         return None # by default collectors don't capture output 
     def finishcapture(self): 
         return None # by default collectors don't capture output 
+    def getouterr(self): 
+        return self.captured_out, self.captured_err 
 
 class FSCollector(Collector): 
     def __init__(self, fspath, parent=None): 
@@ -271,6 +274,15 @@
 
 class Module(PyCollectorMixin, FSCollector): 
 
+    def startcapture(self): 
+        if not self.option.nocapture and not self.option.usepdb: 
+            self._capture = SimpleOutErrCapture() 
+    def finishcapture(self): 
+        if hasattr(self, '_capture'): 
+            capture = self._capture 
+            del self._capture 
+            self.captured_out, self.captured_err = capture.reset()
+
     def __repr__(self): 
         return "<%s %r>" % (self.__class__.__name__, self.name)
 

Modified: py/dist/py/test/terminal/terminal.py
==============================================================================
--- py/dist/py/test/terminal/terminal.py	(original)
+++ py/dist/py/test/terminal/terminal.py	Tue May  3 12:36:16 2005
@@ -398,13 +398,12 @@
                 self.out.line(indent + x) 
 
     def repr_out_err(self, colitem): 
-        for name in 'out', 'err':
-            attrname = 'captured_' + name 
-            obj = getattr(colitem, attrname) 
-            if obj: 
-                self.out.sep("- ", "recorded std%s" % name)
-                self.out.line(obj)
-
+        for parent in colitem.listchain(): 
+            for name, obj in zip(['out', 'err'], parent.getouterr()): 
+                if obj: 
+                    self.out.sep("- ", "%s: recorded std%s" % (parent.name, name))
+                    self.out.line(obj)
+            
     def repr_locals(self, entry): 
         if self.config.option.showlocals:
             self.out.sep('- ', 'locals')

Modified: py/dist/py/test/testing/test_session.py
==============================================================================
--- py/dist/py/test/testing/test_session.py	(original)
+++ py/dist/py/test/testing/test_session.py	Tue May  3 12:36:16 2005
@@ -1,6 +1,7 @@
 import py
 datadir = py.magic.autopath().dirpath('data')
 from cStringIO import StringIO 
+from py.__.misc.simplecapture import callcapture
 
 tmpdir = py.test.ensuretemp('test_drive') 
 
@@ -173,11 +174,12 @@
         i = out.find('TypeError') 
         assert i != -1 
 
-    def test_capturing_hooks(self): 
+    def test_capturing_hooks_simple(self): 
         o = tmpdir.ensure('capturing', dir=1)
         tfile = o.join('test_capturing.py').write(py.code.Source("""
             import py
-            def test_raises_doesnt():
+            print "module level output"
+            def test_capturing():
                 print 42
                 print >>py.std.sys.stderr, 23 
         """))
@@ -192,7 +194,7 @@
                     self._testmycapture = self._mycapture.reset()
         """))
         session = self.session 
-        session.main([o]) 
+        session.main([o])
         l = session.getitemoutcomepairs(py.test.Item.Passed)
         assert len(l) == 1
         item = l[0][0]
@@ -202,6 +204,13 @@
         assert int(out.strip()) == 42
         assert int(err.strip()) == 23 
 
+        assert isinstance(item.parent, py.test.collect.Module)
+        out, err = item.parent.getouterr()
+        assert out.find('module level output') != -1 
+        allout = self.file.getvalue()
+        print "allout:", allout
+        assert allout.find('module level output') != -1
+
     def test_raises_output(self): 
         o = tmpdir.ensure('raisestest', dir=1)
         tfile = o.join('test_raisesoutput.py')



More information about the pytest-commit mailing list