[py-svn] py-trunk commit b38b9280c073: remove defaultconfest.py and make PluginManager directly do early initialization of default plugins.
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Tue Dec 29 10:29:42 CET 2009
# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview/
# User holger krekel <holger at merlinux.eu>
# Date 1262078811 -3600
# Node ID b38b9280c0732dee15ebe7d5f13d82f11d6dad32
# Parent f3825c8a4456cb1b0e958ecbd75461b8bf63106e
remove defaultconfest.py and make PluginManager directly do early initialization of default plugins.
--- a/py/impl/test/conftesthandle.py
+++ b/py/impl/test/conftesthandle.py
@@ -1,5 +1,4 @@
import py
-from py.impl.test import defaultconftest
class Conftest(object):
""" the single place for accessing values and interacting
@@ -40,7 +39,7 @@ class Conftest(object):
raise ValueError("missing default conftest.")
dp = path.dirpath()
if dp == path:
- clist = [self._postimport(defaultconftest)]
+ clist = self._path2confmods[path] = []
else:
clist = self.getconftestmodules(dp)
conftestpath = path.join("conftest.py")
--- a/py/impl/test/collect.py
+++ b/py/impl/test/collect.py
@@ -8,7 +8,7 @@ import py
def configproperty(name):
def fget(self):
#print "retrieving %r property from %s" %(name, self.fspath)
- return self.config.getvalue(name, self.fspath)
+ return self.config._getcollectclass(name, self.fspath)
return property(fget)
class Node(object):
--- a/testing/plugin/conftest.py
+++ b/testing/plugin/conftest.py
@@ -3,7 +3,7 @@ import py
pytest_plugins = "pytester"
import py.plugin
plugindir = py.path.local(py.plugin.__file__).dirpath()
-from py.impl.test.defaultconftest import pytest_plugins as default_plugins
+from py.impl.test.pluginmanager import default_plugins
def pytest_collect_file(path, parent):
if path.basename.startswith("pytest_") and path.ext == ".py":
--- a/testing/pytest/test_pluginmanager.py
+++ b/testing/pytest/test_pluginmanager.py
@@ -148,7 +148,9 @@ class TestBootstrapping:
assert pp.isregistered(a1)
pp.register(a2, "hello")
assert pp.isregistered(a2)
- assert pp.getplugins() == [a1, a2]
+ l = pp.getplugins()
+ assert a1 in l
+ assert a2 in l
assert pp.getplugin('hello') == a2
pp.unregister(a1)
assert not pp.isregistered(a1)
@@ -160,13 +162,14 @@ class TestBootstrapping:
mod = py.std.types.ModuleType("x.y.pytest_hello")
pp.register(mod)
assert pp.isregistered(mod)
- assert pp.getplugins() == [mod]
+ l = pp.getplugins()
+ assert mod in l
py.test.raises(AssertionError, "pp.register(mod)")
mod2 = py.std.types.ModuleType("pytest_hello")
#pp.register(mod2) # double registry
py.test.raises(AssertionError, "pp.register(mod)")
#assert not pp.isregistered(mod2)
- assert pp.getplugins() == [mod] # does not actually modify plugins
+ assert pp.getplugins() == l
def test_canonical_import(self, monkeypatch):
mod = py.std.types.ModuleType("pytest_xyz")
--- a/testing/pytest/test_pickling.py
+++ b/testing/pytest/test_pickling.py
@@ -184,7 +184,7 @@ class TestConfigPickling:
def test_config__setstate__wired_correctly_in_childprocess(testdir):
execnet = py.test.importorskip("execnet")
from py.impl.test.dist.mypickle import PickleChannel
- gw = execnet.PopenGateway()
+ gw = execnet.makegateway()
channel = gw.remote_exec("""
import py
from py.impl.test.dist.mypickle import PickleChannel
--- a/py/plugin/pytest_default.py
+++ b/py/plugin/pytest_default.py
@@ -40,7 +40,7 @@ def pytest_collect_directory(path, paren
break
else:
return
- Directory = parent.config.getvalue('Directory', path)
+ Directory = parent.config._getcollectclass('Directory', path)
return Directory(path, parent=parent)
def pytest_report_iteminfo(item):
--- a/testing/pytest/test_conftesthandle.py
+++ b/testing/pytest/test_conftesthandle.py
@@ -32,10 +32,10 @@ class TestConftestValueAccessGlobal:
l = []
conftest = Conftest(onimport=l.append)
conftest.setinitial([basedir.join("adir")])
- assert len(l) == 2 # default + the one
+ assert len(l) == 1
assert conftest.rget("a") == 1
assert conftest.rget("b", basedir.join("adir", "b")) == 2
- assert len(l) == 3
+ assert len(l) == 2
def test_immediate_initialiation_and_incremental_are_the_same(self, basedir):
conftest = Conftest()
@@ -48,11 +48,11 @@ class TestConftestValueAccessGlobal:
conftest.getconftestmodules(basedir.join('b'))
assert len(conftest._path2confmods) == snap1 + 2
- def test_default_Module_setting_is_visible_always(self, basedir):
- for path in basedir.parts():
- conftest = ConftestWithSetinitial(path)
- #assert conftest.lget("Module") == py.test.collect.Module
- assert conftest.rget("Module") == py.test.collect.Module
+ def test_default_Module_setting_is_visible_always(self, basedir, testdir):
+ basedir.copy(testdir.tmpdir)
+ config = testdir.Config()
+ colclass = config._getcollectclass("Module", testdir.tmpdir)
+ assert colclass == py.test.collect.Module
def test_default_has_lower_prio(self, basedir):
conftest = ConftestWithSetinitial(basedir.join("adir"))
--- a/py/impl/test/config.py
+++ b/py/impl/test/config.py
@@ -107,6 +107,7 @@ class Config(object):
# warning global side effects:
# * registering to py lib plugins
# * setting py.test.config
+ py._com.comregistry = py._com.Registry()
self.__init__(
pluginmanager=py.test._PluginManager(py._com.comregistry),
topdir=py.path.local(),
@@ -155,11 +156,17 @@ class Config(object):
pkgpath = path.pypkgpath()
if pkgpath is None:
pkgpath = path.check(file=1) and path.dirpath() or path
- Dir = self._conftest.rget("Directory", pkgpath)
+ Dir = self._getcollectclass("Directory", pkgpath)
col = Dir(pkgpath)
col.config = self
return col._getfsnode(path)
+ def _getcollectclass(self, name, path):
+ try:
+ return self.getvalue(name, path)
+ except KeyError:
+ return getattr(py.test.collect, name)
+
def getconftest_pathlist(self, name, path=None):
""" return a matching value, which needs to be sequence
of filenames that will be returned as a list of Path
--- a/py/impl/test/pluginmanager.py
+++ b/py/impl/test/pluginmanager.py
@@ -5,6 +5,10 @@ import py
from py.plugin import hookspec
from py.impl.test.outcome import Skipped
+default_plugins = (
+ "default runner capture terminal mark skipping tmpdir monkeypatch "
+ "recwarn pdb pastebin unittest helpconfig nose assertion").split()
+
def check_old_use(mod, modname):
clsname = modname[len('pytest_'):].capitalize() + "Plugin"
assert not hasattr(mod, clsname), (mod, clsname)
@@ -21,6 +25,9 @@ class PluginManager(object):
self.hook = py._com.HookRelay(
hookspecs=hookspec,
registry=self.comregistry)
+ self.register(self)
+ for spec in default_plugins:
+ self.import_plugin(spec)
def _getpluginname(self, plugin, name):
if name is None:
@@ -31,7 +38,8 @@ class PluginManager(object):
return name
def register(self, plugin, name=None):
- assert not self.isregistered(plugin)
+ assert not self.isregistered(plugin), plugin
+ assert not self.comregistry.isregistered(plugin), plugin
name = self._getpluginname(plugin, name)
if name in self._name2plugin:
return False
@@ -191,31 +199,24 @@ class PluginManager(object):
mc.execute()
def pytest_plugin_registered(self, plugin):
+ dic = self.call_plugin(plugin, "pytest_namespace", {}) or {}
+ for name, value in dic.items():
+ setattr(py.test, name, value)
if hasattr(self, '_config'):
self.call_plugin(plugin, "pytest_addoption",
{'parser': self._config._parser})
self.call_plugin(plugin, "pytest_configure",
{'config': self._config})
- #dic = self.call_plugin(plugin, "pytest_namespace")
- #self._updateext(dic)
def call_plugin(self, plugin, methname, kwargs):
return py._com.MultiCall(
methods=self.listattr(methname, plugins=[plugin]),
kwargs=kwargs, firstresult=True).execute()
- def _updateext(self, dic):
- if dic:
- for name, value in dic.items():
- setattr(py.test, name, value)
-
def do_configure(self, config):
assert not hasattr(self, '_config')
- config.pluginmanager.register(self)
self._config = config
config.hook.pytest_configure(config=self._config)
- for dic in config.hook.pytest_namespace() or []:
- self._updateext(dic)
def do_unconfigure(self, config):
config = self._config
--- a/py/impl/test/defaultconftest.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import py
-
-Module = py.test.collect.Module
-Directory = py.test.collect.Directory
-File = py.test.collect.File
-
-# python collectors
-Class = py.test.collect.Class
-Generator = py.test.collect.Generator
-Function = py.test.collect.Function
-Instance = py.test.collect.Instance
-
-pytest_plugins = "default runner capture terminal mark skipping tmpdir monkeypatch recwarn pdb pastebin unittest helpconfig nose assertion".split()
-
More information about the pytest-commit
mailing list