@@ -784,6 +784,16 @@ def __getitem__(self, key):
784784 raise ValueError
785785 self .assertRaises (ValueError , eval , "foo" , {}, X ())
786786
787+ def test_eval_frozendict (self ):
788+ ns = frozendict (x = 1 , data = [], __builtins__ = __builtins__ )
789+ eval ("data.append(x)" , ns , ns )
790+ self .assertEqual (ns ['data' ], [1 ])
791+
792+ ns = frozendict ()
793+ errmsg = "cannot assign __builtins__ to frozendict globals"
794+ with self .assertRaisesRegex (TypeError , errmsg ):
795+ eval ("" , ns , ns )
796+
787797 def test_eval_kwargs (self ):
788798 data = {"A_GLOBAL_VALUE" : 456 }
789799 self .assertEqual (eval ("globals()['A_GLOBAL_VALUE']" , globals = data ), 456 )
@@ -882,6 +892,21 @@ def test_exec(self):
882892 del l ['__builtins__' ]
883893 self .assertEqual ((g , l ), ({'a' : 1 }, {'b' : 2 }))
884894
895+ def test_exec_frozendict (self ):
896+ ns = frozendict (x = 1 , data = [], __builtins__ = __builtins__ )
897+ exec ("data.append(x)" , ns , ns )
898+ self .assertEqual (ns ['data' ], [1 ])
899+
900+ ns = frozendict (__builtins__ = __builtins__ )
901+ errmsg = "'frozendict' object does not support item assignment"
902+ with self .assertRaisesRegex (TypeError , errmsg ):
903+ exec ("x = 1" , ns , ns )
904+
905+ ns = frozendict ()
906+ errmsg = "cannot assign __builtins__ to frozendict globals"
907+ with self .assertRaisesRegex (TypeError , errmsg ):
908+ exec ("" , ns , ns )
909+
885910 def test_exec_kwargs (self ):
886911 g = {}
887912 exec ('global z\n z = 1' , globals = g )
0 commit comments