[svn r38474] make io capturing configurable per e.g.
conf_iocapture = "sys" by default it has "fd" for performing fd-based capturing --HG-- branch : trunk
This commit is contained in:
parent
245aa057b4
commit
5c000e57f1
|
@ -362,15 +362,10 @@ class Module(FSCollector, PyCollectorMixin):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def startcapture(self):
|
def startcapture(self):
|
||||||
if not self._config.option.nocapture:
|
self._config._startcapture(self, path=self.fspath)
|
||||||
assert not hasattr(self, '_capture')
|
|
||||||
self._capture = py.io.StdCaptureFD()
|
|
||||||
|
|
||||||
def finishcapture(self):
|
def finishcapture(self):
|
||||||
if hasattr(self, '_capture'):
|
self._config._finishcapture(self)
|
||||||
capture = self._capture
|
|
||||||
del self._capture
|
|
||||||
self._captured_out, self._captured_err = capture.reset()
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<%s %r>" % (self.__class__.__name__, self.name)
|
return "<%s %r>" % (self.__class__.__name__, self.name)
|
||||||
|
|
|
@ -252,6 +252,24 @@ class Config(object):
|
||||||
%(chain[0], self.topdir))
|
%(chain[0], self.topdir))
|
||||||
return relpath, tuple([x.name for x in chain[1:]])
|
return relpath, tuple([x.name for x in chain[1:]])
|
||||||
|
|
||||||
|
def _startcapture(self, colitem, path=None):
|
||||||
|
if not self.option.nocapture:
|
||||||
|
assert not hasattr(colitem, '_capture')
|
||||||
|
iocapture = self.getvalue("conf_iocapture", path=path)
|
||||||
|
if iocapture == "fd":
|
||||||
|
capture = py.io.StdCaptureFD()
|
||||||
|
elif iocapture == "sys":
|
||||||
|
capture = py.io.StdCapture()
|
||||||
|
else:
|
||||||
|
raise ValueError("unknown io capturing: " + iocapture)
|
||||||
|
colitem._capture = capture
|
||||||
|
|
||||||
|
def _finishcapture(self, colitem):
|
||||||
|
if hasattr(colitem, '_capture'):
|
||||||
|
capture = colitem._capture
|
||||||
|
del colitem._capture
|
||||||
|
colitem._captured_out, colitem._captured_err = capture.reset()
|
||||||
|
|
||||||
# this is the one per-process instance of py.test configuration
|
# this is the one per-process instance of py.test configuration
|
||||||
config_per_process = Config()
|
config_per_process = Config()
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,7 @@ Generator = py.test.collect.Generator
|
||||||
Function = py.test.Function
|
Function = py.test.Function
|
||||||
Instance = py.test.collect.Instance
|
Instance = py.test.collect.Instance
|
||||||
|
|
||||||
additionalinfo = None
|
conf_iocapture = "fd" # overridable from conftest.py
|
||||||
|
|
||||||
|
|
||||||
# ===================================================
|
# ===================================================
|
||||||
# Distributed testing specific options
|
# Distributed testing specific options
|
||||||
|
|
|
@ -32,15 +32,10 @@ class SetupState(object):
|
||||||
|
|
||||||
class Item(py.test.collect.Collector):
|
class Item(py.test.collect.Collector):
|
||||||
def startcapture(self):
|
def startcapture(self):
|
||||||
if not self._config.option.nocapture:
|
self._config._startcapture(self, path=self.fspath)
|
||||||
self._capture = py.io.StdCaptureFD()
|
|
||||||
|
|
||||||
def finishcapture(self):
|
def finishcapture(self):
|
||||||
if hasattr(self, '_capture'):
|
self._config._finishcapture(self)
|
||||||
capture = self._capture
|
|
||||||
del self._capture
|
|
||||||
self._captured_out, self._captured_err = capture.reset()
|
|
||||||
|
|
||||||
|
|
||||||
class Function(Item):
|
class Function(Item):
|
||||||
""" a Function Item is responsible for setting up
|
""" a Function Item is responsible for setting up
|
||||||
|
|
|
@ -289,6 +289,30 @@ class TestSessionAndOptions:
|
||||||
assert pl[0] == tmpdir
|
assert pl[0] == tmpdir
|
||||||
assert pl[1] == somepath
|
assert pl[1] == somepath
|
||||||
|
|
||||||
|
def test_config_iocapturing(self):
|
||||||
|
self.tmpdir
|
||||||
|
config = py.test.config._reparse([self.tmpdir])
|
||||||
|
assert config.getvalue("conf_iocapture")
|
||||||
|
tmpdir = self.tmpdir.ensure("sub-with-conftest", dir=1)
|
||||||
|
tmpdir.join("conftest.py").write(py.code.Source("""
|
||||||
|
conf_iocapture = "sys"
|
||||||
|
"""))
|
||||||
|
config = py.test.config._reparse([tmpdir])
|
||||||
|
assert config.getvalue("conf_iocapture") == "sys"
|
||||||
|
class dummy: pass
|
||||||
|
config._startcapture(dummy)
|
||||||
|
print 42
|
||||||
|
py.std.os.write(1, "23")
|
||||||
|
config._finishcapture(dummy)
|
||||||
|
assert dummy._captured_out.strip() == "42"
|
||||||
|
|
||||||
|
config = py.test.config._reparse([tmpdir.dirpath()])
|
||||||
|
config._startcapture(dummy, path=tmpdir)
|
||||||
|
print 42
|
||||||
|
py.std.os.write(1, "23")
|
||||||
|
config._finishcapture(dummy)
|
||||||
|
assert dummy._captured_out.strip() == "42"
|
||||||
|
|
||||||
class TestConfigColitems:
|
class TestConfigColitems:
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
cls.tmproot = py.test.ensuretemp(cls.__name__)
|
cls.tmproot = py.test.ensuretemp(cls.__name__)
|
||||||
|
|
|
@ -194,10 +194,10 @@ class TestTerminalSession:
|
||||||
import py
|
import py
|
||||||
class Function(py.test.Function):
|
class Function(py.test.Function):
|
||||||
def startcapture(self):
|
def startcapture(self):
|
||||||
self._mycapture = py.io.StdCaptureFD()
|
self._mycapture = None
|
||||||
|
|
||||||
def finishcapture(self):
|
def finishcapture(self):
|
||||||
self._testmycapture = self._mycapture.reset()
|
self._testmycapture = None
|
||||||
"""))
|
"""))
|
||||||
session = self.mainsession(o)
|
session = self.mainsession(o)
|
||||||
l = session.getitemoutcomepairs(Passed)
|
l = session.getitemoutcomepairs(Passed)
|
||||||
|
@ -205,9 +205,6 @@ class TestTerminalSession:
|
||||||
item = l[0][0]
|
item = l[0][0]
|
||||||
assert hasattr(item, '_testmycapture')
|
assert hasattr(item, '_testmycapture')
|
||||||
print item._testmycapture
|
print item._testmycapture
|
||||||
out, err = item._testmycapture
|
|
||||||
assert int(out.strip()) == 42
|
|
||||||
assert int(err.strip()) == 23
|
|
||||||
|
|
||||||
assert isinstance(item.parent, py.test.collect.Module)
|
assert isinstance(item.parent, py.test.collect.Module)
|
||||||
out, err = item.parent._getouterr()
|
out, err = item.parent._getouterr()
|
||||||
|
|
Loading…
Reference in New Issue