2 new commits in pytest:
https://bitbucket.org/hpk42/pytest/commits/af707032e4da/
Changeset: af707032e4da
User: hpk42
Date: 2013-05-05 14:48:17
Summary: bump version
Affected #: 2 files
diff -r f693c65bfa4dd90625eb231e2bcd2ba593103c61 -r
af707032e4da0d1f391f2683b017cc698ce620d9 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '2.3.5'
+__version__ = '2.3.6.dev1'
diff -r f693c65bfa4dd90625eb231e2bcd2ba593103c61 -r
af707032e4da0d1f391f2683b017cc698ce620d9 setup.py
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
- version='2.3.5',
+ version='2.3.6.dev1',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
https://bitbucket.org/hpk42/pytest/commits/b93ac0cdae02/
Changeset: b93ac0cdae02
User: hpk42
Date: 2013-05-05 14:48:37
Summary: allow fixture functions to be implemented as context managers:
@pytest.fixture
def myfix():
# setup
yield 1
# teardown
Affected #: 5 files
diff -r af707032e4da0d1f391f2683b017cc698ce620d9 -r
b93ac0cdae02effaa3c136a681cc45bba757fe46 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,12 @@
-Changes between 2.3.4 and 2.3.5dev
+Changes between 2.3.5 and DEV
+-----------------------------------
+
+- (experimental) allow fixture functions to be
+ implemented as context managers
+
+
+
+Changes between 2.3.4 and 2.3.5
-----------------------------------
- never consider a fixture function for test function collection
diff -r af707032e4da0d1f391f2683b017cc698ce620d9 -r
b93ac0cdae02effaa3c136a681cc45bba757fe46 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '2.3.6.dev1'
+__version__ = '2.3.6.dev2'
diff -r af707032e4da0d1f391f2683b017cc698ce620d9 -r
b93ac0cdae02effaa3c136a681cc45bba757fe46 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -1613,6 +1613,29 @@
except ValueError:
pass
+def call_fixture_func(fixturefunc, request, kwargs):
+ if is_generator(fixturefunc):
+ iter = fixturefunc(**kwargs)
+ next = getattr(iter, "__next__", None)
+ if next is None:
+ next = getattr(iter, "next")
+ res = next()
+ def teardown():
+ try:
+ next()
+ except StopIteration:
+ pass
+ else:
+ fs, lineno = getfslineno(fixturefunc)
+ location = "%s:%s" % (fs, lineno+1)
+ pytest.fail(
+ "fixture function %s has more than one 'yield': \n%s" %
+ (fixturefunc.__name__, location), pytrace=False)
+ request.addfinalizer(teardown)
+ else:
+ res = fixturefunc(**kwargs)
+ return res
+
class FixtureDef:
""" A container for a factory definition. """
def __init__(self, fixturemanager, baseid, argname, func, scope, params,
@@ -1663,7 +1686,7 @@
fixturefunc = fixturefunc.__get__(request.instance)
except AttributeError:
pass
- result = fixturefunc(**kwargs)
+ result = call_fixture_func(fixturefunc, request, kwargs)
assert not hasattr(self, "cached_result")
self.cached_result = result
return result
diff -r af707032e4da0d1f391f2683b017cc698ce620d9 -r
b93ac0cdae02effaa3c136a681cc45bba757fe46 setup.py
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
- version='2.3.6.dev1',
+ version='2.3.6.dev2',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
diff -r af707032e4da0d1f391f2683b017cc698ce620d9 -r
b93ac0cdae02effaa3c136a681cc45bba757fe46 testing/python/fixture.py
--- a/testing/python/fixture.py
+++ b/testing/python/fixture.py
@@ -1795,3 +1795,101 @@
*hello world*
""")
+
+
+class TestContextManagerFixtureFuncs:
+ def test_simple(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.fixture
+ def arg1():
+ print ("setup")
+ yield 1
+ print ("teardown")
+ def test_1(arg1):
+ print ("test1 %s" % arg1)
+ def test_2(arg1):
+ print ("test2 %s" % arg1)
+ assert 0
+ """)
+ result = testdir.runpytest("-s")
+ result.stdout.fnmatch_lines("""
+ setup
+ test1 1
+ teardown
+ setup
+ test2 1
+ teardown
+ """)
+
+ def test_scoped(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.fixture(scope="module")
+ def arg1():
+ print ("setup")
+ yield 1
+ print ("teardown")
+ def test_1(arg1):
+ print ("test1 %s" % arg1)
+ def test_2(arg1):
+ print ("test2 %s" % arg1)
+ """)
+ result = testdir.runpytest("-s")
+ result.stdout.fnmatch_lines("""
+ setup
+ test1 1
+ test2 1
+ teardown
+ """)
+
+ def test_setup_exception(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.fixture(scope="module")
+ def arg1():
+ pytest.fail("setup")
+ yield 1
+ def test_1(arg1):
+ pass
+ """)
+ result = testdir.runpytest("-s")
+ result.stdout.fnmatch_lines("""
+ *pytest.fail*setup*
+ *1 error*
+ """)
+
+ def test_teardown_exception(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.fixture(scope="module")
+ def arg1():
+ yield 1
+ pytest.fail("teardown")
+ def test_1(arg1):
+ pass
+ """)
+ result = testdir.runpytest("-s")
+ result.stdout.fnmatch_lines("""
+ *pytest.fail*teardown*
+ *1 passed*1 error*
+ """)
+
+
+ def test_yields_more_than_one(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.fixture(scope="module")
+ def arg1():
+ yield 1
+ yield 2
+ def test_1(arg1):
+ pass
+ """)
+ result = testdir.runpytest("-s")
+ result.stdout.fnmatch_lines("""
+ *fixture function*
+ *test_yields*:2*
+ """)
+
+
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.
_______________________________________________
pytest-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pytest-commit