[svn r63808] * refinements/renames to new PluginAPI
* have pytest_runner start to use it, passes the main test --HG-- branch : trunk
This commit is contained in:
parent
50664c1e17
commit
f14fc582e9
|
@ -25,8 +25,8 @@ version = "1.0.0b1"
|
|||
|
||||
initpkg(__name__,
|
||||
description = "pylib and py.test: agile development and test support library",
|
||||
revision = int('$LastChangedRevision: 63806 $'.split(':')[1][:-1]),
|
||||
lastchangedate = '$LastChangedDate: 2009-04-07 22:22:52 +0200 (Tue, 07 Apr 2009) $',
|
||||
revision = int('$LastChangedRevision: 63808 $'.split(':')[1][:-1]),
|
||||
lastchangedate = '$LastChangedDate: 2009-04-07 22:46:50 +0200 (Tue, 07 Apr 2009) $',
|
||||
version = version,
|
||||
url = "http://pylib.org",
|
||||
download_url = "http://codespeak.net/py/%s/download.html" % version,
|
||||
|
@ -57,7 +57,7 @@ initpkg(__name__,
|
|||
'_com.PyPlugins' : ('./_com.py', 'PyPlugins'),
|
||||
'_com.MultiCall' : ('./_com.py', 'MultiCall'),
|
||||
'_com.pyplugins' : ('./_com.py', 'pyplugins'),
|
||||
'_com.MultiAPI' : ('./_com.py', 'MultiAPI'),
|
||||
'_com.PluginAPI' : ('./_com.py', 'PluginAPI'),
|
||||
|
||||
# py lib cmdline tools
|
||||
'cmdline.pytest' : ('./cmdline/pytest.py', 'main',),
|
||||
|
|
16
py/_com.py
16
py/_com.py
|
@ -159,14 +159,16 @@ class PyPlugins:
|
|||
MultiCall(self.listattr("pyevent"), eventname, args, kwargs).execute()
|
||||
|
||||
|
||||
class MultiAPI:
|
||||
def __init__(self, apiclass, plugins, prefix):
|
||||
for fullname in vars(apiclass):
|
||||
if fullname[:2] != "__":
|
||||
assert fullname.startswith(prefix)
|
||||
name = fullname[len(prefix):]
|
||||
mm = CallMaker(plugins, fullname)
|
||||
class PluginAPI:
|
||||
def __init__(self, apiclass, plugins):
|
||||
self._apiclass = apiclass
|
||||
self._plugins = plugins
|
||||
for name in vars(apiclass):
|
||||
if name[:2] != "__":
|
||||
mm = CallMaker(plugins, name)
|
||||
setattr(self, name, mm)
|
||||
def __repr__(self):
|
||||
return "<PluginAPI %r %r>" %(self._apiclass, self._plugins)
|
||||
|
||||
class CallMaker:
|
||||
def __init__(self, plugins, name):
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
import py
|
||||
import os
|
||||
from py._com import PyPlugins, MultiCall
|
||||
from py._com import MultiAPI
|
||||
from py._com import PluginAPI
|
||||
|
||||
pytest_plugins = "xfail"
|
||||
|
||||
|
@ -254,15 +254,14 @@ class TestMulticallMaker:
|
|||
def test_happypath(self):
|
||||
plugins = PyPlugins()
|
||||
class Api:
|
||||
def xyz_hello(self, arg):
|
||||
def hello(self, arg):
|
||||
pass
|
||||
|
||||
mcm = MultiAPI(apiclass=Api, plugins=plugins, prefix="xyz_")
|
||||
mcm = PluginAPI(apiclass=Api, plugins=plugins)
|
||||
assert hasattr(mcm, 'hello')
|
||||
assert repr(mcm.hello).find("xyz_hello") != -1
|
||||
assert not hasattr(mcm, 'xyz_hello')
|
||||
assert repr(mcm.hello).find("hello") != -1
|
||||
class Plugin:
|
||||
def xyz_hello(self, arg):
|
||||
def hello(self, arg):
|
||||
return arg + 1
|
||||
plugins.register(Plugin())
|
||||
l = mcm.hello(3)
|
||||
|
|
|
@ -42,6 +42,7 @@ class Config(object):
|
|||
self.pytestplugins = pytestplugins
|
||||
self._conftest = Conftest(onimport=self._onimportconftest)
|
||||
self._setupstate = SetupState()
|
||||
self.api = pytestplugins._getapi()
|
||||
|
||||
def _onimportconftest(self, conftestmodule):
|
||||
self.trace("loaded conftestmodule %r" %(conftestmodule,))
|
||||
|
|
|
@ -39,6 +39,10 @@ class PluginHooks:
|
|||
def pytest_itemrun(self, item, pdb=None):
|
||||
""" run given test item and return test report. """
|
||||
|
||||
def pytest_item_runtest_finished(self, item, excinfo, outerr):
|
||||
""" called in-process after runtest() returned. """
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# runtest related hooks
|
||||
# ------------------------------------------------------------------------------
|
||||
|
|
|
@ -17,7 +17,7 @@ class DefaultPlugin:
|
|||
from py.__.test import runner
|
||||
return runner.ItemTestReport(item, excinfo, when, outerr)
|
||||
|
||||
def pyevent__item_runtest_finished(self, item, excinfo, outerr):
|
||||
def pytest_item_runtest_finished(self, item, excinfo, outerr):
|
||||
from py.__.test import runner
|
||||
rep = runner.ItemTestReport(item, excinfo, "execute", outerr)
|
||||
item.config.pytestplugins.notify("itemtestreport", rep)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import py
|
||||
from outcome import Skipped
|
||||
|
||||
class RunnerPlugin:
|
||||
def pytest_configure(self, config):
|
||||
|
@ -15,7 +16,7 @@ class RunnerPlugin:
|
|||
item.config.pytestplugins.notify("itemsetupreport", rep)
|
||||
else:
|
||||
call = item.config.guardedcall(lambda: item.runtest())
|
||||
item.config.mc.pytest_item_runtest_finished(
|
||||
item.config.api.pytest_item_runtest_finished(
|
||||
item=item, excinfo=call.excinfo, outerr=call.outerr)
|
||||
call = item.config.guardedcall(lambda: self.teardown_exact(item))
|
||||
if call.excinfo:
|
||||
|
@ -203,17 +204,15 @@ class TestSetupState:
|
|||
assert not hasattr(item.parent.obj, 'x')
|
||||
|
||||
class TestRunnerPlugin:
|
||||
disabled = True
|
||||
def test_pytest_item_setup_and_runtest(self, testdir):
|
||||
item = testdir.getitem("""def test_func(): pass""")
|
||||
plugin = RunnerPlugin()
|
||||
plugin.pytest_configure(item.config)
|
||||
sorter = testdir.geteventrecorder(item.config)
|
||||
plugin.pytest_item_setup_and_runtest(item)
|
||||
rep = sorter.getreport("itemtestreport")
|
||||
rep = sorter.getcall("itemtestreport").rep
|
||||
assert rep.passed
|
||||
|
||||
|
||||
class TestSetupEvents:
|
||||
disabled = True
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
handling py.test plugins.
|
||||
"""
|
||||
import py
|
||||
from py.__.test.plugin import api
|
||||
|
||||
class PytestPlugins(object):
|
||||
def __init__(self, pyplugins=None):
|
||||
|
@ -11,6 +12,10 @@ class PytestPlugins(object):
|
|||
self.MultiCall = self.pyplugins.MultiCall
|
||||
self._plugins = {}
|
||||
|
||||
def _getapi(self):
|
||||
return py._com.PluginAPI(apiclass=api.PluginHooks,
|
||||
plugins=self.pyplugins)
|
||||
|
||||
def register(self, plugin):
|
||||
self.pyplugins.register(plugin)
|
||||
def unregister(self, plugin):
|
||||
|
|
Loading…
Reference in New Issue