[py-svn] r62101 - in py/branch/pytestplugin/py/test: . plugin testing
hpk at codespeak.net
hpk at codespeak.net
Mon Feb 23 20:10:10 CET 2009
Author: hpk
Date: Mon Feb 23 20:10:09 2009
New Revision: 62101
Modified:
py/branch/pytestplugin/py/test/plugin/pytest_pytester.py
py/branch/pytestplugin/py/test/pytestplugin.py
py/branch/pytestplugin/py/test/testing/test_pytestplugin.py
Log:
sorting through plugin tests, marking some and writing a new one marked with xfail
Modified: py/branch/pytestplugin/py/test/plugin/pytest_pytester.py
==============================================================================
--- py/branch/pytestplugin/py/test/plugin/pytest_pytester.py (original)
+++ py/branch/pytestplugin/py/test/plugin/pytest_pytester.py Mon Feb 23 20:10:09 2009
@@ -22,6 +22,13 @@
name = name.replace(".", "_")
self.tmpdir = py.test.ensuretemp(name)
self._plugins = []
+ self._syspathremove = []
+ #self._olddir = py.std.os.getcwd()
+
+ def finalize(self):
+ for p in self._syspathremove:
+ py.std.sys.path.remove(p)
+ #py.std.os.chdir(self._olddir)
def _makefile(self, ext, args, kwargs):
items = kwargs.items()
@@ -47,6 +54,12 @@
def maketxtfile(self, *args, **kwargs):
return self._makefile('.txt', args, kwargs)
+ def syspathinsert(self, path=None):
+ if path is None:
+ path = self.tmpdir
+ py.std.sys.path.insert(0, str(path))
+ self._syspathremove.append(str(path))
+
def mkdir(self, name):
return self.tmpdir.mkdir(name)
@@ -378,7 +391,9 @@
return LineMatcher
def pytest_pyfuncarg_testdir(self, pyfuncitem):
- return TmpTestdir(pyfuncitem)
-
+ tmptestdir = TmpTestdir(pyfuncitem)
+ pyfuncitem.addfinalizer(tmptestdir.finalize)
+ return tmptestdir
+
def pytest_pyfuncarg_EventRecorder(self, pyfuncitem):
return EventRecorder
Modified: py/branch/pytestplugin/py/test/pytestplugin.py
==============================================================================
--- py/branch/pytestplugin/py/test/pytestplugin.py (original)
+++ py/branch/pytestplugin/py/test/pytestplugin.py Mon Feb 23 20:10:09 2009
@@ -29,6 +29,7 @@
return self._plugins[pname.lower()]
def setinitial(self, modules):
+ self.pyplugins.consider_env("PYTEST_PLUGINS")
for module in modules:
self.consider_module(module)
@@ -43,20 +44,24 @@
def import_plugin(self, spec):
assert isinstance(spec, str)
modname, clsname = canonical_names(spec)
- if clsname.lower() not in self._plugins:
- mod = importplugin(modname)
- plugin = registerplugin(self.pyplugins.register, mod, clsname)
- self._plugins[clsname.lower()] = plugin
- self.consider_module(mod)
+ if clsname.lower() in self._plugins:
+ return
+ mod = importplugin(modname)
+ plugin = registerplugin(self.pyplugins.register, mod, clsname)
+ self._plugins[clsname.lower()] = plugin
+ self.consider_module(mod)
#
#
# API for interacting with registered and instantiated plugin objects
#
#
- def getfirst(self, methname):
- for x in self.pyplugins.listattr(methname):
+ def getfirst(self, attrname):
+ for x in self.pyplugins.listattr(attrname):
return x
-
+
+ def listattr(self, attrname):
+ return self.pyplugins.listattr(attrname)
+
def call_firstresult(self, *args, **kwargs):
return self.pyplugins.call_firstresult(*args, **kwargs)
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 Mon Feb 23 20:10:09 2009
@@ -1,7 +1,6 @@
import py
from py.__.test.pytestplugin import PytestPlugins, canonical_names
from py.__.test.pytestplugin import registerplugin, importplugin
-from py.__.test.config import Config as pytestConfig
def test_considermodule():
pp = PytestPlugins()
@@ -16,8 +15,8 @@
py.test.raises(ImportError, "pp.setinitial([mod])")
class TestPytestPlugins:
- def test_configure(self):
- config = pytestConfig()
+ def test_configure(self, testdir):
+ config = testdir.parseconfig()
l = []
events = []
class A:
@@ -117,129 +116,75 @@
from py.__.test.config import Config as pytestConfig
class TestInitialization:
- disabled = True
- def setup_method(self, method):
- self.tmpdir = py.test.ensuretemp("%s.%s.%s" %
- (__name__, self.__class__.__name__, method.__name__))
-
- def test_import_plugin_importname(self):
+ def test_setinitial_env(self):
plugins = PytestPlugins()
- py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
- py.test.raises(ImportError, 'plugins.import_plugin("pytest_x.y")')
-
- sys.path.insert(0, str(self.tmpdir))
- try:
- pluginname = "pytest_hello"
- self.tmpdir.join(pluginname + ".py").write(py.code.Source("""
- class Hello:
- pass
- """))
- plugins.import_plugin("hello")
- plugins.import_plugin("pytest_hello")
- plugin = plugins.getplugin("hello")
- finally:
- sys.path.remove(str(self.tmpdir))
-
- def test_import_plugin_defaults_to_pytestplugin(self):
- from py.__.test.defaultconftest import pytest_plugins
- for name in pytest_plugins:
- if isinstance(name, str):
- break
- sys.path.insert(0, str(self.tmpdir))
+ KEY = "PYTEST_PLUGINS"
+ old = os.environ.get(KEY, None)
try:
- self.tmpdir.join(name + ".py").write(py.code.Source("""
- class Terminal:
- pass
- class AnotherPlugin:
- pass
- pytest_plugins = AnotherPlugin
- """))
- plugins = PytestPlugins()
- plugins.import_plugin(name)
- plugin = plugins.getplugin("terminal")
- #del sys.modules[name]
- print plugins._plugins
- plugin = plugins.getplugin("anotherplugin")
+ os.environ[KEY] = "test_setinitial"
+ py.test.raises(ImportError, "plugins.setinitial([])")
finally:
- sys.path.remove(str(self.tmpdir))
-
- def test_import_plugin_class(self):
- plugins = PytestPlugins()
- class SomePlugin:
- pass
- plugins.import_plugin(SomePlugin)
- plugin = plugins.getplugin("someplugin")
- assert isinstance(plugin, SomePlugin)
- i = len(plugins._plugins)
- plugins.import_plugin(SomePlugin)
- assert len(plugins._plugins) == i
-
- def test_addpluginclass_post_configure(self):
- plugins = PytestPlugins()
- l = []
- class SomePlugin:
- def pytest_configure(self, config):
- l.append(config)
- conf = pytestConfig()
- plugins.configure(config=conf)
- plugins.import_plugin(SomePlugin)
- assert len(l) == 1
- assert l[0] is conf
+ if old is None:
+ del os.environ[KEY]
+ else:
+ os.environ[KEY] = old
- def test_consider_module(self):
+ def test_import_plugin_importname(self, testdir):
plugins = PytestPlugins()
- sys.path.insert(0, str(self.tmpdir))
- try:
- self.tmpdir.join("pytest_plug1.py").write("class Plug1: pass")
- self.tmpdir.join("pytest_plug2.py").write("class Plug2: pass")
- mod = py.std.new.module("temp")
- mod.pytest_plugins = ["pytest_plug1", "pytest_plug2"]
- plugins.consider_module(mod)
- assert plugins.getplugin("plug1").__class__.__name__ == "Plug1"
- assert plugins.getplugin("plug2").__class__.__name__ == "Plug2"
- finally:
- sys.path.remove(str(self.tmpdir))
-
+ py.test.raises(ImportError, 'plugins.import_plugin("x.y")')
+ py.test.raises(ImportError, 'plugins.import_plugin("pytest_x.y")')
- def test_addpluginclass(self):
- plugins = PytestPlugins()
- class My:
- pass
- plugins.addpluginclass(My)
- assert len(plugins._plugins) == 1
- plugins.addpluginclass(My)
- assert len(plugins._plugins) == 1
+ reset = testdir.syspathinsert()
+ pluginname = "pytest_hello"
+ testdir.makepyfile(**{pluginname: """
+ class Hello:
+ pass
+ """})
+ plugins.import_plugin("hello")
+ plugins.import_plugin("pytest_hello")
+ plugin = plugins.getplugin("hello")
+
+ def test_consider_module(self, testdir):
+ plugins = PytestPlugins()
+ testdir.syspathinsert()
+ testdir.makepyfile(pytest_plug1="class Plug1: pass")
+ testdir.makepyfile(pytest_plug2="class Plug2: pass")
+ mod = py.std.new.module("temp")
+ mod.pytest_plugins = ["pytest_plug1", "pytest_plug2"]
+ plugins.consider_module(mod)
+ assert plugins.getplugin("plug1").__class__.__name__ == "Plug1"
+ assert plugins.getplugin("plug2").__class__.__name__ == "Plug2"
+ @py.test.keywords(xfail="getplugin() naming is unclear unconcept")
def test_getplugin(self):
plugins = PytestPlugins()
assert py.test.raises(LookupError, "plugins.getplugin('_xxx')")
class PluGin: pass
- plugins.addpluginclass(PluGin)
+ plugins.register(PluGin())
myplugin1 = plugins.getplugin("plugin")
myplugin2 = plugins.getplugin("Plugin")
assert myplugin1 is myplugin2
class TestPluginInteraction:
- disabled = True
def test_getfirst(self):
plugins = PytestPlugins()
class My1:
x = 1
assert plugins.getfirst("x") is None
- plugins.addpluginclass(My1)
+ plugins.register(My1())
assert plugins.getfirst("x") == 1
- def test_call_plugins(self):
+ def test_call_each(self):
plugins = PytestPlugins()
class My:
def method(self, arg):
pass
- plugins.addpluginclass(My)
- py.test.raises(TypeError, 'plugins.call_plugins("method")')
- py.test.raises(TypeError, 'plugins.call_plugins("method", 42)')
- plugins.call_plugins("method", arg=42)
- py.test.raises(TypeError, 'plugins.call_plugins("method", arg=42, s=13)')
+ plugins.register(My())
+ py.test.raises(TypeError, 'plugins.call_each("method")')
+ l = plugins.call_each("method", arg=42)
+ assert l == []
+ py.test.raises(TypeError, 'plugins.call_each("method", arg=42, s=13)')
def test_call_firstresult(self):
plugins = PytestPlugins()
@@ -254,90 +199,41 @@
return None
assert plugins.call_firstresult("method") is None
assert plugins.call_firstresult("methodnotexists") is None
- plugins.addpluginclass(My1)
+ plugins.register(My1())
assert plugins.call_firstresult("method") is None
- plugins.addpluginclass(My2)
+ plugins.register(My2())
assert plugins.call_firstresult("method") == True
- plugins.addpluginclass(My3)
+ plugins.register(My3())
assert plugins.call_firstresult("method") == True
def test_listattr(self):
plugins = PytestPlugins()
class My2:
x = 42
- plugins.addpluginclass(My2)
+ plugins.register(My2())
assert not plugins.listattr("hello")
- assert plugins.listattr("x") == [('my2', 42)]
-
- def test_eventbus_interaction(self):
- plugins = PytestPlugins()
- l = []
- class My3:
- def pytest_configure(self, config):
- l.append("configure")
- def pytest_unconfigure(self, config):
- l.append("unconfigure")
- plugins.addpluginclass(My3)
- config = pytestConfig()
- plugins.configure(config)
- assert config.bus.issubscribed(plugins.forward_event)
- plugins.unconfigure(config)
- assert not config.bus.issubscribed(plugins.forward_event)
- assert l == ['configure', 'unconfigure']
-
- def test_pytest_event(self):
- plugins = PytestPlugins()
- l = []
- class My2:
- def pytest_event(self, event):
- l.append(event)
- plugins.addpluginclass(My2)
- ev = NOP()
- plugins.forward_event(ev)
- assert len(l) == 1
- assert l[0] is ev
-
- def test_addcmdlineoptions(self):
- plugins = PytestPlugins()
- class My:
- pytest_cmdlineoptions = [
- py.test.config.Option("--hello", dest="dest", default=242)
- ]
- plugins.addpluginclass(My)
- config = pytestConfig()
- plugins.add_cmdlineoptions(config)
- opt = config._parser.get_option("--hello")
- assert opt
- assert opt.default == 242
+ assert plugins.listattr("x") == [42]
- def test_setinitial_env(self):
- plugins = PytestPlugins()
- KEY = "PYTEST_PLUGINS"
- old = os.environ.get(KEY, None)
- try:
- os.environ[KEY] = "test_setinitial"
- py.test.raises(ImportError, "plugins.setinitial([])")
- finally:
- if old is None:
- del os.environ[KEY]
- else:
- os.environ[KEY] = old
-
- def test_conftest_specifies_plugin(self, testdir):
+ @py.test.keywords(xfail="implement setupcall")
+ def test_call_setup_participants(self, testdir):
testdir.makepyfile(
conftest="""
import py
- class MyPlugin:
- pytest_cmdlineoptions = [
- py.test.config.Option("--myplugin-option", dest="myplugin",
- help="myplugin option",
- )
- ]
- pytest_plugins = MyPlugin
+ def pytest_method(self, x):
+ return x+1
+ pytest_plugin = "pytest_someplugin",
"""
)
- result = testdir.runpytest(testdir.tmpdir, '-h')
- result.stdout.fnmatch_lines([
- "*--myplugin-option*",
- ])
-
+ testdir.makepyfile(pytest_someplugin="""
+ def pytest_method(self, x):
+ return x+1
+ """)
+ modcol = testdir.getmodulecol("""
+ def pytest_method(x):
+ return x+0
+ """)
+ l = []
+ call = modcol._config.pytestplugins.setupcall(modcol, "pytest_method", 1)
+ assert len(call.methods) == 3
+ results = call.execute()
+ assert results == [1,2,2]
More information about the pytest-commit
mailing list