@@ -98,7 +98,23 @@ def test___globals__(self):
98
98
(AttributeError , TypeError ))
99
99
100
100
def test___builtins__ (self ):
101
- self .assertIs (self .b .__builtins__ , __builtins__ )
101
+ if __name__ == "__main__" :
102
+ # `func.__builtins__` is `builtins.__dict__`.
103
+ # See:https://bugs.python.org/issue42990
104
+
105
+ # When this test is run by executing the current module,
106
+ # `__builtins__` is the built-in module `builtins`.
107
+
108
+ # When this test is run from another module, `__builtins__` is
109
+ # `builtins.__dict__`
110
+ # See: https://docs.python.org/3/reference/executionmodel.html#builtins-and-restricted-execution
111
+
112
+ import builtins
113
+ builtins_dict = builtins .__dict__
114
+ else :
115
+ builtins_dict = __builtins__
116
+
117
+ self .assertIs (self .b .__builtins__ , builtins_dict )
102
118
self .cannot_set_attr (self .b , '__builtins__' , 2 ,
103
119
(AttributeError , TypeError ))
104
120
@@ -108,7 +124,7 @@ def func(s): return len(s)
108
124
ns = {}
109
125
func2 = type (func )(func .__code__ , ns )
110
126
self .assertIs (func2 .__globals__ , ns )
111
- self .assertIs (func2 .__builtins__ , __builtins__ )
127
+ self .assertIs (func2 .__builtins__ , builtins_dict )
112
128
113
129
# Make sure that the function actually works.
114
130
self .assertEqual (func2 ("abc" ), 3 )
0 commit comments