1 new commit in pytest:

https://bitbucket.org/pytest-dev/pytest/commits/c42b1e36a89a/
Changeset:   c42b1e36a89a
Branch:      parametrized-fixture-override
User:        bubenkoff
Date:        2015-03-01 12:54:43+00:00
Summary:     allow to override parametrized fixtures with non-parametrized ones 
and vice versa
Affected #:  5 files

diff -r 163964f4f0f48204f9f42d080778f23d6673f0b0 -r 
c42b1e36a89affdbc168833652f659025a8bc5b6 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,10 +1,10 @@
 2.7.0.dev (compared to 2.6.4)
 -----------------------------
 
-- fix issue616: conftest.py files and their contained fixutres are now 
+- fix issue616: conftest.py files and their contained fixutres are now
   properly considered for visibility, independently from the exact
   current working directory and test arguments that are used.
-  Many thanks to Eric Siegerman and his PR235 which contains 
+  Many thanks to Eric Siegerman and his PR235 which contains
   systematic tests for conftest visibility and now passes.
   This change also introduces the concept of a ``rootdir`` which
   is printed as a new pytest header and documented in the pytest
@@ -12,7 +12,7 @@
 
 - change reporting of "diverted" tests, i.e. tests that are collected
   in one file but actually come from another (e.g. when tests in a test class
-  come from a base class in a different file).  We now show the nodeid 
+  come from a base class in a different file).  We now show the nodeid
   and indicate via a postfix the other file.
 
 - add ability to set command line options by environment variable 
PYTEST_ADDOPTS.
@@ -24,7 +24,7 @@
 - fix issue650: new option ``--docttest-ignore-import-errors`` which
   will turn import errors in doctests into skips.  Thanks Charles Cloud
   for the complete PR.
-  
+
 - fix issue655: work around different ways that cause python2/3
   to leak sys.exc_info into fixtures/tests causing failures in 3rd party code
 
@@ -55,6 +55,7 @@
 - "python_classes" and "python_functions" options now support glob-patterns
  for test discovery, as discussed in issue600. Thanks Ldiary Translations.
 
+- allow to override parametrized fixtures with non-parametrized ones and vice 
versa (bubenkoff).
 
 2.6.4
 ----------

diff -r 163964f4f0f48204f9f42d080778f23d6673f0b0 -r 
c42b1e36a89affdbc168833652f659025a8bc5b6 Makefile
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,13 @@
+# create virtual environment
+PYTHON = python2.7
+
+.env:
+       virtualenv .env -p $(PYTHON)
+
+# install all needed for development
+develop: .env
+       .env/bin/pip install -e .[test] tox
+
+# clean the development envrironment
+clean:
+       -rm -rf .env

diff -r 163964f4f0f48204f9f42d080778f23d6673f0b0 -r 
c42b1e36a89affdbc168833652f659025a8bc5b6 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -1714,7 +1714,7 @@
             faclist = metafunc._arg2fixturedefs.get(argname)
             if faclist is None:
                 continue # will raise FixtureLookupError at setup time
-            for fixturedef in faclist:
+            for fixturedef in faclist[-1:]:
                 if fixturedef.params is not None:
                     metafunc.parametrize(argname, fixturedef.params,
                                          indirect=True, scope=fixturedef.scope,

diff -r 163964f4f0f48204f9f42d080778f23d6673f0b0 -r 
c42b1e36a89affdbc168833652f659025a8bc5b6 setup.py
--- a/setup.py
+++ b/setup.py
@@ -13,7 +13,8 @@
               ('Programming Language :: Python :: %s' % x) for x in
                   '2 2.6 2.7 3 3.2 3.3 3.4'.split()]
 
-long_description = open('README.rst').read()
+with open('README.rst') as fd:
+    long_description = fd.read()
 
 
 def main():

diff -r 163964f4f0f48204f9f42d080778f23d6673f0b0 -r 
c42b1e36a89affdbc168833652f659025a8bc5b6 testing/python/fixture.py
--- a/testing/python/fixture.py
+++ b/testing/python/fixture.py
@@ -226,6 +226,114 @@
         result = testdir.runpytest()
         assert result.ret == 0
 
+    def test_override_parametrized_fixture_conftest_module(self, testdir):
+        """Test override of the parametrized fixture with non-parametrized one 
on the test module level."""
+        testdir.makeconftest("""
+            import pytest
+
+            @pytest.fixture(params=[1, 2, 3])
+            def spam(request):
+                return request.param
+        """)
+        testfile = testdir.makepyfile("""
+            import pytest
+
+            @pytest.fixture
+            def spam():
+                return 'spam'
+
+            def test_spam(spam):
+                assert spam == 'spam'
+        """)
+        result = testdir.runpytest()
+        result.stdout.fnmatch_lines(["*1 passed*"])
+        result = testdir.runpytest(testfile)
+        result.stdout.fnmatch_lines(["*1 passed*"])
+
+    def test_override_parametrized_fixture_conftest_conftest(self, testdir):
+        """Test override of the parametrized fixture with non-parametrized one 
on the conftest level."""
+        testdir.makeconftest("""
+            import pytest
+
+            @pytest.fixture(params=[1, 2, 3])
+            def spam(request):
+                return request.param
+        """)
+        subdir = testdir.mkpydir('subdir')
+        subdir.join("conftest.py").write(py.code.Source("""
+            import pytest
+
+            @pytest.fixture
+            def spam():
+                return 'spam'
+        """))
+        testfile = subdir.join("test_spam.py")
+        testfile.write(py.code.Source("""
+            def test_spam(spam):
+                assert spam == "spam"
+        """))
+        result = testdir.runpytest()
+        result.stdout.fnmatch_lines(["*1 passed*"])
+        result = testdir.runpytest(testfile)
+        result.stdout.fnmatch_lines(["*1 passed*"])
+
+    def test_override_non_parametrized_fixture_conftest_module(self, testdir):
+        """Test override of the non-parametrized fixture with parametrized one 
on the test module level."""
+        testdir.makeconftest("""
+            import pytest
+
+            @pytest.fixture
+            def spam():
+                return 'spam'
+        """)
+        testfile = testdir.makepyfile("""
+            import pytest
+
+            @pytest.fixture(params=[1, 2, 3])
+            def spam(request):
+                return request.param
+
+            params = {'spam': 1}
+
+            def test_spam(spam):
+                assert spam == params['spam']
+                params['spam'] += 1
+        """)
+        result = testdir.runpytest()
+        result.stdout.fnmatch_lines(["*3 passed*"])
+        result = testdir.runpytest(testfile)
+        result.stdout.fnmatch_lines(["*3 passed*"])
+
+    def test_override_non_parametrized_fixture_conftest_conftest(self, 
testdir):
+        """Test override of the non-parametrized fixture with parametrized one 
on the conftest level."""
+        testdir.makeconftest("""
+            import pytest
+
+            @pytest.fixture
+            def spam():
+                return 'spam'
+        """)
+        subdir = testdir.mkpydir('subdir')
+        subdir.join("conftest.py").write(py.code.Source("""
+            import pytest
+
+            @pytest.fixture(params=[1, 2, 3])
+            def spam(request):
+                return request.param
+        """))
+        testfile = subdir.join("test_spam.py")
+        testfile.write(py.code.Source("""
+            params = {'spam': 1}
+
+            def test_spam(spam):
+                assert spam == params['spam']
+                params['spam'] += 1
+        """))
+        result = testdir.runpytest()
+        result.stdout.fnmatch_lines(["*3 passed*"])
+        result = testdir.runpytest(testfile)
+        result.stdout.fnmatch_lines(["*3 passed*"])
+
     def test_autouse_fixture_plugin(self, testdir):
         # A fixture from a plugin has no baseid set, which screwed up
         # the autouse fixture handling.

Repository URL: https://bitbucket.org/pytest-dev/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
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to