[Python-Dev] Failing tests: marshal, warnings

Greg Ward gward at python.net
Mon Mar 7 01:56:23 CET 2005


On 06 March 2005, I said:
> OK, I've narrowed it down: test_warnings fails when run after
> test_descr:

Raymond Hettinger, step right up!  You're the next contestant on The
Tests Are Failing!  Your recent checkins include...

  working file: Lib/test/test_descr.py; sticky tag: release24-maint
  revision: 1.202.2.1
  date: 2005/03/03 16:55:53;  author: rhettinger;  lines: +13 -0
  SF bug #1155938: Missing None check for __init__().
  ----------------------------
  revision: 1.202.2.2
  date: 2005/03/04 04:47:04;  author: rhettinger;  lines: +7 -1
  Convert "__init__ should return None" from an exception to a warning.

If I revert test_descr.py to 1.202 (the branch point for 2.4), then
running

  ./python -E Lib/test/regrtest.py test_descr test_warnings

works just fine.  If I revert to 1.202.2.1, then test_descr fails, but
test_warnings passes.  If I update to the latest, 1.202.2.2, then
test_desc passes, but test_warnings fails.

[...a few minutes of tinkering and reading up on warning filters...]

A-ha!  I get it.  There are two mistakes in test_descr.py:test_init():
lack of "finally" clause, and failure to make a copy of
warnings.filters.  This patch fixes both:

"""
--- Lib/test/test_descr.py      4 Mar 2005 04:47:04 -0000       1.202.2.2
+++ Lib/test/test_descr.py      7 Mar 2005 00:54:00 -0000
@@ -3973,15 +3973,18 @@
         def __init__(self):
             return 10

-    oldfilters = warnings.filters
-    warnings.filterwarnings("error", category=RuntimeWarning)
+    oldfilters = warnings.filters[:]
     try:
-        Foo()
-    except RuntimeWarning:
         pass
-    else:
-        raise TestFailed, "did not test __init__() for None return"
-    warnings.filters = oldfilters
+        warnings.filterwarnings("error", category=RuntimeWarning)
+        try:
+            Foo()
+        except RuntimeWarning:
+            pass
+        else:
+            raise TestFailed, "did not test __init__() for None return"
+    finally:
+        warnings.filters = oldfilters


 def test_main():
"""

I'll check this in and merge to the trunk once I see all tests passing.

        Greg
-- 
Greg Ward <gward at python.net>                         http://www.gerg.ca/
I hope something GOOD came in the mail today so I have a REASON to live!!


More information about the Python-Dev mailing list