]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-94808: Test __build_class__ inside non-dict __builtins__ (GH-95932)
authorMichael Droettboom <mdboom@gmail.com>
Mon, 15 Aug 2022 17:39:06 +0000 (13:39 -0400)
committerGitHub <noreply@github.com>
Mon, 15 Aug 2022 17:39:06 +0000 (10:39 -0700)
Lib/test/test_builtin.py

index d5eaf291a5ca2855bb4e715c9fa30202d09b1ac4..6fa5ea67c8b3995c39a8b88085d2a7e80ddd3ef9 100644 (file)
@@ -737,11 +737,6 @@ class BuiltinTest(unittest.TestCase):
         self.assertRaises(TypeError,
                           exec, code, {'__builtins__': 123})
 
-        # no __build_class__ function
-        code = compile("class A: pass", "", "exec")
-        self.assertRaisesRegex(NameError, "__build_class__ not found",
-                               exec, code, {'__builtins__': {}})
-
         class frozendict_error(Exception):
             pass
 
@@ -758,6 +753,15 @@ class BuiltinTest(unittest.TestCase):
         self.assertRaises(frozendict_error,
                           exec, code, {'__builtins__': frozen_builtins})
 
+        # no __build_class__ function
+        code = compile("class A: pass", "", "exec")
+        self.assertRaisesRegex(NameError, "__build_class__ not found",
+                               exec, code, {'__builtins__': {}})
+        # __build_class__ in a custom __builtins__
+        exec(code, {'__builtins__': frozen_builtins})
+        self.assertRaisesRegex(NameError, "__build_class__ not found",
+                               exec, code, {'__builtins__': frozendict()})
+
         # read-only globals
         namespace = frozendict({})
         code = compile("x=1", "test", "exec")