77from test import support
88from test .support .script_helper import assert_python_ok , assert_python_failure
99
10- from test import warning_tests
10+ from test . test_warnings . data import stacklevel as warning_tests
1111
1212import warnings as original_warnings
1313
@@ -188,11 +188,11 @@ def test_once(self):
188188 self .module .resetwarnings ()
189189 self .module .filterwarnings ("once" , category = UserWarning )
190190 message = UserWarning ("FilterTests.test_once" )
191- self .module .warn_explicit (message , UserWarning , "test_warnings .py" ,
191+ self .module .warn_explicit (message , UserWarning , "__init__ .py" ,
192192 42 )
193193 self .assertEqual (w [- 1 ].message , message )
194194 del w [:]
195- self .module .warn_explicit (message , UserWarning , "test_warnings .py" ,
195+ self .module .warn_explicit (message , UserWarning , "__init__ .py" ,
196196 13 )
197197 self .assertEqual (len (w ), 0 )
198198 self .module .warn_explicit (message , UserWarning , "test_warnings2.py" ,
@@ -298,10 +298,10 @@ def test_filename(self):
298298 module = self .module ) as w :
299299 warning_tests .inner ("spam1" )
300300 self .assertEqual (os .path .basename (w [- 1 ].filename ),
301- "warning_tests .py" )
301+ "stacklevel .py" )
302302 warning_tests .outer ("spam2" )
303303 self .assertEqual (os .path .basename (w [- 1 ].filename ),
304- "warning_tests .py" )
304+ "stacklevel .py" )
305305
306306 def test_stacklevel (self ):
307307 # Test stacklevel argument
@@ -311,25 +311,36 @@ def test_stacklevel(self):
311311 module = self .module ) as w :
312312 warning_tests .inner ("spam3" , stacklevel = 1 )
313313 self .assertEqual (os .path .basename (w [- 1 ].filename ),
314- "warning_tests .py" )
314+ "stacklevel .py" )
315315 warning_tests .outer ("spam4" , stacklevel = 1 )
316316 self .assertEqual (os .path .basename (w [- 1 ].filename ),
317- "warning_tests .py" )
317+ "stacklevel .py" )
318318
319319 warning_tests .inner ("spam5" , stacklevel = 2 )
320320 self .assertEqual (os .path .basename (w [- 1 ].filename ),
321- "test_warnings .py" )
321+ "__init__ .py" )
322322 warning_tests .outer ("spam6" , stacklevel = 2 )
323323 self .assertEqual (os .path .basename (w [- 1 ].filename ),
324- "warning_tests .py" )
324+ "stacklevel .py" )
325325 warning_tests .outer ("spam6.5" , stacklevel = 3 )
326326 self .assertEqual (os .path .basename (w [- 1 ].filename ),
327- "test_warnings .py" )
327+ "__init__ .py" )
328328
329329 warning_tests .inner ("spam7" , stacklevel = 9999 )
330330 self .assertEqual (os .path .basename (w [- 1 ].filename ),
331331 "sys" )
332332
333+ def test_stacklevel_import (self ):
334+ # Issue #24305: With stacklevel=2, module-level warnings should work.
335+ support .unload ('test.test_warnings.data.import_warning' )
336+ with warnings_state (self .module ):
337+ with original_warnings .catch_warnings (record = True ,
338+ module = self .module ) as w :
339+ self .module .simplefilter ('always' )
340+ import test .test_warnings .data .import_warning
341+ self .assertEqual (len (w ), 1 )
342+ self .assertEqual (w [0 ].filename , __file__ )
343+
333344 def test_missing_filename_not_main (self ):
334345 # If __file__ is not specified and __main__ is not the module name,
335346 # then __file__ should be set to the module name.
0 commit comments