- expose py.code.getfslineno and use it in pycollect
- rename PyobjMixin.getfslineno to PyobjMixin._getdslineno - place_as still in place --HG-- branch : trunk
This commit is contained in:
parent
89c025335f
commit
69214d053d
|
@ -133,6 +133,7 @@ initpkg(__name__,
|
||||||
'code.Frame' : ('./code/frame.py', 'Frame'),
|
'code.Frame' : ('./code/frame.py', 'Frame'),
|
||||||
'code.ExceptionInfo' : ('./code/excinfo.py', 'ExceptionInfo'),
|
'code.ExceptionInfo' : ('./code/excinfo.py', 'ExceptionInfo'),
|
||||||
'code.Traceback' : ('./code/traceback2.py', 'Traceback'),
|
'code.Traceback' : ('./code/traceback2.py', 'Traceback'),
|
||||||
|
'code.getfslineno' : ('./code/source.py', 'getfslineno'),
|
||||||
|
|
||||||
# backports and additions of builtins
|
# backports and additions of builtins
|
||||||
'builtin.__doc__' : ('./builtin/__init__.py', '__doc__'),
|
'builtin.__doc__' : ('./builtin/__init__.py', '__doc__'),
|
||||||
|
|
|
@ -18,7 +18,6 @@ a tree of collectors and test items that this modules provides::
|
||||||
"""
|
"""
|
||||||
import py
|
import py
|
||||||
from py.__.test.collect import configproperty, warnoldcollect
|
from py.__.test.collect import configproperty, warnoldcollect
|
||||||
from py.__.code.source import findsource
|
|
||||||
pydir = py.path.local(py.__file__).dirpath()
|
pydir = py.path.local(py.__file__).dirpath()
|
||||||
from py.__.test import funcargs
|
from py.__.test import funcargs
|
||||||
|
|
||||||
|
@ -69,37 +68,21 @@ class PyobjMixin(object):
|
||||||
s = ".".join(parts)
|
s = ".".join(parts)
|
||||||
return s.replace(".[", "[")
|
return s.replace(".[", "[")
|
||||||
|
|
||||||
def getfslineno(self):
|
def _getfslineno(self):
|
||||||
try:
|
try:
|
||||||
return self._fslineno
|
return self._fslineno
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
obj = self.obj
|
obj = self.obj
|
||||||
# let decorators etc specify a sane ordering
|
# xxx let decorators etc specify a sane ordering
|
||||||
if hasattr(obj, 'place_as'):
|
if hasattr(obj, 'place_as'):
|
||||||
obj = obj.place_as
|
obj = obj.place_as
|
||||||
try:
|
|
||||||
code = py.code.Code(obj)
|
self._fslineno = py.code.getfslineno(obj)
|
||||||
except TypeError:
|
return self._fslineno
|
||||||
# fallback to
|
|
||||||
fn = (py.std.inspect.getsourcefile(obj) or
|
|
||||||
py.std.inspect.getfile(obj))
|
|
||||||
fspath = fn and py.path.local(fn) or None
|
|
||||||
if fspath:
|
|
||||||
try:
|
|
||||||
_, lineno = findsource(obj)
|
|
||||||
except IOError:
|
|
||||||
lineno = None
|
|
||||||
else:
|
|
||||||
lineno = None
|
|
||||||
else:
|
|
||||||
fspath = code.path
|
|
||||||
lineno = code.firstlineno
|
|
||||||
self._fslineno = fspath, lineno
|
|
||||||
return fspath, lineno
|
|
||||||
|
|
||||||
def metainfo(self):
|
def metainfo(self):
|
||||||
fspath, lineno = self.getfslineno()
|
fspath, lineno = self._getfslineno()
|
||||||
modpath = self.getmodpath()
|
modpath = self.getmodpath()
|
||||||
return fspath, lineno, modpath
|
return fspath, lineno, modpath
|
||||||
|
|
||||||
|
@ -233,7 +216,7 @@ class Class(PyCollectorMixin, py.test.collect.Collector):
|
||||||
teardown_class(self.obj)
|
teardown_class(self.obj)
|
||||||
|
|
||||||
def _getsortvalue(self):
|
def _getsortvalue(self):
|
||||||
return self.getfslineno()
|
return self._getfslineno()
|
||||||
|
|
||||||
class Instance(PyCollectorMixin, py.test.collect.Collector):
|
class Instance(PyCollectorMixin, py.test.collect.Collector):
|
||||||
def _getobj(self):
|
def _getobj(self):
|
||||||
|
@ -258,7 +241,7 @@ class FunctionMixin(PyobjMixin):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _getsortvalue(self):
|
def _getsortvalue(self):
|
||||||
return self.getfslineno()
|
return self._getfslineno()
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
""" perform setup for this test function. """
|
""" perform setup for this test function. """
|
||||||
|
|
|
@ -76,7 +76,7 @@ def forked_run_report(item, pdb=None):
|
||||||
return report_process_crash(item, result)
|
return report_process_crash(item, result)
|
||||||
|
|
||||||
def report_process_crash(item, result):
|
def report_process_crash(item, result):
|
||||||
path, lineno = item.getfslineno()
|
path, lineno = item._getfslineno()
|
||||||
longrepr = [
|
longrepr = [
|
||||||
("X", "CRASHED"),
|
("X", "CRASHED"),
|
||||||
("%s:%s: CRASHED with signal %d" %(path, lineno, result.signal)),
|
("%s:%s: CRASHED with signal %d" %(path, lineno, result.signal)),
|
||||||
|
|
Loading…
Reference in New Issue