[svn r63588] shift running of test item to be done through a plugin method.

--HG--
branch : trunk
This commit is contained in:
hpk 2009-04-03 23:18:41 +02:00
parent 79793d50e2
commit db60fe7f37
7 changed files with 29 additions and 20 deletions

View File

@ -465,14 +465,8 @@ class Directory(FSCollector):
return self.config.pytestplugins.call_each( return self.config.pytestplugins.call_each(
'pytest_collect_directory', path=path, parent=self) 'pytest_collect_directory', path=path, parent=self)
from py.__.test.runner import basic_run_report, forked_run_report
class Item(Node): class Item(Node):
""" a basic test item. """ """ a basic test item. """
def _getrunner(self):
if self.config.option.boxed:
return forked_run_report
return basic_run_report
def _deprecated_testexecution(self): def _deprecated_testexecution(self):
if self.__class__.run != Item.run: if self.__class__.run != Item.run:
warnoldtestrun() warnoldtestrun()

View File

@ -7,10 +7,9 @@ import py
XSpec = py.execnet.XSpec XSpec = py.execnet.XSpec
def run(item, node): def run(item, node):
runner = item._getrunner() report = item.config.pytestplugins.do_itemrun(item)
rep = runner(item) report.node = node
rep.node = node return report
return rep
class MockNode: class MockNode:
def __init__(self): def __init__(self):

View File

@ -132,7 +132,5 @@ class SlaveNode(object):
raise raise
def runtest(self, item): def runtest(self, item):
runner = item._getrunner() report = item.config.pytestplugins.do_itemrun(item)
testrep = runner(item) self.sendevent("itemtestreport", report)
self.sendevent("itemtestreport", testrep)

View File

@ -36,6 +36,9 @@ class PluginHooks:
def pytest_pymodule_makeitem(self, modcol, name, obj): def pytest_pymodule_makeitem(self, modcol, name, obj):
""" return custom item/collector for a python object in a module, or None. """ """ return custom item/collector for a python object in a module, or None. """
def pytest_itemrun(self, item, pdb=None):
""" run given test item and return test report. """
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# runtest related hooks # runtest related hooks
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@ -3,6 +3,15 @@ import py
class DefaultPlugin: class DefaultPlugin:
""" Plugin implementing defaults and general options. """ """ Plugin implementing defaults and general options. """
def pytest_itemrun(self, item, pdb=None):
from py.__.test.runner import basic_run_report, forked_run_report
if item.config.option.boxed:
runner = forked_run_report
else:
runner = basic_run_report
report = runner(item, pdb=pdb)
return report
def pytest_pyfunc_call(self, pyfuncitem, args, kwargs): def pytest_pyfunc_call(self, pyfuncitem, args, kwargs):
pyfuncitem.obj(*args, **kwargs) pyfuncitem.obj(*args, **kwargs)
@ -13,8 +22,8 @@ class DefaultPlugin:
path in parent.config.args: path in parent.config.args:
if ext == ".py": if ext == ".py":
return parent.Module(path, parent=parent) return parent.Module(path, parent=parent)
def pytest_collect_directory(self, path, parent): def pytest_collect_recurse(self, path, parent):
#excludelist = parent._config.getvalue_pathlist('dir_exclude', path) #excludelist = parent._config.getvalue_pathlist('dir_exclude', path)
#if excludelist and path in excludelist: #if excludelist and path in excludelist:
# return # return
@ -24,7 +33,11 @@ class DefaultPlugin:
if path == arg or arg.relto(path): if path == arg or arg.relto(path):
break break
else: else:
return return False
return True
def pytest_collect_directory(self, path, parent):
# XXX reconsider the following comment
# not use parent.Directory here as we generally # not use parent.Directory here as we generally
# want dir/conftest.py to be able to # want dir/conftest.py to be able to
# define Directory(dir) already # define Directory(dir) already

View File

@ -105,6 +105,9 @@ class PytestPlugins(object):
self.pyplugins.call_each("pytest_unconfigure", config=config) self.pyplugins.call_each("pytest_unconfigure", config=config)
config.bus.unregister(self) config.bus.unregister(self)
def do_itemrun(self, item, pdb=None):
return self.pyplugins.call_firstresult("pytest_itemrun", item=item, pdb=pdb)
# #
# XXX old code to automatically load classes # XXX old code to automatically load classes
# #

View File

@ -133,7 +133,6 @@ class Session(object):
post_mortem(excinfo._excinfo[2]) post_mortem(excinfo._excinfo[2])
def runtest(self, item): def runtest(self, item):
runner = item._getrunner()
pdb = self.config.option.usepdb and self.runpdb or None pdb = self.config.option.usepdb and self.runpdb or None
testrep = runner(item, pdb=pdb) report = item.config.pytestplugins.do_itemrun(item, pdb=pdb)
self.bus.notify("itemtestreport", testrep) self.bus.notify("itemtestreport", report)