@@ -1356,78 +1356,6 @@ def {funcname}():
1356
1356
with self .assertRaises (interpreters .NotShareableError ):
1357
1357
interp .call (defs .spam_returns_arg , arg )
1358
1358
1359
- def test_globals_from_builtins (self ):
1360
- # The builtins exec(), eval(), globals(), locals(), vars(),
1361
- # and dir() each runs relative to the target interpreter's
1362
- # __main__ module, when called directly. However,
1363
- # globals(), locals(), and vars() don't work when called
1364
- # directly so we don't check them.
1365
- from _frozen_importlib import BuiltinImporter
1366
- interp = interpreters .create ()
1367
-
1368
- names = interp .call (dir )
1369
- self .assertEqual (names , [
1370
- '__builtins__' ,
1371
- '__doc__' ,
1372
- '__loader__' ,
1373
- '__name__' ,
1374
- '__package__' ,
1375
- '__spec__' ,
1376
- ])
1377
-
1378
- values = {name : interp .call (eval , name )
1379
- for name in names if name != '__builtins__' }
1380
- self .assertEqual (values , {
1381
- '__name__' : '__main__' ,
1382
- '__doc__' : None ,
1383
- '__spec__' : None , # It wasn't imported, so no module spec?
1384
- '__package__' : None ,
1385
- '__loader__' : BuiltinImporter ,
1386
- })
1387
- with self .assertRaises (ExecutionFailed ):
1388
- interp .call (eval , 'spam' ),
1389
-
1390
- interp .call (exec , f'assert dir() == { names } ' )
1391
-
1392
- # Update the interpreter's __main__.
1393
- interp .prepare_main (spam = 42 )
1394
- expected = names + ['spam' ]
1395
-
1396
- names = interp .call (dir )
1397
- self .assertEqual (names , expected )
1398
-
1399
- value = interp .call (eval , 'spam' )
1400
- self .assertEqual (value , 42 )
1401
-
1402
- interp .call (exec , f'assert dir() == { expected } , dir()' )
1403
-
1404
- def test_globals_from_stateless_func (self ):
1405
- # A stateless func, which doesn't depend on any globals,
1406
- # doesn't go through pickle, so it runs in __main__.
1407
- def set_global (name , value ):
1408
- globals ()[name ] = value
1409
-
1410
- def get_global (name ):
1411
- return globals ().get (name )
1412
-
1413
- interp = interpreters .create ()
1414
-
1415
- modname = interp .call (get_global , '__name__' )
1416
- self .assertEqual (modname , '__main__' )
1417
-
1418
- res = interp .call (get_global , 'spam' )
1419
- self .assertIsNone (res )
1420
-
1421
- interp .exec ('spam = True' )
1422
- res = interp .call (get_global , 'spam' )
1423
- self .assertTrue (res )
1424
-
1425
- interp .call (set_global , 'spam' , 42 )
1426
- res = interp .call (get_global , 'spam' )
1427
- self .assertEqual (res , 42 )
1428
-
1429
- interp .exec ('assert spam == 42, repr(spam)' )
1430
-
1431
1359
def test_raises (self ):
1432
1360
interp = interpreters .create ()
1433
1361
with self .assertRaises (ExecutionFailed ):
@@ -1521,6 +1449,78 @@ def test_callable_requires_frame(self):
1521
1449
self .assertIsInstance (res , expectedtype )
1522
1450
self .assertIn ('__builtins__' , res )
1523
1451
1452
+ def test_globals_from_builtins (self ):
1453
+ # The builtins exec(), eval(), globals(), locals(), vars(),
1454
+ # and dir() each runs relative to the target interpreter's
1455
+ # __main__ module, when called directly. However,
1456
+ # globals(), locals(), and vars() don't work when called
1457
+ # directly so we don't check them.
1458
+ from _frozen_importlib import BuiltinImporter
1459
+ interp = interpreters .create ()
1460
+
1461
+ names = interp .call (dir )
1462
+ self .assertEqual (names , [
1463
+ '__builtins__' ,
1464
+ '__doc__' ,
1465
+ '__loader__' ,
1466
+ '__name__' ,
1467
+ '__package__' ,
1468
+ '__spec__' ,
1469
+ ])
1470
+
1471
+ values = {name : interp .call (eval , name )
1472
+ for name in names if name != '__builtins__' }
1473
+ self .assertEqual (values , {
1474
+ '__name__' : '__main__' ,
1475
+ '__doc__' : None ,
1476
+ '__spec__' : None , # It wasn't imported, so no module spec?
1477
+ '__package__' : None ,
1478
+ '__loader__' : BuiltinImporter ,
1479
+ })
1480
+ with self .assertRaises (ExecutionFailed ):
1481
+ interp .call (eval , 'spam' ),
1482
+
1483
+ interp .call (exec , f'assert dir() == { names } ' )
1484
+
1485
+ # Update the interpreter's __main__.
1486
+ interp .prepare_main (spam = 42 )
1487
+ expected = names + ['spam' ]
1488
+
1489
+ names = interp .call (dir )
1490
+ self .assertEqual (names , expected )
1491
+
1492
+ value = interp .call (eval , 'spam' )
1493
+ self .assertEqual (value , 42 )
1494
+
1495
+ interp .call (exec , f'assert dir() == { expected } , dir()' )
1496
+
1497
+ def test_globals_from_stateless_func (self ):
1498
+ # A stateless func, which doesn't depend on any globals,
1499
+ # doesn't go through pickle, so it runs in __main__.
1500
+ def set_global (name , value ):
1501
+ globals ()[name ] = value
1502
+
1503
+ def get_global (name ):
1504
+ return globals ().get (name )
1505
+
1506
+ interp = interpreters .create ()
1507
+
1508
+ modname = interp .call (get_global , '__name__' )
1509
+ self .assertEqual (modname , '__main__' )
1510
+
1511
+ res = interp .call (get_global , 'spam' )
1512
+ self .assertIsNone (res )
1513
+
1514
+ interp .exec ('spam = True' )
1515
+ res = interp .call (get_global , 'spam' )
1516
+ self .assertTrue (res )
1517
+
1518
+ interp .call (set_global , 'spam' , 42 )
1519
+ res = interp .call (get_global , 'spam' )
1520
+ self .assertEqual (res , 42 )
1521
+
1522
+ interp .exec ('assert spam == 42, repr(spam)' )
1523
+
1524
1524
def test_call_in_thread (self ):
1525
1525
interp = interpreters .create ()
1526
1526
0 commit comments