[svn r57565] also introduce config.maketrace(name, flush=False) which
returns either a nulltracer or opens a log in the tracedir and returns an object that you can call with args to print into the file. --HG-- branch : trunk
This commit is contained in:
parent
bf42c88e48
commit
7adfbfa166
|
@ -226,6 +226,33 @@ class Config(object):
|
|||
if self.option.tracedir is not None:
|
||||
return py.path.local(self.option.tracedir)
|
||||
|
||||
def maketrace(self, name, flush=False):
|
||||
""" return a tracedirectory or None, depending on --tracedir. """
|
||||
tracedir = self.gettracedir()
|
||||
if tracedir is None:
|
||||
return NullTracer()
|
||||
return Tracer(tracedir.join(name), flush=flush)
|
||||
|
||||
class Tracer(object):
|
||||
file = None
|
||||
def __init__(self, path, flush=False):
|
||||
self.file = path.open(mode='w')
|
||||
self.flush = flush
|
||||
|
||||
def __call__(self, *args):
|
||||
print >>self.file, " ".join(map(str, args))
|
||||
if self.flush:
|
||||
self.file.flush()
|
||||
|
||||
def close(self):
|
||||
self.file.close()
|
||||
|
||||
class NullTracer:
|
||||
def __call__(self, *args):
|
||||
pass
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
# this is the one per-process instance of py.test configuration
|
||||
config_per_process = Config()
|
||||
|
||||
|
|
|
@ -201,13 +201,28 @@ class TestSessionAndOptions:
|
|||
s = eventlog.read()
|
||||
assert s.find("TestrunStart") != -1
|
||||
|
||||
def test_tracedir(self):
|
||||
def test_tracedir_tracer(self):
|
||||
tracedir = self.tmpdir.mkdir("tracedir")
|
||||
config = py.test.config._reparse([self.tmpdir,
|
||||
'--tracedir=%s' % tracedir])
|
||||
assert config.gettracedir() == tracedir
|
||||
|
||||
trace = config.maketrace("trace1.log", flush=True)
|
||||
trace("hello", "world")
|
||||
class A: pass
|
||||
trace(A())
|
||||
p = tracedir.join("trace1.log")
|
||||
lines = p.readlines(cr=0)
|
||||
assert lines[0] == "hello world"
|
||||
assert lines[1].find("A") != -1
|
||||
trace.close()
|
||||
|
||||
def test_trace_null(self):
|
||||
config = py.test.config._reparse([self.tmpdir])
|
||||
assert config.gettracedir() is None
|
||||
trace = config.maketrace("hello", flush=True)
|
||||
trace("hello", "world")
|
||||
trace.close()
|
||||
|
||||
def test_implied_dsession(self):
|
||||
for x in 'startserver runbrowser rest'.split():
|
||||
|
|
Loading…
Reference in New Issue