mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-29 03:04:38 +08:00
Extract the Python 3.14-compatible annotation result check from #8954 without its Python 3.15 diagnostics. Preserve the returned dict subclass and cached identity, and cover the behavior in the existing module snippet. Assisted-by: OpenAI Codex:model identifier unavailable
68 lines
1.5 KiB
Python
68 lines
1.5 KiB
Python
from testutils import assert_raises
|
|
|
|
assert "__builtins__" in globals()
|
|
# assert type(__builtins__).__name__ == 'module'
|
|
with assert_raises(AttributeError):
|
|
__builtins__.__builtins__
|
|
|
|
assert __builtins__.__name__ == "builtins"
|
|
import builtins
|
|
|
|
assert builtins.__name__ == "builtins"
|
|
|
|
__builtins__.x = "new"
|
|
assert x == "new" # noqa: F821
|
|
|
|
exec('assert "__builtins__" in globals()', dict())
|
|
exec("assert __builtins__ == 7", {"__builtins__": 7})
|
|
exec("assert not isinstance(__builtins__, dict)")
|
|
exec("assert isinstance(__builtins__, dict)", {})
|
|
|
|
namespace = {}
|
|
exec("", namespace)
|
|
assert namespace["__builtins__"] == __builtins__.__dict__
|
|
|
|
|
|
# function.__builtins__ should be a dict, not a module
|
|
# See: https://docs.python.org/3/reference/datamodel.html
|
|
def test_func():
|
|
pass
|
|
|
|
|
|
assert isinstance(test_func.__builtins__, dict), (
|
|
f"function.__builtins__ should be dict, got {type(test_func.__builtins__)}"
|
|
)
|
|
|
|
# with assert_raises(NameError):
|
|
# exec('print(__builtins__)', {'__builtins__': {}})
|
|
|
|
# __builtins__ is deletable but names are alive
|
|
del __builtins__
|
|
with assert_raises(NameError):
|
|
__builtins__ # noqa: F821
|
|
|
|
assert print
|
|
|
|
|
|
from types import ModuleType
|
|
|
|
|
|
class AnnotationDict(dict):
|
|
pass
|
|
|
|
|
|
module = ModuleType("annotated_module")
|
|
annotations = AnnotationDict(answer=int)
|
|
calls = []
|
|
|
|
|
|
def annotate(format):
|
|
calls.append(format)
|
|
return annotations
|
|
|
|
|
|
module.__annotate__ = annotate
|
|
assert module.__annotations__ is annotations
|
|
assert module.__annotations__ is annotations
|
|
assert calls == [1]
|