merge fix of issue553 on pytest-2.7

This commit is contained in:
holger krekel 2015-04-17 22:32:49 +02:00
commit bac1ccd5b3
3 changed files with 34 additions and 7 deletions

View File

@ -5,6 +5,11 @@
2.7.1.dev (compared to 2.7.0)
-----------------------------
- fix issue553: properly handling inspect.getsourcelines failures in
FixtureLookupError which would lead to to an internal error,
obfuscating the original problem. Thanks talljosh for initial
diagnose/patch and Bruno Oliveira for final patch.
- fix issue660: properly report scope-mismatch-access errors
independently from ordering of fixture arguments. Also
avoid the pytest internal traceback which does not provide

View File

@ -1537,13 +1537,18 @@ class FixtureLookupError(LookupError):
# it at the requesting side
for function in stack:
fspath, lineno = getfslineno(function)
lines, _ = inspect.getsourcelines(function)
addline("file %s, line %s" % (fspath, lineno+1))
for i, line in enumerate(lines):
line = line.rstrip()
addline(" " + line)
if line.lstrip().startswith('def'):
break
try:
lines, _ = inspect.getsourcelines(function)
except IOError:
error_msg = "file %s, line %s: source code not available"
addline(error_msg % (fspath, lineno+1))
else:
addline("file %s, line %s" % (fspath, lineno+1))
for i, line in enumerate(lines):
line = line.rstrip()
addline(" " + line)
if line.lstrip().startswith('def'):
break
if msg is None:
fm = self.request._fixturemanager

View File

@ -353,6 +353,23 @@ class TestGeneralUsage:
*unrecognized*
""")
def test_getsourcelines_error_issue553(self, testdir):
p = testdir.makepyfile("""
def raise_error(obj):
raise IOError('source code not available')
import inspect
inspect.getsourcelines = raise_error
def test_foo(invalid_fixture):
pass
""")
res = testdir.runpytest(p)
res.stdout.fnmatch_lines([
"*source code not available*",
"*fixture 'invalid_fixture' not found",
])
class TestInvocationVariants:
def test_earlyinit(self, testdir):