Added test for previous crash on failed import fix
Also, rewrote the fix a bit. ref #383.
This commit is contained in:
parent
ded88700a3
commit
e118682db1
|
@ -56,13 +56,12 @@ class AssertionRewritingHook(object):
|
||||||
names = name.rsplit(".", 1)
|
names = name.rsplit(".", 1)
|
||||||
lastname = names[-1]
|
lastname = names[-1]
|
||||||
pth = None
|
pth = None
|
||||||
if path is not None and len(path) == 1:
|
if path is not None:
|
||||||
try:
|
# Starting with Python 3.3, path is a _NamespacePath(), which
|
||||||
|
# causes problems if not converted to list.
|
||||||
|
path = list(path)
|
||||||
|
if len(path) == 1:
|
||||||
pth = path[0]
|
pth = path[0]
|
||||||
except TypeError:
|
|
||||||
# Starting with Python 3.3, `path` started being unsubscriptable, we have to wrap it
|
|
||||||
# in a list.
|
|
||||||
pth = list(path)[0]
|
|
||||||
if pth is None:
|
if pth is None:
|
||||||
try:
|
try:
|
||||||
fd, fn, desc = imp.find_module(lastname, path)
|
fd, fn, desc = imp.find_module(lastname, path)
|
||||||
|
|
|
@ -308,6 +308,24 @@ class TestGeneralUsage:
|
||||||
])
|
])
|
||||||
assert result.ret == 4 # usage error only if item not found
|
assert result.ret == 4 # usage error only if item not found
|
||||||
|
|
||||||
|
def test_namespace_import_doesnt_confuse_import_hook(self, testdir):
|
||||||
|
# Ref #383. Python 3.3's namespace package messed with our import hooks
|
||||||
|
# Importing a module that didn't exist, even if the ImportError was
|
||||||
|
# gracefully handled, would make our test crash.
|
||||||
|
testdir.mkdir('not_a_package')
|
||||||
|
p = testdir.makepyfile("""
|
||||||
|
try:
|
||||||
|
from not_a_package import doesnt_exist
|
||||||
|
except ImportError:
|
||||||
|
# We handle the import error gracefully here
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_whatever():
|
||||||
|
pass
|
||||||
|
""")
|
||||||
|
res = testdir.runpytest(p.basename)
|
||||||
|
assert res.ret == 0
|
||||||
|
|
||||||
|
|
||||||
class TestInvocationVariants:
|
class TestInvocationVariants:
|
||||||
def test_earlyinit(self, testdir):
|
def test_earlyinit(self, testdir):
|
||||||
|
|
Loading…
Reference in New Issue