[svn r37772] have both capturings have the same done/reset semantics
(should also fix a buildcmodule related problem, e.g. for greenlets) --HG-- branch : trunk
This commit is contained in:
parent
31f4c194e8
commit
7fd122a4c1
|
@ -22,6 +22,16 @@ class Capture(object):
|
||||||
return res, out, err
|
return res, out, err
|
||||||
call = classmethod(call)
|
call = classmethod(call)
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
""" reset sys.stdout and sys.stderr
|
||||||
|
|
||||||
|
returns a tuple of file objects (out, err) for the captured
|
||||||
|
data
|
||||||
|
"""
|
||||||
|
outfile, errfile = self.done()
|
||||||
|
return outfile.read(), errfile.read()
|
||||||
|
|
||||||
|
|
||||||
class StdCaptureFD(Capture):
|
class StdCaptureFD(Capture):
|
||||||
""" capture Stdout and Stderr both on filedescriptor
|
""" capture Stdout and Stderr both on filedescriptor
|
||||||
and sys.stdout/stderr level.
|
and sys.stdout/stderr level.
|
||||||
|
@ -40,18 +50,14 @@ class StdCaptureFD(Capture):
|
||||||
if patchsys:
|
if patchsys:
|
||||||
self.err.setasfile('stderr')
|
self.err.setasfile('stderr')
|
||||||
|
|
||||||
def reset(self):
|
def done(self):
|
||||||
""" reset sys.stdout and sys.stderr
|
""" return (outfile, errfile) and stop capturing. """
|
||||||
|
|
||||||
returns a tuple of file objects (out, err) for the captured
|
|
||||||
data
|
|
||||||
"""
|
|
||||||
outfile = errfile = emptyfile
|
outfile = errfile = emptyfile
|
||||||
if hasattr(self, 'out'):
|
if hasattr(self, 'out'):
|
||||||
outfile = self.out.done()
|
outfile = self.out.done()
|
||||||
if hasattr(self, 'err'):
|
if hasattr(self, 'err'):
|
||||||
errfile = self.err.done()
|
errfile = self.err.done()
|
||||||
return outfile.read(), errfile.read()
|
return outfile, errfile
|
||||||
|
|
||||||
class StdCapture(Capture):
|
class StdCapture(Capture):
|
||||||
""" capture sys.stdout/sys.stderr (but not system level fd 1 and 2).
|
""" capture sys.stdout/sys.stderr (but not system level fd 1 and 2).
|
||||||
|
@ -76,11 +82,12 @@ class StdCapture(Capture):
|
||||||
sys.stdin = self.newin = DontReadFromInput()
|
sys.stdin = self.newin = DontReadFromInput()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
""" return captured output and restore sys.stdout/err."""
|
""" return captured output as strings and restore sys.stdout/err."""
|
||||||
x, y = self.done()
|
x, y = self.done()
|
||||||
return x.read(), y.read()
|
return x.read(), y.read()
|
||||||
|
|
||||||
def done(self):
|
def done(self):
|
||||||
|
""" return (outfile, errfile) and stop capturing. """
|
||||||
o,e = sys.stdout, sys.stderr
|
o,e = sys.stdout, sys.stderr
|
||||||
outfile = errfile = emptyfile
|
outfile = errfile = emptyfile
|
||||||
if self._out:
|
if self._out:
|
||||||
|
|
|
@ -61,7 +61,15 @@ class TestStdCapture:
|
||||||
def getcapture(self, **kw):
|
def getcapture(self, **kw):
|
||||||
return py.io.StdCapture(**kw)
|
return py.io.StdCapture(**kw)
|
||||||
|
|
||||||
def test_capturing_simple(self):
|
def test_capturing_done_simple(self):
|
||||||
|
cap = self.getcapture()
|
||||||
|
print "hello world"
|
||||||
|
print >>sys.stderr, "hello error"
|
||||||
|
outfile, errfile = cap.done()
|
||||||
|
assert outfile.read() == "hello world\n"
|
||||||
|
assert errfile.read() == "hello error\n"
|
||||||
|
|
||||||
|
def test_capturing_reset_simple(self):
|
||||||
cap = self.getcapture()
|
cap = self.getcapture()
|
||||||
print "hello world"
|
print "hello world"
|
||||||
print >>sys.stderr, "hello error"
|
print >>sys.stderr, "hello error"
|
||||||
|
|
Loading…
Reference in New Issue