Added test for previous crash on failed import fix

Also, rewrote the fix a bit.
ref #383.
This commit is contained in:
Virgil Dupras 2013-11-15 14:03:57 -05:00
parent ded88700a3
commit e118682db1
2 changed files with 23 additions and 6 deletions

View File

@ -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)

View File

@ -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):