|
5 | 5 | import os
|
6 | 6 | import subprocess
|
7 | 7 | import sys
|
| 8 | +import sysconfig |
8 | 9 | import tempfile
|
9 | 10 | import textwrap
|
10 | 11 | import unittest
|
@@ -912,6 +913,75 @@ def test_python_gil(self):
|
912 | 913 | self.assertEqual(proc.stdout.rstrip(), expected)
|
913 | 914 | self.assertEqual(proc.stderr, '')
|
914 | 915 |
|
| 916 | + def test_python_asyncio_debug(self): |
| 917 | + code = "import asyncio; print(asyncio.get_event_loop().get_debug())" |
| 918 | + rc, out, err = assert_python_ok('-c', code, PYTHONASYNCIODEBUG='1') |
| 919 | + self.assertIn(b'True', out) |
| 920 | + |
| 921 | + @unittest.skipUnless(sysconfig.get_config_var('Py_TRACE_REFS'), "Requires --with-trace-refs build option") |
| 922 | + def test_python_dump_refs(self): |
| 923 | + code = 'import sys; sys._clear_type_cache()' |
| 924 | + rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFS='1') |
| 925 | + self.assertEqual(rc, 0) |
| 926 | + |
| 927 | + @unittest.skipUnless(sysconfig.get_config_var('Py_TRACE_REFS'), "Requires --with-trace-refs build option") |
| 928 | + def test_python_dump_refs_file(self): |
| 929 | + with tempfile.NamedTemporaryFile() as dump_file: |
| 930 | + code = 'import sys; sys._clear_type_cache()' |
| 931 | + rc, out, err = assert_python_ok('-c', code, PYTHONDUMPREFSFILE=dump_file.name) |
| 932 | + self.assertEqual(rc, 0) |
| 933 | + with open(dump_file.name, 'r') as file: |
| 934 | + contents = file.read() |
| 935 | + self.assertIn('Remaining objects', contents) |
| 936 | + |
| 937 | + @unittest.skipUnless(sys.platform == 'darwin', 'PYTHONEXECUTABLE only works on macOS') |
| 938 | + def test_python_executable(self): |
| 939 | + code = 'import sys; print(sys.executable)' |
| 940 | + expected = "/busr/bbin/bpython" |
| 941 | + rc, out, err = assert_python_ok('-c', code, PYTHONEXECUTABLE=expected) |
| 942 | + self.assertIn(expected.encode(), out) |
| 943 | + |
| 944 | + @unittest.skipUnless(support.MS_WINDOWS, 'Test only applicable on Windows') |
| 945 | + def test_python_legacy_windows_fs_encoding(self): |
| 946 | + code = "import sys; print(sys.getfilesystemencoding())" |
| 947 | + expected = 'mbcs' |
| 948 | + rc, out, err = assert_python_ok('-c', code, PYTHONLEGACYWINDOWSFSENCODING='1') |
| 949 | + self.assertIn(expected.encode(), out) |
| 950 | + |
| 951 | + @unittest.skipUnless(support.MS_WINDOWS, 'Test only applicable on Windows') |
| 952 | + def test_python_legacy_windows_stdio(self): |
| 953 | + code = "import sys; print(sys.stdin.encoding, sys.stdout.encoding)" |
| 954 | + expected = 'cp' |
| 955 | + rc, out, err = assert_python_ok('-c', code, PYTHONLEGACYWINDOWSSTDIO='1') |
| 956 | + self.assertIn(expected.encode(), out) |
| 957 | + |
| 958 | + @unittest.skipIf("-fsanitize" in sysconfig.get_config_vars().get('PY_CFLAGS', ()), |
| 959 | + "PYTHONMALLOCSTATS doesn't work with ASAN") |
| 960 | + def test_python_malloc_stats(self): |
| 961 | + code = "pass" |
| 962 | + rc, out, err = assert_python_ok('-c', code, PYTHONMALLOCSTATS='1') |
| 963 | + self.assertIn(b'Small block threshold', err) |
| 964 | + |
| 965 | + def test_python_user_base(self): |
| 966 | + code = "import site; print(site.USER_BASE)" |
| 967 | + expected = "/custom/userbase" |
| 968 | + rc, out, err = assert_python_ok('-c', code, PYTHONUSERBASE=expected) |
| 969 | + self.assertIn(expected.encode(), out) |
| 970 | + |
| 971 | + def test_python_basic_repl(self): |
| 972 | + # Currently this only tests that the env var is set |
| 973 | + code = "import os; print('PYTHON_BASIC_REPL' in os.environ)" |
| 974 | + expected = "True" |
| 975 | + rc, out, err = assert_python_ok('-c', code, PYTHON_BASIC_REPL='1') |
| 976 | + self.assertIn(expected.encode(), out) |
| 977 | + |
| 978 | + @unittest.skipUnless(sysconfig.get_config_var('HAVE_PERF_TRAMPOLINE'), "Requires HAVE_PERF_TRAMPOLINE support") |
| 979 | + def test_python_perf_jit_support(self): |
| 980 | + code = "import sys; print(sys.is_stack_trampoline_active())" |
| 981 | + expected = "True" |
| 982 | + rc, out, err = assert_python_ok('-c', code, PYTHON_PERF_JIT_SUPPORT='1') |
| 983 | + self.assertIn(expected.encode(), out) |
| 984 | + |
915 | 985 | @unittest.skipUnless(sys.platform == 'win32',
|
916 | 986 | 'bpo-32457 only applies on Windows')
|
917 | 987 | def test_argv0_normalization(self):
|
|
0 commit comments