4 new commits in pytest:
https://bitbucket.org/hpk42/pytest/changeset/6e95f36c5689/ changeset: 6e95f36c5689 user: hpk42 date: 2012-11-19 14:07:14 summary: modernize tmpdir fixture (use request.node in tmpdir fixture, use @pytest.fixture) affected #: 2 files diff -r eec537f128e1a1e9c80e373051486c290fc24e46 -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f _pytest/tmpdir.py --- a/_pytest/tmpdir.py +++ b/_pytest/tmpdir.py @@ -54,15 +54,15 @@ mp.setattr(config, '_tmpdirhandler', t, raising=False) mp.setattr(pytest, 'ensuretemp', t.ensuretemp, raising=False) -def pytest_funcarg__tmpdir(request): +@pytest.fixture +def tmpdir(request): """return a temporary directory path object which is unique to each test function invocation, created as a sub directory of the base temporary directory. The returned object is a `py.path.local`_ path object. """ - name = request._pyfuncitem.name + name = request.node.name name = py.std.re.sub("[\W]", "_", name) x = request.config._tmpdirhandler.mktemp(name, numbered=True) return x - diff -r eec537f128e1a1e9c80e373051486c290fc24e46 -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f testing/test_tmpdir.py --- a/testing/test_tmpdir.py +++ b/testing/test_tmpdir.py @@ -1,7 +1,7 @@ import py, pytest import os -from _pytest.tmpdir import pytest_funcarg__tmpdir, TempdirHandler +from _pytest.tmpdir import tmpdir, TempdirHandler def test_funcarg(testdir): testdir.makepyfile(""" @@ -16,12 +16,12 @@ # pytest_unconfigure has deleted the TempdirHandler already config = item.config config._tmpdirhandler = TempdirHandler(config) - p = pytest_funcarg__tmpdir(item) + p = tmpdir(item._request) assert p.check() bn = p.basename.strip("0123456789") assert bn.endswith("test_func_a_") item.name = "qwe/\\abc" - p = pytest_funcarg__tmpdir(item) + p = tmpdir(item._request) assert p.check() bn = p.basename.strip("0123456789") assert bn == "qwe__abc" https://bitbucket.org/hpk42/pytest/changeset/992d5d6b38e1/ changeset: 992d5d6b38e1 user: hpk42 date: 2012-11-19 22:17:55 summary: fix autouse invocation (off-by-one error), relates to issue in moinmoin test suite affected #: 5 files diff -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f -r 992d5d6b38e127cde032300b02383a88ac1e83b7 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -5,6 +5,8 @@ with autouse fixtures. If you need generative tests, use @pytest.mark.parametrize or pytest_generate_tests, see the many examples at http://pytest.org/latest/example/parametrize.html +- fix autouse-issue where autouse-fixtures would not be discovered + if defined in a a/conftest.py file and tests in a/tests/test_some.py - fix issue226 - LIFO ordering for fixture teardowns - fix issue224 - invocations with >256 char arguments now work - fix issue91 - add/discuss package/directory level setups in example diff -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f -r 992d5d6b38e127cde032300b02383a88ac1e83b7 _pytest/__init__.py --- a/_pytest/__init__.py +++ b/_pytest/__init__.py @@ -1,2 +1,2 @@ # -__version__ = '2.3.4.dev5' +__version__ = '2.3.4.dev6' diff -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f -r 992d5d6b38e127cde032300b02383a88ac1e83b7 _pytest/python.py --- a/_pytest/python.py +++ b/_pytest/python.py @@ -1455,7 +1455,7 @@ for baseid, basenames in self._nodeid_and_autousenames: if nodeid.startswith(baseid): if baseid: - i = len(baseid) + 1 + i = len(baseid) nextchar = nodeid[i:i+1] if nextchar and nextchar not in ":/": continue diff -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f -r 992d5d6b38e127cde032300b02383a88ac1e83b7 setup.py --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ name='pytest', description='py.test: simple powerful testing with Python', long_description = long_description, - version='2.3.4.dev5', + version='2.3.4.dev6', url='http://pytest.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], diff -r 6e95f36c56897a3e93ac4e3d39a97d90db676a0f -r 992d5d6b38e127cde032300b02383a88ac1e83b7 testing/python/fixture.py --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -948,7 +948,26 @@ reprec = testdir.inline_run() reprec.assertoutcome(passed=3) + class TestAutouseManagement: + def test_autouse_conftest_mid_directory(self, testdir): + pkgdir = testdir.mkpydir("xyz123") + pkgdir.join("conftest.py").write(py.code.Source(""" + import pytest + @pytest.fixture(autouse=True) + def app(): + import sys + sys._myapp = "hello" + """)) + t = pkgdir.ensure("tests", "test_app.py") + t.write(py.code.Source(""" + import sys + def test_app(): + assert sys._myapp == "hello" + """)) + reprec = testdir.inline_run("-s") + reprec.assertoutcome(passed=1) + def test_funcarg_and_setup(self, testdir): testdir.makepyfile(""" import pytest https://bitbucket.org/hpk42/pytest/changeset/a4ce00a86c9d/ changeset: a4ce00a86c9d user: hpk42 date: 2012-11-19 22:17:59 summary: make yielded tests participate in the autouse protocol affected #: 3 files diff -r 992d5d6b38e127cde032300b02383a88ac1e83b7 -r a4ce00a86c9daabc16ee91c306e3baf892e8b759 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ Changes between 2.3.3 and 2.3.4.dev ----------------------------------- +- yielded tests will activate autouse-fixtures - NOTE: the pre-2.0 way of yielding tests is not compatible with autouse fixtures. If you need generative tests, use @pytest.mark.parametrize or pytest_generate_tests, see the diff -r 992d5d6b38e127cde032300b02383a88ac1e83b7 -r a4ce00a86c9daabc16ee91c306e3baf892e8b759 _pytest/python.py --- a/_pytest/python.py +++ b/_pytest/python.py @@ -528,7 +528,7 @@ def fillfixtures(function): """ fill missing funcargs for a test function. """ - if getattr(function, "_args", None) is None: # not a yielded function + if 1 or getattr(function, "_args", None) is None: # not a yielded function try: request = function._request except AttributeError: @@ -906,12 +906,15 @@ self.keywords[name] = val fm = self.session._fixturemanager - self._fixtureinfo = fi = fm.getfixtureinfo(self.parent, - self.obj, self.cls) + isyield = self._isyieldedfunction() + self._fixtureinfo = fi = fm.getfixtureinfo(self.parent, self.obj, + self.cls, + funcargs=not isyield) self.fixturenames = fi.names_closure - if self._isyieldedfunction(): + if isyield: assert not callspec, ( "yielded functions (deprecated) cannot have funcargs") + self.funcargs = {} else: if callspec is not None: self.callspec = callspec @@ -921,8 +924,7 @@ self.param = callspec.param else: self.funcargs = {} - self._request = req = FixtureRequest(self) - #req._discoverfactories() + self._request = req = FixtureRequest(self) @property def function(self): @@ -1398,13 +1400,13 @@ self._nodename2fixtureinfo = {} - def getfixtureinfo(self, node, func, cls): + def getfixtureinfo(self, node, func, cls, funcargs=True): key = (node, func.__name__) try: return self._nodename2fixtureinfo[key] except KeyError: pass - if not hasattr(node, "nofuncargs"): + if funcargs and not hasattr(node, "nofuncargs"): if cls is not None: startindex = 1 else: diff -r 992d5d6b38e127cde032300b02383a88ac1e83b7 -r a4ce00a86c9daabc16ee91c306e3baf892e8b759 testing/python/fixture.py --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -968,6 +968,24 @@ reprec = testdir.inline_run("-s") reprec.assertoutcome(passed=1) + def test_autouse_honored_for_yield(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.fixture(autouse=True) + def tst(): + global x + x = 3 + def test_gen(): + def f(hello): + assert x == abs(hello) + yield f, 3 + yield f, -3 + """) + reprec = testdir.inline_run() + reprec.assertoutcome(passed=2) + + + def test_funcarg_and_setup(self, testdir): testdir.makepyfile(""" import pytest https://bitbucket.org/hpk42/pytest/changeset/7433673d86bb/ changeset: 7433673d86bb user: hpk42 date: 2012-11-19 22:20:37 summary: adapt changelog entry about autouse fixtures and yield affected #: 1 file diff -r a4ce00a86c9daabc16ee91c306e3baf892e8b759 -r 7433673d86bb5a96cb5d6aa6f109ba03a868bb9f CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -2,10 +2,9 @@ ----------------------------------- - yielded tests will activate autouse-fixtures -- NOTE: the pre-2.0 way of yielding tests is not compatible - with autouse fixtures. If you need generative tests, use - @pytest.mark.parametrize or pytest_generate_tests, see the - many examples at http://pytest.org/latest/example/parametrize.html +- NOTE: yielded tests cannot use fixtures - if you need this + you may want to use the post-2.0 parametrize features, see + http://pytest.org/latest/example/parametrize.html - fix autouse-issue where autouse-fixtures would not be discovered if defined in a a/conftest.py file and tests in a/tests/test_some.py - fix issue226 - LIFO ordering for fixture teardowns 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. _______________________________________________ py-svn mailing list py-svn@codespeak.net http://codespeak.net/mailman/listinfo/py-svn