[Pytest-commit] commit/pytest: 2 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Sat Jul 6 18:58:40 CEST 2013
2 new commits in pytest:
https://bitbucket.org/hpk42/pytest/commits/a59fa6c971ab/
Changeset: a59fa6c971ab
User: flub
Date: 2013-07-06 17:56:54
Summary: Solve fixture ordering when loading plugins from conftest
Conftests are plugins with a location attached to them while other
plugins do not have a location. When ordering fixturedefs those from
plugins without a location need to be listed first.
Affected #: 2 files
diff -r 63b5f85e68df7242019300937e01d247f89e9361 -r a59fa6c971abd42810301100464c4da7bc363e1d _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -1472,8 +1472,7 @@
def pytest_plugin_registered(self, plugin):
if plugin in self._seenplugins:
return
- #print "plugin_registered", plugin
- nodeid = ""
+ nodeid = None
try:
p = py.path.local(plugin.__file__)
except AttributeError:
@@ -1580,8 +1579,8 @@
for fin in reversed(l):
fin()
- def parsefactories(self, node_or_obj, nodeid=None, unittest=False):
- if nodeid is not None:
+ def parsefactories(self, node_or_obj, nodeid=_dummy, unittest=False):
+ if nodeid is not _dummy:
holderobj = node_or_obj
else:
holderobj = node_or_obj.obj
@@ -1612,7 +1611,15 @@
marker.scope, marker.params,
unittest=unittest)
faclist = self._arg2fixturedefs.setdefault(name, [])
- faclist.append(fixturedef)
+ if not fixturedef.has_location:
+ # All Nones are at the front so this inserts the
+ # current fixturedef after the existing fixturedefs
+ # from external plugins but before the fixturedefs
+ # provided in conftests.
+ i = faclist.count(None)
+ else:
+ i = len(faclist) # append
+ faclist.insert(i, fixturedef)
if marker.autouse:
autousenames.append(name)
if autousenames:
@@ -1670,7 +1677,8 @@
def __init__(self, fixturemanager, baseid, argname, func, scope, params,
unittest=False):
self._fixturemanager = fixturemanager
- self.baseid = baseid
+ self.baseid = baseid or ''
+ self.has_location = baseid is not None
self.func = func
self.argname = argname
self.scope = scope
@@ -1721,7 +1729,8 @@
return result
def __repr__(self):
- return "<FixtureDef name=%r scope=%r>" % (self.argname, self.scope)
+ return ("<FixtureDef name=%r scope=%r baseid=%r module=%r>" %
+ (self.argname, self.scope, self.baseid, self.func.__module__))
def getfuncargnames(function, startindex=None):
# XXX merge with main.py's varnames
diff -r 63b5f85e68df7242019300937e01d247f89e9361 -r a59fa6c971abd42810301100464c4da7bc363e1d testing/python/fixture.py
--- a/testing/python/fixture.py
+++ b/testing/python/fixture.py
@@ -173,6 +173,31 @@
result = testdir.runpytest(testfile)
result.stdout.fnmatch_lines(["*1 passed*"])
+ def test_extend_fixture_conftest_plugin(request, testdir):
+ testdir.makepyfile(testplugin="""
+ import pytest
+
+ @pytest.fixture
+ def foo():
+ return 7
+ """)
+ testdir.syspathinsert()
+ testdir.makeconftest("""
+ import pytest
+
+ pytest_plugins = 'testplugin'
+
+ @pytest.fixture
+ def foo(foo):
+ return foo + 7
+ """)
+ testdir.makepyfile("""
+ def test_foo(foo):
+ assert foo == 14
+ """)
+ result = testdir.runpytest('-s')
+ assert result.ret == 0
+
def test_funcarg_lookup_error(self, testdir):
p = testdir.makepyfile("""
def test_lookup_error(unknown):
https://bitbucket.org/hpk42/pytest/commits/cc8871c02a5e/
Changeset: cc8871c02a5e
User: flub
Date: 2013-07-06 18:53:26
Summary: Always check for both ENOENT and ENOTDIR
This fixes issue 326.
Affected #: 1 file
diff -r a59fa6c971abd42810301100464c4da7bc363e1d -r cc8871c02a5e4e34ad8e42121ffefb0651304b67 _pytest/assertion/rewrite.py
--- a/_pytest/assertion/rewrite.py
+++ b/_pytest/assertion/rewrite.py
@@ -15,12 +15,6 @@
from _pytest.assertion import util
-# Windows gives ENOENT in places *nix gives ENOTDIR.
-if sys.platform.startswith("win"):
- PATH_COMPONENT_NOT_DIR = errno.ENOENT
-else:
- PATH_COMPONENT_NOT_DIR = errno.ENOTDIR
-
# py.test caches rewritten pycs in __pycache__.
if hasattr(imp, "get_tag"):
PYTEST_TAG = imp.get_tag() + "-PYTEST"
@@ -119,7 +113,7 @@
# common case) or it's blocked by a non-dir node. In the
# latter case, we'll ignore it in _write_pyc.
pass
- elif e == PATH_COMPONENT_NOT_DIR:
+ elif e in [errno.ENOENT, errno.ENOTDIR]:
# One of the path components was not a directory, likely
# because we're in a zip file.
write = False
@@ -173,7 +167,7 @@
fp = open(pyc, "wb")
except IOError:
err = sys.exc_info()[1].errno
- if err == PATH_COMPONENT_NOT_DIR:
+ if err in [errno.ENOENT, errno.ENOTDIR]:
# This happens when we get a EEXIST in find_module creating the
# __pycache__ directory and __pycache__ is by some non-dir node.
return False
Repository URL: https://bitbucket.org/hpk42/pytest/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the pytest-commit
mailing list