]> granicus.if.org Git - python/commitdiff
test_pty started failing on Windows, but if and only if test___all__ was
authorTim Peters <tim.peters@gmail.com>
Mon, 12 Feb 2001 03:27:31 +0000 (03:27 +0000)
committerTim Peters <tim.peters@gmail.com>
Mon, 12 Feb 2001 03:27:31 +0000 (03:27 +0000)
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.

Lib/test/test___all__.py

index cced8592c447b8de168c75908fe50bf2197fbfe1..875d99d7444f9fcfb01d461d73479c72c647d5f3 100644 (file)
@@ -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)