The _warnings module did not properly handle cases where strings were not being

passed in as the message to use for a warning. Fixed along with making the code
more robust against other errors where return values were not checked.

Closes issue 3639.
Code review by Benjamin Peterson.
This commit is contained in:
Brett Cannon 2008-09-02 04:01:42 +00:00
parent ec92e181fb
commit 54bd41d81b
3 changed files with 25 additions and 5 deletions

View file

@ -202,6 +202,16 @@ class WarnTests(unittest.TestCase):
self.assertEqual(str(w.message), text)
self.assert_(w.category is UserWarning)
# Issue 3639
def test_warn_nonstandard_types(self):
# warn() should handle non-standard types without issue.
for ob in (Warning, None, 42):
with support.catch_warning(self.module) as w:
self.module.warn(ob)
# Don't directly compare objects since
# ``Warning() != Warning()``.
self.assertEquals(str(w.message), str(UserWarning(ob)))
def test_filename(self):
with warnings_state(self.module):
with support.catch_warning(self.module) as w:
@ -315,7 +325,6 @@ class WarnTests(unittest.TestCase):
self.module.warn_explicit,
None, Warning, None, 1, registry=42)
class CWarnTests(BaseTest, WarnTests):
module = c_warnings