@@ -265,6 +265,53 @@ def match(self, a):
265
265
self .module .warn_explicit (UserWarning ("b" ), None , "f.py" , 42 )
266
266
self .assertEqual (str (w [- 1 ].message ), "b" )
267
267
268
+ def test_filterwarnings_duplicate_filters (self ):
269
+ with original_warnings .catch_warnings (module = self .module ):
270
+ self .module .resetwarnings ()
271
+ self .module .filterwarnings ("error" , category = UserWarning )
272
+ self .assertEqual (len (self .module .filters ), 1 )
273
+ self .module .filterwarnings ("ignore" , category = UserWarning )
274
+ self .module .filterwarnings ("error" , category = UserWarning )
275
+ self .assertEqual (
276
+ len (self .module .filters ), 2 ,
277
+ "filterwarnings inserted duplicate filter"
278
+ )
279
+ self .assertEqual (
280
+ self .module .filters [0 ][0 ], "error" ,
281
+ "filterwarnings did not promote filter to "
282
+ "the beginning of list"
283
+ )
284
+
285
+ def test_simplefilter_duplicate_filters (self ):
286
+ with original_warnings .catch_warnings (module = self .module ):
287
+ self .module .resetwarnings ()
288
+ self .module .simplefilter ("error" , category = UserWarning )
289
+ self .assertEqual (len (self .module .filters ), 1 )
290
+ self .module .simplefilter ("ignore" , category = UserWarning )
291
+ self .module .simplefilter ("error" , category = UserWarning )
292
+ self .assertEqual (
293
+ len (self .module .filters ), 2 ,
294
+ "simplefilter inserted duplicate filter"
295
+ )
296
+ self .assertEqual (
297
+ self .module .filters [0 ][0 ], "error" ,
298
+ "simplefilter did not promote filter to the beginning of list"
299
+ )
300
+ def test_append_duplicate (self ):
301
+ with original_warnings .catch_warnings (module = self .module ,
302
+ record = True ) as w :
303
+ self .module .resetwarnings ()
304
+ self .module .simplefilter ("ignore" )
305
+ self .module .simplefilter ("error" , append = True )
306
+ self .module .simplefilter ("ignore" , append = True )
307
+ self .module .warn ("test_append_duplicate" , category = UserWarning )
308
+ self .assertEqual (len (self .module .filters ), 2 ,
309
+ "simplefilter inserted duplicate filter"
310
+ )
311
+ self .assertEqual (len (w ), 0 ,
312
+ "appended duplicate changed order of filters"
313
+ )
314
+
268
315
class CFilterTests (FilterTests , unittest .TestCase ):
269
316
module = c_warnings
270
317
0 commit comments