[py-svn] r62122 - in py/branch/pytestplugin/py/test: . plugin testing
hpk at codespeak.net
hpk at codespeak.net
Tue Feb 24 20:07:31 CET 2009
Author: hpk
Date: Tue Feb 24 20:07:28 2009
New Revision: 62122
Modified:
py/branch/pytestplugin/py/test/config.py
py/branch/pytestplugin/py/test/plugin/pytest_eventlog.py
py/branch/pytestplugin/py/test/plugin/pytest_plugintester.py
py/branch/pytestplugin/py/test/plugin/pytest_terminal.py
py/branch/pytestplugin/py/test/pytestplugin.py
py/branch/pytestplugin/py/test/testing/test_conftesthandle.py
py/branch/pytestplugin/py/test/testing/test_pytestplugin.py
Log:
refined plugin/conftest option parsing interface
Modified: py/branch/pytestplugin/py/test/config.py
==============================================================================
--- py/branch/pytestplugin/py/test/config.py (original)
+++ py/branch/pytestplugin/py/test/config.py Tue Feb 24 20:07:28 2009
@@ -38,7 +38,7 @@
assert isinstance(pytestplugins, py.test._PytestPlugins)
self.bus = pytestplugins.pyplugins
self.pytestplugins = pytestplugins
- self._conftest = Conftest(onimport=self.pytestplugins.consider_module)
+ self._conftest = Conftest(onimport=self.pytestplugins.consider_conftest)
def parse(self, args):
""" parse cmdline arguments into this config object.
@@ -145,6 +145,9 @@
)
return self._addoptions(groupname, *specs)
+ def addoption(self, *args, **kwargs):
+ return self.addoptions("misc", self.Option(*args, **kwargs))
+
def _addoptions(self, groupname, *specs):
optgroup = optparse.OptionGroup(self._parser, groupname)
optgroup.add_options(specs)
Modified: py/branch/pytestplugin/py/test/plugin/pytest_eventlog.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_eventlog.py (original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_eventlog.py Tue Feb 24 20:07:28 2009
@@ -2,10 +2,15 @@
class EventlogPlugin:
""" log pytest events to a file. """
+ def pytest_option(self, config):
+ config.addoption("--eventlog", dest="eventlog",
+ help="write all pytest events to the given file.")
+
pytest_cmdlineoptions = [
py.test.config.Option('--eventlog', dest="eventlog",
help="write all pytest events to a specific file")
]
+
def pytest_configure(self, config):
eventlog = config.option.eventlog
if eventlog:
Modified: py/branch/pytestplugin/py/test/plugin/pytest_plugintester.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_plugintester.py (original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_plugintester.py Tue Feb 24 20:07:28 2009
@@ -96,6 +96,9 @@
pytest_cmdlineoptions = []
+ def pytest_option(self, config):
+ """ called before commandline parsing. """
+
def pytest_configure(self, config):
""" called after command line options have been parsed.
and all plugins and initial conftest files been loaded.
Modified: py/branch/pytestplugin/py/test/plugin/pytest_terminal.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_terminal.py (original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_terminal.py Tue Feb 24 20:07:28 2009
@@ -164,7 +164,13 @@
rev = py.__pkg__.getrev()
self.write_line("using py lib: %s <rev %s>" % (
py.path.local(py.__file__).dirpath(), rev))
- plugins = ", ".join(list(self.config.pytestplugins._plugins))
+ plugins = []
+ for x in self.config.pytestplugins._plugins:
+ if isinstance(x, str) and x.startswith("pytest_"):
+ plugins.append(x[7:])
+ else:
+ plugins.append(str(x)) # XXX display conftest plugins more nicely
+ plugins = ", ".join(plugins)
self.write_line("active plugins: %s" %(plugins,))
for i, testarg in py.builtin.enumerate(self.config.args):
self.write_line("test object %d: %s" %(i+1, testarg))
Modified: py/branch/pytestplugin/py/test/pytestplugin.py
==============================================================================
--- py/branch/pytestplugin/py/test/pytestplugin.py (original)
+++ py/branch/pytestplugin/py/test/pytestplugin.py Tue Feb 24 20:07:28 2009
@@ -27,14 +27,17 @@
impname, clsname = canonical_names(importname)
return self._plugins[impname]
- def setinitial(self, modules):
- for module in modules:
- self.consider_module(module)
-
def consider_env(self):
for spec in self.pyplugins._envlist("PYTEST_PLUGINS"):
self.import_plugin(spec)
+ def consider_conftest(self, conftestmodule):
+ cls = getattr(conftestmodule, 'ConftestPlugin', None)
+ if cls is not None and cls not in self._plugins:
+ self._plugins[cls] = True
+ self.register(cls())
+ self.consider_module(conftestmodule)
+
def consider_module(self, mod):
attr = getattr(mod, "pytest_plugins", ())
if attr:
@@ -73,6 +76,9 @@
def notify(self, eventname, *args, **kwargs):
return self.pyplugins.notify(eventname, *args, **kwargs)
+ def do_option(self, config):
+ self.pyplugins.call_each('pytest_option', config=config)
+
def add_cmdlineoptions(self, config):
# XXX think about sorting/grouping of options from user-perspective
#assert self.pyplugins.list
Modified: py/branch/pytestplugin/py/test/testing/test_conftesthandle.py
==============================================================================
--- py/branch/pytestplugin/py/test/testing/test_conftesthandle.py (original)
+++ py/branch/pytestplugin/py/test/testing/test_conftesthandle.py Tue Feb 24 20:07:28 2009
@@ -24,7 +24,6 @@
assert conftest.rget("a") == 1
assert conftest.rget("b", self.basedir.join("adir", "b")) == 2
assert len(l) == 3
-
def test_immediate_initialiation_and_incremental_are_the_same(self):
conftest = Conftest()
Modified: py/branch/pytestplugin/py/test/testing/test_pytestplugin.py
==============================================================================
--- py/branch/pytestplugin/py/test/testing/test_pytestplugin.py (original)
+++ py/branch/pytestplugin/py/test/testing/test_pytestplugin.py Tue Feb 24 20:07:28 2009
@@ -22,7 +22,7 @@
l3 = len(plugins.getplugins())
assert l2 == l3
- def test_pytestplugin_environment_variable(self, testdir, monkeypatch):
+ def test_pytestplugin_ENV_startup(self, testdir, monkeypatch):
testdir.makepyfile(pytest_x500="class X500Plugin: pass")
p = testdir.makepyfile("""
import py
@@ -36,16 +36,6 @@
assert result.ret == 0
extra = result.stdout.fnmatch_lines(["*1 passed in*"])
- def test_setinitial(self):
- pp = PytestPlugins()
- mod = py.std.new.module("hello")
- mod.pytest_plugins = "helloworldmod_42"
- py.test.raises(ImportError, "pp.setinitial([mod])")
-
- @py.test.keywords(xfail=True)
- def test_setinitial_conftest_plugins(self, testdir):
- assert 0
-
def test_import_plugin_importname(self, testdir):
plugins = PytestPlugins()
py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
@@ -96,6 +86,27 @@
evlist = evrec.getnamed("plugin_registered")
assert len(evlist) == 1
+ def test_consider_conftest(self, testdir):
+ pp = PytestPlugins()
+ mod = testdir.makepyfile("class ConftestPlugin: hello = 1").pyimport()
+ pp.consider_conftest(mod)
+ l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
+ assert len(l) == 1
+ assert l[0].hello == 1
+
+ pp.consider_conftest(mod)
+ l = [x for x in pp.getplugins() if isinstance(x, mod.ConftestPlugin)]
+ assert len(l) == 1
+
+ def test_config_sets_conftesthandle_onimport(self, testdir):
+ config = testdir.parseconfig([])
+ assert config._conftest._onimport == config.pytestplugins.consider_conftest
+
+ def test_consider_conftest_deps(self, testdir):
+ mod = testdir.makepyfile("pytest_plugins='xyz'").pyimport()
+ pp = PytestPlugins()
+ py.test.raises(ImportError, "pp.consider_conftest(mod)")
+
def test_registry(self):
pp = PytestPlugins()
a1, a2 = object(), object()
@@ -130,6 +141,20 @@
class TestPytestPluginInteractions:
+ def test_do_option_conftestplugin(self, testdir):
+ from py.__.test.config import Config
+ p = testdir.makepyfile("""
+ class ConftestPlugin:
+ def pytest_option(self, config):
+ config.addoption('--test123', action="store_true")
+ """)
+ config = Config()
+ config._conftest.importconftest(p)
+ print config.pytestplugins.getplugins()
+ config.pytestplugins.do_option(config=config)
+ config.parse([])
+ assert not config.option.test123
+
def test_configure(self, testdir):
config = testdir.parseconfig()
l = []
@@ -156,27 +181,12 @@
config.bus.register(A())
assert len(l) == 2
- def test_addcmdlineoptions(self):
- class PseudoConfig:
- opts = []
- def addoptions(self, *opts):
- self.opts.append(opts)
- config = PseudoConfig()
- pc = PytestPlugins()
- class A:
- pytest_cmdlineoptions = [42]
- pc.pyplugins.register(A)
- pc.add_cmdlineoptions(config)
- assert len(config.opts) == 1
- assert config.opts[0][1] == 42
-
def test_MultiCall(self):
pp = PytestPlugins()
assert hasattr(pp, 'MultiCall')
+ # lower level API
-
-class TestPluginInteraction:
def test_getfirst(self):
plugins = PytestPlugins()
class My1:
More information about the pytest-commit
mailing list