[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