[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(
'pytest_collect_directory', path=path, parent=self)
from py.__.test.runner import basic_run_report, forked_run_report
class Item(Node):
""" a basic test item. """
def _getrunner(self):
if self.config.option.boxed:
return forked_run_report
return basic_run_report
def _deprecated_testexecution(self):
if self.__class__.run != Item.run:
warnoldtestrun()

View File

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

View File

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

View File

@ -36,6 +36,9 @@ class PluginHooks:
def pytest_pymodule_makeitem(self, modcol, name, obj):
""" 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
# ------------------------------------------------------------------------------

View File

@ -3,6 +3,15 @@ import py
class DefaultPlugin:
""" 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):
pyfuncitem.obj(*args, **kwargs)
@ -13,8 +22,8 @@ class DefaultPlugin:
path in parent.config.args:
if ext == ".py":
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)
#if excludelist and path in excludelist:
# return
@ -24,7 +33,11 @@ class DefaultPlugin:
if path == arg or arg.relto(path):
break
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
# want dir/conftest.py to be able to
# define Directory(dir) already

View File

@ -105,6 +105,9 @@ class PytestPlugins(object):
self.pyplugins.call_each("pytest_unconfigure", config=config)
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
#

View File

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