@@ -1271,6 +1271,52 @@ def test_easy_debugging(self):
12711271 self .assertIn (name , repr (state ))
12721272 self .assertIn (name , str (state ))
12731273
1274+ def test_getgeneratorlocals (self ):
1275+ def each (lst , a = None ):
1276+ b = (1 , 2 , 3 )
1277+ for v in lst :
1278+ if v == 3 :
1279+ c = 12
1280+ yield v
1281+
1282+ numbers = each ([1 , 2 , 3 ])
1283+ self .assertEqual (inspect .getgeneratorlocals (numbers ),
1284+ {'a' : None , 'lst' : [1 , 2 , 3 ]})
1285+ next (numbers )
1286+ self .assertEqual (inspect .getgeneratorlocals (numbers ),
1287+ {'a' : None , 'lst' : [1 , 2 , 3 ], 'v' : 1 ,
1288+ 'b' : (1 , 2 , 3 )})
1289+ next (numbers )
1290+ self .assertEqual (inspect .getgeneratorlocals (numbers ),
1291+ {'a' : None , 'lst' : [1 , 2 , 3 ], 'v' : 2 ,
1292+ 'b' : (1 , 2 , 3 )})
1293+ next (numbers )
1294+ self .assertEqual (inspect .getgeneratorlocals (numbers ),
1295+ {'a' : None , 'lst' : [1 , 2 , 3 ], 'v' : 3 ,
1296+ 'b' : (1 , 2 , 3 ), 'c' : 12 })
1297+ try :
1298+ next (numbers )
1299+ except StopIteration :
1300+ pass
1301+ self .assertEqual (inspect .getgeneratorlocals (numbers ), {})
1302+
1303+ def test_getgeneratorlocals_empty (self ):
1304+ def yield_one ():
1305+ yield 1
1306+ one = yield_one ()
1307+ self .assertEqual (inspect .getgeneratorlocals (one ), {})
1308+ try :
1309+ next (one )
1310+ except StopIteration :
1311+ pass
1312+ self .assertEqual (inspect .getgeneratorlocals (one ), {})
1313+
1314+ def test_getgeneratorlocals_error (self ):
1315+ self .assertRaises (TypeError , inspect .getgeneratorlocals , 1 )
1316+ self .assertRaises (TypeError , inspect .getgeneratorlocals , lambda x : True )
1317+ self .assertRaises (TypeError , inspect .getgeneratorlocals , set )
1318+ self .assertRaises (TypeError , inspect .getgeneratorlocals , (2 ,3 ))
1319+
12741320
12751321class TestSignatureObject (unittest .TestCase ):
12761322 @staticmethod
0 commit comments