[Pytest-commit] commit/pytest: hpk42: fix ordering when mock.patch or other standard decorator-wrappings
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Tue Nov 19 23:22:39 CET 2013
1 new commit in pytest:
https://bitbucket.org/hpk42/pytest/commits/f0e54be5f8ea/
Changeset: f0e54be5f8ea
User: hpk42
Date: 2013-11-19 23:22:27
Summary: fix ordering when mock.patch or other standard decorator-wrappings
are used with test methods. This fixues issue346. Thanks to
Ronny Pfannschmidt and Donald Stufft for helping to isolate it.
Affected #: 4 files
diff -r 282e0cca851c58e64ddaeeb56907f4376927ac13 -r f0e54be5f8eacf91a33361dd2772a2cfe5a1289f CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,10 @@
Unreleased
-----------------------------------
+- fix ordering when mock.patch or other standard decorator-wrappings
+ are used with test methods. This fixues issue346. Thanks to
+ Ronny Pfannschmidt and Donald Stufft for helping to isolate it.
+
- fix issue384 by removing the trial support code
since the unittest compat enhancements allow
trial to handle it on its own
diff -r 282e0cca851c58e64ddaeeb56907f4376927ac13 -r f0e54be5f8eacf91a33361dd2772a2cfe5a1289f _pytest/main.py
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -697,11 +697,4 @@
yield x
node.ihook.pytest_collectreport(report=rep)
-def getfslineno(obj):
- # xxx let decorators etc specify a sane ordering
- if hasattr(obj, 'place_as'):
- obj = obj.place_as
- fslineno = py.code.getfslineno(obj)
- assert isinstance(fslineno[1], int), obj
- return fslineno
diff -r 282e0cca851c58e64ddaeeb56907f4376927ac13 -r f0e54be5f8eacf91a33361dd2772a2cfe5a1289f _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -3,7 +3,6 @@
import inspect
import sys
import pytest
-from _pytest.main import getfslineno
from _pytest.mark import MarkDecorator
from _pytest.monkeypatch import monkeypatch
from py._code.code import TerminalRepr
@@ -15,6 +14,16 @@
callable = py.builtin.callable
+def getfslineno(obj):
+ # xxx let decorators etc specify a sane ordering
+ while hasattr(obj, "__wrapped__"):
+ obj = obj.__wrapped__
+ if hasattr(obj, 'place_as'):
+ obj = obj.place_as
+ fslineno = py.code.getfslineno(obj)
+ assert isinstance(fslineno[1], int), obj
+ return fslineno
+
def getimfunc(func):
try:
return func.__func__
diff -r 282e0cca851c58e64ddaeeb56907f4376927ac13 -r f0e54be5f8eacf91a33361dd2772a2cfe5a1289f testing/python/integration.py
--- a/testing/python/integration.py
+++ b/testing/python/integration.py
@@ -1,5 +1,6 @@
import pytest
from _pytest import runner
+from _pytest import python
class TestOEJSKITSpecials:
def test_funcarg_non_pycollectobj(self, testdir): # rough jstests usage
@@ -55,6 +56,20 @@
assert not clscol.funcargs
+def test_wrapped_getfslineno():
+ def func():
+ pass
+ def wrap(f):
+ func.__wrapped__ = f
+ func.patchings = ["qwe"]
+ return func
+ @wrap
+ def wrapped_func(x, y, z):
+ pass
+ fs, lineno = python.getfslineno(wrapped_func)
+ fs2, lineno2 = python.getfslineno(wrap)
+ assert lineno > lineno2, "getfslineno does not unwrap correctly"
+
class TestMockDecoration:
def test_wrapped_getfuncargnames(self):
from _pytest.python import getfuncargnames
@@ -119,6 +134,28 @@
reprec = testdir.inline_run()
reprec.assertoutcome(passed=2)
+ def test_mock_sorting(self, testdir):
+ pytest.importorskip("mock", "1.0.1")
+ testdir.makepyfile("""
+ import os
+ import mock
+
+ @mock.patch("os.path.abspath")
+ def test_one(abspath):
+ pass
+ @mock.patch("os.path.abspath")
+ def test_two(abspath):
+ pass
+ @mock.patch("os.path.abspath")
+ def test_three(abspath):
+ pass
+ """)
+ reprec = testdir.inline_run()
+ calls = reprec.getreports("pytest_runtest_logreport")
+ calls = [x for x in calls if x.when == "call"]
+ names = [x.nodeid.split("::")[-1] for x in calls]
+ assert names == ["test_one", "test_two", "test_three"]
+
class TestReRunTests:
def test_rerun(self, testdir):
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