@@ -1436,18 +1436,40 @@ def test_nonexistent_file(self):
14361436
14371437 def test_resource_warnings_not_exhausted (self ):
14381438 # Not exhausting the iterator still closes the underlying file (bpo-43292)
1439+ # Not closing before del should emit ResourceWarning
14391440 it = ET .iterparse (SIMPLE_XMLFILE )
14401441 with warnings_helper .check_no_resource_warning (self ):
1442+ it .close ()
1443+ del it
1444+ gc_collect ()
1445+
1446+ it = ET .iterparse (SIMPLE_XMLFILE )
1447+ with self .assertWarns (ResourceWarning ) as wm :
14411448 del it
14421449 gc_collect ()
1450+ # Not 'unclosed file'.
1451+ self .assertIn ('unclosed iterparse iterator' , str (wm .warning ))
1452+ self .assertIn (repr (SIMPLE_XMLFILE ), str (wm .warning ))
1453+ self .assertEqual (wm .filename , __file__ )
14431454
14441455 it = ET .iterparse (SIMPLE_XMLFILE )
14451456 with warnings_helper .check_no_resource_warning (self ):
14461457 action , elem = next (it )
1458+ it .close ()
14471459 self .assertEqual ((action , elem .tag ), ('end' , 'element' ))
14481460 del it , elem
14491461 gc_collect ()
14501462
1463+ it = ET .iterparse (SIMPLE_XMLFILE )
1464+ with self .assertWarns (ResourceWarning ) as wm :
1465+ action , elem = next (it )
1466+ self .assertEqual ((action , elem .tag ), ('end' , 'element' ))
1467+ del it , elem
1468+ gc_collect ()
1469+ self .assertIn ('unclosed iterparse iterator' , str (wm .warning ))
1470+ self .assertIn (repr (SIMPLE_XMLFILE ), str (wm .warning ))
1471+ self .assertEqual (wm .filename , __file__ )
1472+
14511473 def test_resource_warnings_failed_iteration (self ):
14521474 self .addCleanup (os_helper .unlink , TESTFN )
14531475 with open (TESTFN , "wb" ) as f :
@@ -1461,15 +1483,40 @@ def test_resource_warnings_failed_iteration(self):
14611483 next (it )
14621484 self .assertEqual (str (cm .exception ),
14631485 'junk after document element: line 1, column 12' )
1486+ it .close ()
14641487 del cm , it
14651488 gc_collect ()
14661489
1490+ it = ET .iterparse (TESTFN )
1491+ action , elem = next (it )
1492+ self .assertEqual ((action , elem .tag ), ('end' , 'document' ))
1493+ with self .assertWarns (ResourceWarning ) as wm :
1494+ with self .assertRaises (ET .ParseError ) as cm :
1495+ next (it )
1496+ self .assertEqual (str (cm .exception ),
1497+ 'junk after document element: line 1, column 12' )
1498+ del cm , it
1499+ gc_collect ()
1500+ self .assertIn ('unclosed iterparse iterator' , str (wm .warning ))
1501+ self .assertIn (repr (TESTFN ), str (wm .warning ))
1502+ self .assertEqual (wm .filename , __file__ )
1503+
14671504 def test_resource_warnings_exhausted (self ):
14681505 it = ET .iterparse (SIMPLE_XMLFILE )
14691506 with warnings_helper .check_no_resource_warning (self ):
1507+ list (it )
1508+ it .close ()
1509+ del it
1510+ gc_collect ()
1511+
1512+ it = ET .iterparse (SIMPLE_XMLFILE )
1513+ with self .assertWarns (ResourceWarning ) as wm :
14701514 list (it )
14711515 del it
14721516 gc_collect ()
1517+ self .assertIn ('unclosed iterparse iterator' , str (wm .warning ))
1518+ self .assertIn (repr (SIMPLE_XMLFILE ), str (wm .warning ))
1519+ self .assertEqual (wm .filename , __file__ )
14731520
14741521 def test_close_not_exhausted (self ):
14751522 iterparse = ET .iterparse
0 commit comments