summaryrefslogtreecommitdiffstats
path: root/Lib/test/test___all__.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test___all__.py')
-rw-r--r--Lib/test/test___all__.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index cced859..875d99d 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -6,8 +6,22 @@ def check_all(modname):
try:
exec "import %s" % modname in names
except ImportError:
- # silent fail here seems the best route since some modules
- # may not be available in all environments
+ # Silent fail here seems the best route since some modules
+ # 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
verify(hasattr(sys.modules[modname], "__all__"),
"%s has no __all__ attribute" % modname)