diff options
author | Martin Panter <vadmium+py@gmail.com> | 2016-05-26 09:10:55 (GMT) |
---|---|---|
committer | Martin Panter <vadmium+py@gmail.com> | 2016-05-26 09:10:55 (GMT) |
commit | 43593a1892b73754e509713799a043ac756ae1e1 (patch) | |
tree | 1f4a2dbb7b86019c9dacc445e25877ce4a5bc8df /Lib/test/test_warnings | |
parent | 46f50726a0047ae81d478c3a206f587b8f35ed08 (diff) | |
download | cpython-43593a1892b73754e509713799a043ac756ae1e1.zip cpython-43593a1892b73754e509713799a043ac756ae1e1.tar.gz cpython-43593a1892b73754e509713799a043ac756ae1e1.tar.bz2 |
Issue #18383: Avoid adding duplicate filters when warnings is reloaded
Based on patch by Alex Shkop.
Diffstat (limited to 'Lib/test/test_warnings')
-rw-r--r-- | Lib/test/test_warnings/__init__.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index fffadad..712f9cd 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -265,6 +265,53 @@ class FilterTests(BaseTest): self.module.warn_explicit(UserWarning("b"), None, "f.py", 42) self.assertEqual(str(w[-1].message), "b") + def test_filterwarnings_duplicate_filters(self): + with original_warnings.catch_warnings(module=self.module): + self.module.resetwarnings() + self.module.filterwarnings("error", category=UserWarning) + self.assertEqual(len(self.module.filters), 1) + self.module.filterwarnings("ignore", category=UserWarning) + self.module.filterwarnings("error", category=UserWarning) + self.assertEqual( + len(self.module.filters), 2, + "filterwarnings inserted duplicate filter" + ) + self.assertEqual( + self.module.filters[0][0], "error", + "filterwarnings did not promote filter to " + "the beginning of list" + ) + + def test_simplefilter_duplicate_filters(self): + with original_warnings.catch_warnings(module=self.module): + self.module.resetwarnings() + self.module.simplefilter("error", category=UserWarning) + self.assertEqual(len(self.module.filters), 1) + self.module.simplefilter("ignore", category=UserWarning) + self.module.simplefilter("error", category=UserWarning) + self.assertEqual( + len(self.module.filters), 2, + "simplefilter inserted duplicate filter" + ) + self.assertEqual( + self.module.filters[0][0], "error", + "simplefilter did not promote filter to the beginning of list" + ) + def test_append_duplicate(self): + with original_warnings.catch_warnings(module=self.module, + record=True) as w: + self.module.resetwarnings() + self.module.simplefilter("ignore") + self.module.simplefilter("error", append=True) + self.module.simplefilter("ignore", append=True) + self.module.warn("test_append_duplicate", category=UserWarning) + self.assertEqual(len(self.module.filters), 2, + "simplefilter inserted duplicate filter" + ) + self.assertEqual(len(w), 0, + "appended duplicate changed order of filters" + ) + class CFilterTests(FilterTests, unittest.TestCase): module = c_warnings |