cleanup: move creation of python colitems to a default pytest_pycollect_makeitem hook impl
--HG-- branch : trunk
This commit is contained in:
parent
9910db2ca6
commit
118eebb190
|
@ -119,3 +119,31 @@ def setsession(config):
|
||||||
elif val("dist") != "no":
|
elif val("dist") != "no":
|
||||||
from _py.test.dist.dsession import DSession
|
from _py.test.dist.dsession import DSession
|
||||||
config.setsessionclass(DSession)
|
config.setsessionclass(DSession)
|
||||||
|
|
||||||
|
# pycollect related hooks and code, should move to pytest_pycollect.py
|
||||||
|
|
||||||
|
def pytest_pycollect_makeitem(__multicall__, collector, name, obj):
|
||||||
|
res = __multicall__.execute()
|
||||||
|
if res is not None:
|
||||||
|
return res
|
||||||
|
if collector._istestclasscandidate(name, obj):
|
||||||
|
res = collector._deprecated_join(name)
|
||||||
|
if res is not None:
|
||||||
|
return res
|
||||||
|
return collector.Class(name, parent=collector)
|
||||||
|
elif collector.funcnamefilter(name) and hasattr(obj, '__call__'):
|
||||||
|
res = collector._deprecated_join(name)
|
||||||
|
if res is not None:
|
||||||
|
return res
|
||||||
|
if is_generator(obj):
|
||||||
|
# XXX deprecation warning
|
||||||
|
return collector.Generator(name, parent=collector)
|
||||||
|
else:
|
||||||
|
return collector._genfunctions(name, obj)
|
||||||
|
|
||||||
|
def is_generator(func):
|
||||||
|
try:
|
||||||
|
return py.code.getrawcode(func).co_flags & 32 # generator function
|
||||||
|
except AttributeError: # builtin functions have no bytecode
|
||||||
|
# assume them to not be generators
|
||||||
|
return False
|
||||||
|
|
|
@ -18,7 +18,7 @@ import sys
|
||||||
|
|
||||||
def pytest_pycollect_makeitem(collector, name, obj):
|
def pytest_pycollect_makeitem(collector, name, obj):
|
||||||
if 'unittest' not in sys.modules:
|
if 'unittest' not in sys.modules:
|
||||||
return # nobody could have possibly derived a subclass
|
return # nobody derived unittest.TestCase
|
||||||
try:
|
try:
|
||||||
isunit = issubclass(obj, py.std.unittest.TestCase)
|
isunit = issubclass(obj, py.std.unittest.TestCase)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
|
|
@ -120,24 +120,8 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector):
|
||||||
return self.join(name)
|
return self.join(name)
|
||||||
|
|
||||||
def makeitem(self, name, obj):
|
def makeitem(self, name, obj):
|
||||||
res = self.config.hook.pytest_pycollect_makeitem(
|
return self.config.hook.pytest_pycollect_makeitem(
|
||||||
collector=self, name=name, obj=obj)
|
collector=self, name=name, obj=obj)
|
||||||
if res is not None:
|
|
||||||
return res
|
|
||||||
if self._istestclasscandidate(name, obj):
|
|
||||||
res = self._deprecated_join(name)
|
|
||||||
if res is not None:
|
|
||||||
return res
|
|
||||||
return self.Class(name, parent=self)
|
|
||||||
elif self.funcnamefilter(name) and hasattr(obj, '__call__'):
|
|
||||||
res = self._deprecated_join(name)
|
|
||||||
if res is not None:
|
|
||||||
return res
|
|
||||||
if is_generator(obj):
|
|
||||||
# XXX deprecation warning
|
|
||||||
return self.Generator(name, parent=self)
|
|
||||||
else:
|
|
||||||
return self._genfunctions(name, obj)
|
|
||||||
|
|
||||||
def _istestclasscandidate(self, name, obj):
|
def _istestclasscandidate(self, name, obj):
|
||||||
if self.classnamefilter(name) and \
|
if self.classnamefilter(name) and \
|
||||||
|
@ -146,7 +130,6 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector):
|
||||||
# XXX WARN
|
# XXX WARN
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def _genfunctions(self, name, funcobj):
|
def _genfunctions(self, name, funcobj):
|
||||||
module = self.getparent(Module).obj
|
module = self.getparent(Module).obj
|
||||||
|
@ -162,12 +145,6 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector):
|
||||||
return funcargs.FunctionCollector(name=name,
|
return funcargs.FunctionCollector(name=name,
|
||||||
parent=self, calls=metafunc._calls)
|
parent=self, calls=metafunc._calls)
|
||||||
|
|
||||||
def is_generator(func):
|
|
||||||
try:
|
|
||||||
return py.code.getrawcode(func).co_flags & 32 # generator function
|
|
||||||
except AttributeError: # builtin functions have no bytecode
|
|
||||||
# assume them to not be generators
|
|
||||||
return False
|
|
||||||
|
|
||||||
class Module(py.test.collect.File, PyCollectorMixin):
|
class Module(py.test.collect.File, PyCollectorMixin):
|
||||||
def _getobj(self):
|
def _getobj(self):
|
||||||
|
|
Loading…
Reference in New Issue