diff --git a/py/_test/pluginmanager.py b/py/_test/pluginmanager.py index d1b673421..8b90c8b1c 100644 --- a/py/_test/pluginmanager.py +++ b/py/_test/pluginmanager.py @@ -140,6 +140,13 @@ class PluginManager(object): except py.test.skip.Exception: e = py.std.sys.exc_info()[1] self._hints.append("skipped plugin %r: %s" %((modname, e.msg))) + except ImportError: + e = py.std.sys.exc_info()[1] + if "zlib" in str(e) and modname == "pytest_genscript": + self._hints.append("skipped plugin %r: failed to import %r" %( + (modname, str(e)))) + else: + raise else: check_old_use(mod, modname) self.register(mod) diff --git a/testing/plugin/test_pytest_genscript.py b/testing/plugin/test_pytest_genscript.py index c421460fc..2f657fb95 100644 --- a/testing/plugin/test_pytest_genscript.py +++ b/testing/plugin/test_pytest_genscript.py @@ -37,3 +37,4 @@ def test_rundist(testdir, pytestconfig, standalone): result.stdout.fnmatch_lines([ "*1 passed*", ]) + diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index 425333768..f903e7e94 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -489,3 +489,29 @@ class TestHookRelay: res = mcm.hello(arg=3) assert res == 4 +def test_pluginmanager_import_error_zlib(testdir): + p = testdir.makepyfile(""" + try: + import builtins + except ImportError: + import __builtin__ as builtins + oldimport = builtins.__import__ + + def import_(name, *args): + #print "import", name, "start" + if name == "zlib": + raise ImportError("zlib") + mod = oldimport(name, *args) + #print "import", name, "successful" + return mod + + if __name__ == "__main__": + builtins.__import__ = import_ + import py + py.test.cmdline.main(["--traceconfig"]) + """) + result = testdir.runpython(p) + result.stdout.fnmatch_lines([ + "*skipped plugin*genscript*import*zlib*", + ]) +