mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
161 lines
4.0 KiB
Python
161 lines
4.0 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
from testutils import assert_raises
|
|
|
|
print("python executable:", sys.executable)
|
|
print(sys.argv)
|
|
assert sys.argv[0].endswith(".py")
|
|
|
|
assert (
|
|
sys.platform == "linux"
|
|
or sys.platform == "darwin"
|
|
or sys.platform == "win32"
|
|
or sys.platform == "unknown"
|
|
)
|
|
|
|
if hasattr(sys, "_framework"):
|
|
assert type(sys._framework) is str
|
|
|
|
assert isinstance(sys.builtin_module_names, tuple)
|
|
assert "sys" in sys.builtin_module_names
|
|
|
|
assert isinstance(sys.implementation.name, str)
|
|
assert isinstance(sys.implementation.cache_tag, str)
|
|
|
|
assert sys.getfilesystemencoding() == "utf-8"
|
|
assert sys.getfilesystemencodeerrors().startswith("surrogate")
|
|
|
|
assert sys.byteorder == "little" or sys.byteorder == "big"
|
|
|
|
assert isinstance(sys.flags, tuple)
|
|
assert type(sys.flags).__name__ == "flags"
|
|
assert type(sys.flags.optimize) is int
|
|
assert sys.flags[3] == sys.flags.optimize
|
|
assert sys.maxunicode == 1114111
|
|
|
|
|
|
# Tracing:
|
|
|
|
events = []
|
|
|
|
|
|
def trc(frame, event, arg):
|
|
fn_name = frame.f_code.co_name
|
|
events.append((fn_name, event, arg))
|
|
print("trace event:", fn_name, event, arg)
|
|
|
|
|
|
def demo(x):
|
|
if x > 0:
|
|
demo(x - 1)
|
|
|
|
|
|
sys.settrace(trc)
|
|
demo(5)
|
|
sys.settrace(None)
|
|
|
|
assert ("demo", "call", None) in events
|
|
|
|
assert sys.exc_info() == (None, None, None)
|
|
|
|
try:
|
|
1 / 0
|
|
except ZeroDivisionError as exc:
|
|
exc_info = sys.exc_info()
|
|
assert exc_info[0] == type(exc) == ZeroDivisionError
|
|
assert exc_info[1] == exc
|
|
|
|
|
|
# Recursion:
|
|
|
|
|
|
def recursive_call(n):
|
|
if n > 0:
|
|
recursive_call(n - 1)
|
|
|
|
|
|
sys.setrecursionlimit(200)
|
|
assert sys.getrecursionlimit() == 200
|
|
|
|
with assert_raises(RecursionError):
|
|
recursive_call(300)
|
|
|
|
if sys.platform.startswith("win"):
|
|
winver = sys.getwindowsversion()
|
|
print(f"winver: {winver} {winver.platform_version}")
|
|
|
|
# the biggest value of wSuiteMask (https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexa#members).
|
|
all_masks = (
|
|
0x00000004
|
|
| 0x00000400
|
|
| 0x00004000
|
|
| 0x00000080
|
|
| 0x00000002
|
|
| 0x00000040
|
|
| 0x00000200
|
|
| 0x00000100
|
|
| 0x00000001
|
|
| 0x00000020
|
|
| 0x00002000
|
|
| 0x00000010
|
|
| 0x00008000
|
|
| 0x00020000
|
|
)
|
|
|
|
# We really can't test if the results are correct, so it just checks for meaningful value
|
|
assert winver.major > 6
|
|
assert winver.minor >= 0
|
|
assert winver.build > 0
|
|
assert winver.platform == 2
|
|
assert isinstance(winver.service_pack, str)
|
|
assert 0 <= winver.suite_mask <= all_masks
|
|
assert 1 <= winver.product_type <= 3
|
|
|
|
# XXX if platform_version is implemented correctly, this'll break on compatibility mode or a build without manifest
|
|
# these fields can mismatch in CPython
|
|
assert winver.major == winver.platform_version[0]
|
|
assert winver.minor == winver.platform_version[1]
|
|
# assert winver.build == winver.platform_version[2]
|
|
|
|
# test int_max_str_digits getter and setter
|
|
|
|
assert sys.get_int_max_str_digits() == 4300
|
|
sys.set_int_max_str_digits(640)
|
|
assert sys.get_int_max_str_digits() == 640
|
|
sys.set_int_max_str_digits(0)
|
|
assert sys.get_int_max_str_digits() == 0
|
|
|
|
with assert_raises(ValueError):
|
|
sys.set_int_max_str_digits(1)
|
|
|
|
sys.set_int_max_str_digits(1000)
|
|
assert sys.get_int_max_str_digits() == 1000
|
|
|
|
# Test the PYTHONSAFEPATH environment variable
|
|
code = "import sys; print(sys.flags.safe_path)"
|
|
env = dict(os.environ)
|
|
env.pop("PYTHONSAFEPATH", None)
|
|
args = (sys.executable, "-P", "-c", code)
|
|
|
|
proc = subprocess.run(args, stdout=subprocess.PIPE, universal_newlines=True, env=env)
|
|
assert proc.stdout.rstrip() == "True", proc
|
|
assert proc.returncode == 0, proc
|
|
|
|
env["PYTHONSAFEPATH"] = "1"
|
|
proc = subprocess.run(args, stdout=subprocess.PIPE, universal_newlines=True, env=env)
|
|
assert proc.stdout.rstrip() == "True"
|
|
assert proc.returncode == 0, proc
|
|
|
|
assert sys._getframemodulename() == "__main__", sys._getframemodulename()
|
|
|
|
|
|
def test_getframemodulename():
|
|
return sys._getframemodulename()
|
|
|
|
|
|
test_getframemodulename.__module__ = "awesome_module"
|
|
|
|
assert test_getframemodulename() == "awesome_module"
|