Commit 76c066b1 authored by Tim Peters's avatar Tim Peters

test_pty started failing on Windows, but if and only if test___all__ was

run first.  Indirectly due to Skip adding check_all("pty") to test___all__:
that caused the expected ImportError due to pty.py trying to import the
non-existent FCNTL to get handled by test___all__, leaving a partial
module object for pty in sys.modules, which caused the later import of
pty via test_pty to succeed.  Then test_tpy died with an AttributeError,
due to trying to access attributes of pty that didn't exist.  regrtest
viewed that as a failure rather than the appropriate "test skipped".
Fixed by deleting partial module objects in test___all__ when test___all__
handles an ImportError.
parent c62c81e0
...@@ -6,8 +6,22 @@ def check_all(modname): ...@@ -6,8 +6,22 @@ def check_all(modname):
try: try:
exec "import %s" % modname in names exec "import %s" % modname in names
except ImportError: except ImportError:
# silent fail here seems the best route since some modules # Silent fail here seems the best route since some modules
# may not be available in all environments # may not be available in all environments.
# Since an ImportError may leave a partial module object in
# sys.modules, get rid of that first. Here's what happens if
# you don't: importing pty fails on Windows because pty tries to
# import FCNTL, which doesn't exist. That raises an ImportError,
# caught here. It also leaves a partial pty module in sys.modules.
# So when test_pty is called later, the import of pty succeeds,
# but shouldn't. As a result, test_pty crashes with an
# AtttributeError instead of an ImportError, and regrtest interprets
# the latter as a test failure (ImportError is treated as "test
# skipped" -- which is what test_pty should say on Windows).
try:
del sys.modules[modname]
except KeyError:
pass
return return
verify(hasattr(sys.modules[modname], "__all__"), verify(hasattr(sys.modules[modname], "__all__"),
"%s has no __all__ attribute" % modname) "%s has no __all__ attribute" % modname)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment