mirror of https://github.com/python/cpython
gh-116303: Skip test module dependent tests if test modules are unavailable (#117341)
This commit is contained in:
parent
2ec6bb4111
commit
ea94b3b149
|
@ -1168,6 +1168,10 @@ def requires_limited_api(test):
|
||||||
return unittest.skip('needs _testcapi and _testlimitedcapi modules')(test)
|
return unittest.skip('needs _testcapi and _testlimitedcapi modules')(test)
|
||||||
return test
|
return test
|
||||||
|
|
||||||
|
|
||||||
|
TEST_MODULES_ENABLED = sysconfig.get_config_var('TEST_MODULES') == 'yes'
|
||||||
|
|
||||||
|
|
||||||
def requires_specialization(test):
|
def requires_specialization(test):
|
||||||
return unittest.skipUnless(
|
return unittest.skipUnless(
|
||||||
_opcode.ENABLE_SPECIALIZATION, "requires specialization")(test)
|
_opcode.ENABLE_SPECIALIZATION, "requires specialization")(test)
|
||||||
|
|
|
@ -89,6 +89,7 @@ class AuditTest(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_unraisablehook(self):
|
def test_unraisablehook(self):
|
||||||
|
import_helper.import_module("_testcapi")
|
||||||
returncode, events, stderr = self.run_python("test_unraisablehook")
|
returncode, events, stderr = self.run_python("test_unraisablehook")
|
||||||
if returncode:
|
if returncode:
|
||||||
self.fail(stderr)
|
self.fail(stderr)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import (cpython_only, is_wasi, requires_limited_api, Py_DEBUG,
|
from test.support import (cpython_only, is_wasi, requires_limited_api, Py_DEBUG,
|
||||||
set_recursion_limit, skip_on_s390x)
|
set_recursion_limit, skip_on_s390x, import_helper)
|
||||||
try:
|
try:
|
||||||
import _testcapi
|
import _testcapi
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -244,6 +244,7 @@ class CFunctionCallsErrorMessages(unittest.TestCase):
|
||||||
self.assertRaisesRegex(TypeError, msg, mod)
|
self.assertRaisesRegex(TypeError, msg, mod)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
class TestCallingConventions(unittest.TestCase):
|
class TestCallingConventions(unittest.TestCase):
|
||||||
"""Test calling using various C calling conventions (METH_*) from Python
|
"""Test calling using various C calling conventions (METH_*) from Python
|
||||||
|
|
||||||
|
@ -441,6 +442,7 @@ PYTHON_INSTANCE = PythonClass()
|
||||||
|
|
||||||
NULL_OR_EMPTY = object()
|
NULL_OR_EMPTY = object()
|
||||||
|
|
||||||
|
|
||||||
class FastCallTests(unittest.TestCase):
|
class FastCallTests(unittest.TestCase):
|
||||||
"""Test calling using various callables from C
|
"""Test calling using various callables from C
|
||||||
"""
|
"""
|
||||||
|
@ -484,42 +486,43 @@ class FastCallTests(unittest.TestCase):
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add all the calling conventions and variants of C callables
|
# Add all the calling conventions and variants of C callables
|
||||||
_instance = _testcapi.MethInstance()
|
if _testcapi:
|
||||||
for obj, expected_self in (
|
_instance = _testcapi.MethInstance()
|
||||||
(_testcapi, _testcapi), # module-level function
|
for obj, expected_self in (
|
||||||
(_instance, _instance), # bound method
|
(_testcapi, _testcapi), # module-level function
|
||||||
(_testcapi.MethClass, _testcapi.MethClass), # class method on class
|
(_instance, _instance), # bound method
|
||||||
(_testcapi.MethClass(), _testcapi.MethClass), # class method on inst.
|
(_testcapi.MethClass, _testcapi.MethClass), # class method on class
|
||||||
(_testcapi.MethStatic, None), # static method
|
(_testcapi.MethClass(), _testcapi.MethClass), # class method on inst.
|
||||||
):
|
(_testcapi.MethStatic, None), # static method
|
||||||
CALLS_POSARGS.extend([
|
):
|
||||||
(obj.meth_varargs, (1, 2), (expected_self, (1, 2))),
|
CALLS_POSARGS.extend([
|
||||||
(obj.meth_varargs_keywords,
|
(obj.meth_varargs, (1, 2), (expected_self, (1, 2))),
|
||||||
(1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
|
(obj.meth_varargs_keywords,
|
||||||
(obj.meth_fastcall, (1, 2), (expected_self, (1, 2))),
|
(1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
|
||||||
(obj.meth_fastcall, (), (expected_self, ())),
|
(obj.meth_fastcall, (1, 2), (expected_self, (1, 2))),
|
||||||
(obj.meth_fastcall_keywords,
|
(obj.meth_fastcall, (), (expected_self, ())),
|
||||||
(1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
|
(obj.meth_fastcall_keywords,
|
||||||
(obj.meth_fastcall_keywords,
|
(1, 2), (expected_self, (1, 2), NULL_OR_EMPTY)),
|
||||||
(), (expected_self, (), NULL_OR_EMPTY)),
|
(obj.meth_fastcall_keywords,
|
||||||
(obj.meth_noargs, (), expected_self),
|
(), (expected_self, (), NULL_OR_EMPTY)),
|
||||||
(obj.meth_o, (123, ), (expected_self, 123)),
|
(obj.meth_noargs, (), expected_self),
|
||||||
])
|
(obj.meth_o, (123, ), (expected_self, 123)),
|
||||||
|
])
|
||||||
|
|
||||||
CALLS_KWARGS.extend([
|
CALLS_KWARGS.extend([
|
||||||
(obj.meth_varargs_keywords,
|
(obj.meth_varargs_keywords,
|
||||||
(1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
|
(1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
|
||||||
(obj.meth_varargs_keywords,
|
(obj.meth_varargs_keywords,
|
||||||
(), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
|
(), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
|
||||||
(obj.meth_varargs_keywords,
|
(obj.meth_varargs_keywords,
|
||||||
(1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
|
(1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
|
||||||
(obj.meth_fastcall_keywords,
|
(obj.meth_fastcall_keywords,
|
||||||
(1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
|
(1, 2), {'x': 'y'}, (expected_self, (1, 2), {'x': 'y'})),
|
||||||
(obj.meth_fastcall_keywords,
|
(obj.meth_fastcall_keywords,
|
||||||
(), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
|
(), {'x': 'y'}, (expected_self, (), {'x': 'y'})),
|
||||||
(obj.meth_fastcall_keywords,
|
(obj.meth_fastcall_keywords,
|
||||||
(1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
|
(1, 2), {}, (expected_self, (1, 2), NULL_OR_EMPTY)),
|
||||||
])
|
])
|
||||||
|
|
||||||
def check_result(self, result, expected):
|
def check_result(self, result, expected):
|
||||||
if isinstance(expected, tuple) and expected[-1] is NULL_OR_EMPTY:
|
if isinstance(expected, tuple) and expected[-1] is NULL_OR_EMPTY:
|
||||||
|
@ -527,6 +530,7 @@ class FastCallTests(unittest.TestCase):
|
||||||
expected = (*expected[:-1], result[-1])
|
expected = (*expected[:-1], result[-1])
|
||||||
self.assertEqual(result, expected)
|
self.assertEqual(result, expected)
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_vectorcall_dict(self):
|
def test_vectorcall_dict(self):
|
||||||
# Test PyObject_VectorcallDict()
|
# Test PyObject_VectorcallDict()
|
||||||
|
|
||||||
|
@ -546,6 +550,7 @@ class FastCallTests(unittest.TestCase):
|
||||||
result = _testcapi.pyobject_fastcalldict(func, args, kwargs)
|
result = _testcapi.pyobject_fastcalldict(func, args, kwargs)
|
||||||
self.check_result(result, expected)
|
self.check_result(result, expected)
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_vectorcall(self):
|
def test_vectorcall(self):
|
||||||
# Test PyObject_Vectorcall()
|
# Test PyObject_Vectorcall()
|
||||||
|
|
||||||
|
@ -610,6 +615,7 @@ def testfunction_kw(self, *, kw):
|
||||||
ADAPTIVE_WARMUP_DELAY = 2
|
ADAPTIVE_WARMUP_DELAY = 2
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
class TestPEP590(unittest.TestCase):
|
class TestPEP590(unittest.TestCase):
|
||||||
|
|
||||||
def test_method_descriptor_flag(self):
|
def test_method_descriptor_flag(self):
|
||||||
|
@ -1022,6 +1028,7 @@ class TestRecursion(unittest.TestCase):
|
||||||
|
|
||||||
@skip_on_s390x
|
@skip_on_s390x
|
||||||
@unittest.skipIf(is_wasi and Py_DEBUG, "requires deep stack")
|
@unittest.skipIf(is_wasi and Py_DEBUG, "requires deep stack")
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_super_deep(self):
|
def test_super_deep(self):
|
||||||
|
|
||||||
def recurse(n):
|
def recurse(n):
|
||||||
|
|
|
@ -1,5 +1,12 @@
|
||||||
import os
|
import os
|
||||||
|
import unittest
|
||||||
from test.support import load_package_tests
|
from test.support import load_package_tests
|
||||||
|
from test.support import TEST_MODULES_ENABLED
|
||||||
|
|
||||||
|
|
||||||
|
if not TEST_MODULES_ENABLED:
|
||||||
|
raise unittest.SkipTest("requires test modules")
|
||||||
|
|
||||||
|
|
||||||
def load_tests(*args):
|
def load_tests(*args):
|
||||||
return load_package_tests(os.path.dirname(__file__), *args)
|
return load_package_tests(os.path.dirname(__file__), *args)
|
||||||
|
|
|
@ -143,9 +143,8 @@ from test.support import (cpython_only,
|
||||||
check_impl_detail, requires_debug_ranges,
|
check_impl_detail, requires_debug_ranges,
|
||||||
gc_collect)
|
gc_collect)
|
||||||
from test.support.script_helper import assert_python_ok
|
from test.support.script_helper import assert_python_ok
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper, import_helper
|
||||||
from test.support.bytecode_helper import (BytecodeTestCase,
|
from test.support.bytecode_helper import instructions_with_positions
|
||||||
instructions_with_positions)
|
|
||||||
from opcode import opmap, opname
|
from opcode import opmap, opname
|
||||||
COPY_FREE_VARS = opmap['COPY_FREE_VARS']
|
COPY_FREE_VARS = opmap['COPY_FREE_VARS']
|
||||||
|
|
||||||
|
@ -176,7 +175,7 @@ class CodeTest(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_newempty(self):
|
def test_newempty(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
co = _testcapi.code_newempty("filename", "funcname", 15)
|
co = _testcapi.code_newempty("filename", "funcname", 15)
|
||||||
self.assertEqual(co.co_filename, "filename")
|
self.assertEqual(co.co_filename, "filename")
|
||||||
self.assertEqual(co.co_name, "funcname")
|
self.assertEqual(co.co_name, "funcname")
|
||||||
|
|
|
@ -11,6 +11,10 @@ from test import support
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
from test.support import warnings_helper
|
from test.support import warnings_helper
|
||||||
from test.support.script_helper import assert_python_ok
|
from test.support.script_helper import assert_python_ok
|
||||||
|
try:
|
||||||
|
import _testcapi
|
||||||
|
except ImportError:
|
||||||
|
_testcapi = None
|
||||||
|
|
||||||
|
|
||||||
class AsyncYieldFrom:
|
class AsyncYieldFrom:
|
||||||
|
@ -2445,6 +2449,7 @@ class UnawaitedWarningDuringShutdownTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
class CAPITest(unittest.TestCase):
|
class CAPITest(unittest.TestCase):
|
||||||
|
|
||||||
def test_tp_await_1(self):
|
def test_tp_await_1(self):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (Structure, CDLL, CFUNCTYPE,
|
from ctypes import (Structure, CDLL, CFUNCTYPE,
|
||||||
|
@ -6,6 +5,8 @@ from ctypes import (Structure, CDLL, CFUNCTYPE,
|
||||||
c_short, c_int, c_long, c_longlong,
|
c_short, c_int, c_long, c_longlong,
|
||||||
c_byte, c_wchar, c_float, c_double,
|
c_byte, c_wchar, c_float, c_double,
|
||||||
ArgumentError)
|
ArgumentError)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
dll = CDLL(_ctypes_test.__file__)
|
dll = CDLL(_ctypes_test.__file__)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, Structure, sizeof, POINTER, byref, alignment,
|
from ctypes import (CDLL, Structure, sizeof, POINTER, byref, alignment,
|
||||||
|
@ -7,6 +6,8 @@ from ctypes import (CDLL, Structure, sizeof, POINTER, byref, alignment,
|
||||||
c_uint32, c_uint64,
|
c_uint32, c_uint64,
|
||||||
c_short, c_ushort, c_int, c_uint, c_long, c_ulong, c_longlong, c_ulonglong)
|
c_short, c_ushort, c_int, c_uint, c_long, c_ulong, c_longlong, c_ulonglong)
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class BITS(Structure):
|
class BITS(Structure):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import functools
|
import functools
|
||||||
import gc
|
import gc
|
||||||
|
@ -14,6 +13,8 @@ from ctypes import (CDLL, cdll, Structure, CFUNCTYPE,
|
||||||
c_float, c_double, c_longdouble, py_object)
|
c_float, c_double, c_longdouble, py_object)
|
||||||
from ctypes.util import find_library
|
from ctypes.util import find_library
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class Callbacks(unittest.TestCase):
|
class Callbacks(unittest.TestCase):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL,
|
from ctypes import (CDLL,
|
||||||
|
@ -6,6 +5,8 @@ from ctypes import (CDLL,
|
||||||
c_short, c_ushort, c_int, c_uint,
|
c_short, c_ushort, c_int, c_uint,
|
||||||
c_long, c_ulong, c_longlong, c_ulonglong,
|
c_long, c_ulong, c_longlong, c_ulonglong,
|
||||||
c_float, c_double, c_longdouble)
|
c_float, c_double, c_longdouble)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class CFunctions(unittest.TestCase):
|
class CFunctions(unittest.TestCase):
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import CDLL, c_int
|
from ctypes import CDLL, c_int
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class CHECKED(c_int):
|
class CHECKED(c_int):
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, Structure, CFUNCTYPE, sizeof, _CFuncPtr,
|
from ctypes import (CDLL, Structure, CFUNCTYPE, sizeof, _CFuncPtr,
|
||||||
c_void_p, c_char_p, c_char, c_int, c_uint, c_long)
|
c_void_p, c_char_p, c_char, c_int, c_uint, c_long)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
from ._support import (_CData, PyCFuncPtrType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
from ._support import (_CData, PyCFuncPtrType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
Py_TPFLAGS_IMMUTABLETYPE)
|
Py_TPFLAGS_IMMUTABLETYPE)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -7,6 +6,8 @@ from ctypes import (CDLL, Structure, Array, CFUNCTYPE,
|
||||||
c_char, c_wchar, c_byte, c_char_p, c_wchar_p,
|
c_char, c_wchar, c_byte, c_char_p, c_wchar_p,
|
||||||
c_short, c_int, c_long, c_longlong, c_void_p,
|
c_short, c_int, c_long, c_longlong, c_void_p,
|
||||||
c_float, c_double, c_longdouble)
|
c_float, c_double, c_longdouble)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
from _ctypes import _Pointer, _SimpleCData
|
from _ctypes import _Pointer, _SimpleCData
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import _ctypes_test
|
|
||||||
import math
|
import math
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, CFUNCTYPE, POINTER, create_string_buffer, sizeof,
|
from ctypes import (CDLL, CFUNCTYPE, POINTER, create_string_buffer, sizeof,
|
||||||
c_void_p, c_char, c_int, c_double, c_size_t)
|
c_void_p, c_char, c_int, c_double, c_size_t)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
lib = CDLL(_ctypes_test.__file__)
|
lib = CDLL(_ctypes_test.__file__)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import _ctypes
|
import _ctypes
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -10,6 +9,7 @@ import unittest
|
||||||
from ctypes import CDLL, cdll, addressof, c_void_p, c_char_p
|
from ctypes import CDLL, cdll, addressof, c_void_p, c_char_p
|
||||||
from ctypes.util import find_library
|
from ctypes.util import find_library
|
||||||
from test.support import import_helper, os_helper
|
from test.support import import_helper, os_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
libc_name = None
|
libc_name = None
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import unittest
|
import unittest
|
||||||
import test.support
|
import test.support
|
||||||
from ctypes import (CDLL, PyDLL, ArgumentError,
|
from ctypes import (CDLL, PyDLL, ArgumentError,
|
||||||
|
@ -14,6 +13,8 @@ from ctypes import (CDLL, PyDLL, ArgumentError,
|
||||||
c_long, c_ulong,
|
c_long, c_ulong,
|
||||||
c_longlong, c_ulonglong,
|
c_longlong, c_ulonglong,
|
||||||
c_float, c_double, c_longdouble)
|
c_float, c_double, c_longdouble)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class SimpleTypesTestCase(unittest.TestCase):
|
class SimpleTypesTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import _ctypes_test
|
|
||||||
import pickle
|
import pickle
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, Structure, CFUNCTYPE, pointer,
|
from ctypes import (CDLL, Structure, CFUNCTYPE, pointer,
|
||||||
c_void_p, c_char_p, c_wchar_p,
|
c_void_p, c_char_p, c_wchar_p,
|
||||||
c_char, c_wchar, c_int, c_double)
|
c_char, c_wchar, c_int, c_double)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
dll = CDLL(_ctypes_test.__file__)
|
dll = CDLL(_ctypes_test.__file__)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
import array
|
import array
|
||||||
import ctypes
|
import ctypes
|
||||||
import sys
|
import sys
|
||||||
|
@ -10,6 +9,8 @@ from ctypes import (CDLL, CFUNCTYPE, Structure,
|
||||||
c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint,
|
c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint,
|
||||||
c_long, c_ulong, c_longlong, c_ulonglong,
|
c_long, c_ulong, c_longlong, c_ulonglong,
|
||||||
c_float, c_double)
|
c_float, c_double)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
from ._support import (_CData, PyCPointerType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
from ._support import (_CData, PyCPointerType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
Py_TPFLAGS_IMMUTABLETYPE)
|
Py_TPFLAGS_IMMUTABLETYPE)
|
||||||
|
|
||||||
|
|
|
@ -18,12 +18,13 @@
|
||||||
#
|
#
|
||||||
# In this case, there would have to be an additional reference to the argument...
|
# In this case, there would have to be an additional reference to the argument...
|
||||||
|
|
||||||
import _ctypes_test
|
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, CFUNCTYPE, POINTER, ArgumentError,
|
from ctypes import (CDLL, CFUNCTYPE, POINTER, ArgumentError,
|
||||||
pointer, byref, sizeof, addressof, create_string_buffer,
|
pointer, byref, sizeof, addressof, create_string_buffer,
|
||||||
c_void_p, c_char_p, c_wchar_p, c_char, c_wchar,
|
c_void_p, c_char_p, c_wchar_p, c_char, c_wchar,
|
||||||
c_short, c_int, c_long, c_longlong, c_double)
|
c_short, c_int, c_long, c_longlong, c_double)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
testdll = CDLL(_ctypes_test.__file__)
|
testdll = CDLL(_ctypes_test.__file__)
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import gc
|
import gc
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
MyCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)
|
MyCallback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import _ctypes_test
|
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import CDLL, CFUNCTYPE, ArgumentError, c_char_p, c_void_p, c_char
|
from ctypes import CDLL, CFUNCTYPE, ArgumentError, c_char_p, c_void_p, c_char
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class ReturnFuncPtrTestCase(unittest.TestCase):
|
class ReturnFuncPtrTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import _ctypes_test
|
|
||||||
import unittest
|
import unittest
|
||||||
from ctypes import (CDLL, POINTER, sizeof,
|
from ctypes import (CDLL, POINTER, sizeof,
|
||||||
c_byte, c_short, c_int, c_long, c_char, c_wchar, c_char_p)
|
c_byte, c_short, c_int, c_long, c_char, c_wchar, c_char_p)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class SlicesTestCase(unittest.TestCase):
|
class SlicesTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import _ctypes_test
|
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
from ctypes import (CDLL, Structure, POINTER, create_string_buffer,
|
from ctypes import (CDLL, Structure, POINTER, create_string_buffer,
|
||||||
c_char, c_char_p)
|
c_char, c_char_p)
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
lib = CDLL(_ctypes_test.__file__)
|
lib = CDLL(_ctypes_test.__file__)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import _ctypes_test
|
|
||||||
from platform import architecture as _architecture
|
from platform import architecture as _architecture
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
|
@ -12,6 +11,8 @@ from ctypes.util import find_library
|
||||||
from struct import calcsize
|
from struct import calcsize
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
from ._support import (_CData, PyCStructType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
from ._support import (_CData, PyCStructType, Py_TPFLAGS_DISALLOW_INSTANTIATION,
|
||||||
Py_TPFLAGS_IMMUTABLETYPE)
|
Py_TPFLAGS_IMMUTABLETYPE)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import unittest
|
import unittest
|
||||||
|
from test.support import import_helper
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
|
||||||
|
|
||||||
class UnicodeTestCase(unittest.TestCase):
|
class UnicodeTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
A testcase which accesses *values* in a dll.
|
A testcase which accesses *values* in a dll.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import _ctypes_test
|
|
||||||
import _imp
|
import _imp
|
||||||
import importlib.util
|
import importlib.util
|
||||||
import sys
|
import sys
|
||||||
|
@ -15,10 +14,14 @@ from test.support import import_helper
|
||||||
|
|
||||||
class ValuesTestCase(unittest.TestCase):
|
class ValuesTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
|
self.ctdll = CDLL(_ctypes_test.__file__)
|
||||||
|
|
||||||
def test_an_integer(self):
|
def test_an_integer(self):
|
||||||
# This test checks and changes an integer stored inside the
|
# This test checks and changes an integer stored inside the
|
||||||
# _ctypes_test dll/shared lib.
|
# _ctypes_test dll/shared lib.
|
||||||
ctdll = CDLL(_ctypes_test.__file__)
|
ctdll = self.ctdll
|
||||||
an_integer = c_int.in_dll(ctdll, "an_integer")
|
an_integer = c_int.in_dll(ctdll, "an_integer")
|
||||||
x = an_integer.value
|
x = an_integer.value
|
||||||
self.assertEqual(x, ctdll.get_an_integer())
|
self.assertEqual(x, ctdll.get_an_integer())
|
||||||
|
@ -30,8 +33,7 @@ class ValuesTestCase(unittest.TestCase):
|
||||||
self.assertEqual(x, ctdll.get_an_integer())
|
self.assertEqual(x, ctdll.get_an_integer())
|
||||||
|
|
||||||
def test_undefined(self):
|
def test_undefined(self):
|
||||||
ctdll = CDLL(_ctypes_test.__file__)
|
self.assertRaises(ValueError, c_int.in_dll, self.ctdll, "Undefined_Symbol")
|
||||||
self.assertRaises(ValueError, c_int.in_dll, ctdll, "Undefined_Symbol")
|
|
||||||
|
|
||||||
|
|
||||||
class PythonValuesTestCase(unittest.TestCase):
|
class PythonValuesTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# Windows specific tests
|
# Windows specific tests
|
||||||
|
|
||||||
import _ctypes_test
|
|
||||||
import ctypes
|
import ctypes
|
||||||
import errno
|
import errno
|
||||||
import sys
|
import sys
|
||||||
|
@ -9,6 +8,7 @@ from ctypes import (CDLL, Structure, POINTER, pointer, sizeof, byref,
|
||||||
_pointer_type_cache,
|
_pointer_type_cache,
|
||||||
c_void_p, c_char, c_int, c_long)
|
c_void_p, c_char, c_int, c_long)
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import import_helper
|
||||||
from ._support import Py_TPFLAGS_DISALLOW_INSTANTIATION, Py_TPFLAGS_IMMUTABLETYPE
|
from ._support import Py_TPFLAGS_DISALLOW_INSTANTIATION, Py_TPFLAGS_IMMUTABLETYPE
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ class FunctionCallTestCase(unittest.TestCase):
|
||||||
@unittest.skipUnless(sys.platform == "win32", 'Windows-specific test')
|
@unittest.skipUnless(sys.platform == "win32", 'Windows-specific test')
|
||||||
class ReturnStructSizesTestCase(unittest.TestCase):
|
class ReturnStructSizesTestCase(unittest.TestCase):
|
||||||
def test_sizes(self):
|
def test_sizes(self):
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
dll = CDLL(_ctypes_test.__file__)
|
dll = CDLL(_ctypes_test.__file__)
|
||||||
for i in range(1, 11):
|
for i in range(1, 11):
|
||||||
fields = [ (f"f{f}", c_char) for f in range(1, i + 1)]
|
fields = [ (f"f{f}", c_char) for f in range(1, i + 1)]
|
||||||
|
@ -116,6 +117,7 @@ class Structures(unittest.TestCase):
|
||||||
("right", c_long),
|
("right", c_long),
|
||||||
("bottom", c_long)]
|
("bottom", c_long)]
|
||||||
|
|
||||||
|
_ctypes_test = import_helper.import_module("_ctypes_test")
|
||||||
dll = CDLL(_ctypes_test.__file__)
|
dll = CDLL(_ctypes_test.__file__)
|
||||||
|
|
||||||
pt = POINT(15, 25)
|
pt = POINT(15, 25)
|
||||||
|
|
|
@ -19,6 +19,13 @@ import textwrap
|
||||||
if not support.has_subprocess_support:
|
if not support.has_subprocess_support:
|
||||||
raise unittest.SkipTest("test module requires subprocess")
|
raise unittest.SkipTest("test module requires subprocess")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
import _testinternalcapi
|
||||||
|
except ImportError:
|
||||||
|
_testinternalcapi = None
|
||||||
|
|
||||||
|
|
||||||
MACOS = (sys.platform == 'darwin')
|
MACOS = (sys.platform == 'darwin')
|
||||||
PYMEM_ALLOCATOR_NOT_SET = 0
|
PYMEM_ALLOCATOR_NOT_SET = 0
|
||||||
PYMEM_ALLOCATOR_DEBUG = 2
|
PYMEM_ALLOCATOR_DEBUG = 2
|
||||||
|
@ -352,6 +359,7 @@ class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
self.assertEqual(out, 'Finalized\n' * INIT_LOOPS)
|
self.assertEqual(out, 'Finalized\n' * INIT_LOOPS)
|
||||||
|
|
||||||
@support.requires_specialization
|
@support.requires_specialization
|
||||||
|
@unittest.skipUnless(support.TEST_MODULES_ENABLED, "requires test modules")
|
||||||
def test_specialized_static_code_gets_unspecialized_at_Py_FINALIZE(self):
|
def test_specialized_static_code_gets_unspecialized_at_Py_FINALIZE(self):
|
||||||
# https://github.com/python/cpython/issues/92031
|
# https://github.com/python/cpython/issues/92031
|
||||||
|
|
||||||
|
@ -396,6 +404,8 @@ class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
out, err = self.run_embedded_interpreter("test_repeated_init_exec", code)
|
out, err = self.run_embedded_interpreter("test_repeated_init_exec", code)
|
||||||
self.assertEqual(out, '9\n' * INIT_LOOPS)
|
self.assertEqual(out, '9\n' * INIT_LOOPS)
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
maxDiff = 4096
|
maxDiff = 4096
|
||||||
UTF8_MODE_ERRORS = ('surrogatepass' if MS_WINDOWS else 'surrogateescape')
|
UTF8_MODE_ERRORS = ('surrogatepass' if MS_WINDOWS else 'surrogateescape')
|
||||||
|
@ -1588,7 +1598,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
# The global path configuration (_Py_path_config) must be a copy
|
# The global path configuration (_Py_path_config) must be a copy
|
||||||
# of the path configuration of PyInterpreter.config (PyConfig).
|
# of the path configuration of PyInterpreter.config (PyConfig).
|
||||||
ctypes = import_helper.import_module('ctypes')
|
ctypes = import_helper.import_module('ctypes')
|
||||||
_testinternalcapi = import_helper.import_module('_testinternalcapi')
|
|
||||||
|
|
||||||
def get_func(name):
|
def get_func(name):
|
||||||
func = getattr(ctypes.pythonapi, name)
|
func = getattr(ctypes.pythonapi, name)
|
||||||
|
@ -1784,6 +1793,7 @@ class MiscTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
# See bpo-44133
|
# See bpo-44133
|
||||||
@unittest.skipIf(os.name == 'nt',
|
@unittest.skipIf(os.name == 'nt',
|
||||||
'Py_FrozenMain is not exported on Windows')
|
'Py_FrozenMain is not exported on Windows')
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_frozenmain(self):
|
def test_frozenmain(self):
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
env['PYTHONUNBUFFERED'] = '1'
|
env['PYTHONUNBUFFERED'] = '1'
|
||||||
|
|
|
@ -19,12 +19,13 @@ from test.support.warnings_helper import check_warnings
|
||||||
from test import support
|
from test import support
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import _testcapi
|
||||||
from _testcapi import INT_MAX
|
from _testcapi import INT_MAX
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
_testcapi = None
|
||||||
INT_MAX = 2**31 - 1
|
INT_MAX = 2**31 - 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class NaiveException(Exception):
|
class NaiveException(Exception):
|
||||||
def __init__(self, x):
|
def __init__(self, x):
|
||||||
self.x = x
|
self.x = x
|
||||||
|
@ -345,8 +346,8 @@ class ExceptionTests(unittest.TestCase):
|
||||||
class InvalidException:
|
class InvalidException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_capi1():
|
def test_capi1():
|
||||||
import _testcapi
|
|
||||||
try:
|
try:
|
||||||
_testcapi.raise_exception(BadException, 1)
|
_testcapi.raise_exception(BadException, 1)
|
||||||
except TypeError as err:
|
except TypeError as err:
|
||||||
|
@ -356,8 +357,8 @@ class ExceptionTests(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
self.fail("Expected exception")
|
self.fail("Expected exception")
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_capi2():
|
def test_capi2():
|
||||||
import _testcapi
|
|
||||||
try:
|
try:
|
||||||
_testcapi.raise_exception(BadException, 0)
|
_testcapi.raise_exception(BadException, 0)
|
||||||
except RuntimeError as err:
|
except RuntimeError as err:
|
||||||
|
@ -370,8 +371,8 @@ class ExceptionTests(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
self.fail("Expected exception")
|
self.fail("Expected exception")
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_capi3():
|
def test_capi3():
|
||||||
import _testcapi
|
|
||||||
self.assertRaises(SystemError, _testcapi.raise_exception,
|
self.assertRaises(SystemError, _testcapi.raise_exception,
|
||||||
InvalidException, 1)
|
InvalidException, 1)
|
||||||
|
|
||||||
|
@ -1381,6 +1382,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_recursion_normalizing_exception(self):
|
def test_recursion_normalizing_exception(self):
|
||||||
|
import_module("_testinternalcapi")
|
||||||
# Issue #22898.
|
# Issue #22898.
|
||||||
# Test that a RecursionError is raised when tstate->recursion_depth is
|
# Test that a RecursionError is raised when tstate->recursion_depth is
|
||||||
# equal to recursion_limit in PyErr_NormalizeException() and check
|
# equal to recursion_limit in PyErr_NormalizeException() and check
|
||||||
|
@ -1435,6 +1437,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
self.assertIn(b'Done.', out)
|
self.assertIn(b'Done.', out)
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_recursion_normalizing_infinite_exception(self):
|
def test_recursion_normalizing_infinite_exception(self):
|
||||||
# Issue #30697. Test that a RecursionError is raised when
|
# Issue #30697. Test that a RecursionError is raised when
|
||||||
# maximum recursion depth has been exceeded when creating
|
# maximum recursion depth has been exceeded when creating
|
||||||
|
@ -1503,6 +1506,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
# Python built with Py_TRACE_REFS fail with a fatal error in
|
# Python built with Py_TRACE_REFS fail with a fatal error in
|
||||||
# _PyRefchain_Trace() on memory allocation error.
|
# _PyRefchain_Trace() on memory allocation error.
|
||||||
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_recursion_normalizing_with_no_memory(self):
|
def test_recursion_normalizing_with_no_memory(self):
|
||||||
# Issue #30697. Test that in the abort that occurs when there is no
|
# Issue #30697. Test that in the abort that occurs when there is no
|
||||||
# memory left and the size of the Python frames stack is greater than
|
# memory left and the size of the Python frames stack is greater than
|
||||||
|
@ -1525,6 +1529,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
self.assertIn(b'MemoryError', err)
|
self.assertIn(b'MemoryError', err)
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_MemoryError(self):
|
def test_MemoryError(self):
|
||||||
# PyErr_NoMemory always raises the same exception instance.
|
# PyErr_NoMemory always raises the same exception instance.
|
||||||
# Check that the traceback is not doubled.
|
# Check that the traceback is not doubled.
|
||||||
|
@ -1544,8 +1549,8 @@ class ExceptionTests(unittest.TestCase):
|
||||||
self.assertEqual(tb1, tb2)
|
self.assertEqual(tb1, tb2)
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_exception_with_doc(self):
|
def test_exception_with_doc(self):
|
||||||
import _testcapi
|
|
||||||
doc2 = "This is a test docstring."
|
doc2 = "This is a test docstring."
|
||||||
doc4 = "This is another test docstring."
|
doc4 = "This is another test docstring."
|
||||||
|
|
||||||
|
@ -1584,6 +1589,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
self.assertEqual(error5.__doc__, "")
|
self.assertEqual(error5.__doc__, "")
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_memory_error_cleanup(self):
|
def test_memory_error_cleanup(self):
|
||||||
# Issue #5437: preallocated MemoryError instances should not keep
|
# Issue #5437: preallocated MemoryError instances should not keep
|
||||||
# traceback objects alive.
|
# traceback objects alive.
|
||||||
|
@ -1674,6 +1680,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
# Python built with Py_TRACE_REFS fail with a fatal error in
|
# Python built with Py_TRACE_REFS fail with a fatal error in
|
||||||
# _PyRefchain_Trace() on memory allocation error.
|
# _PyRefchain_Trace() on memory allocation error.
|
||||||
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_memory_error_in_PyErr_PrintEx(self):
|
def test_memory_error_in_PyErr_PrintEx(self):
|
||||||
code = """if 1:
|
code = """if 1:
|
||||||
import _testcapi
|
import _testcapi
|
||||||
|
@ -1792,6 +1799,7 @@ class ExceptionTests(unittest.TestCase):
|
||||||
|
|
||||||
gc_collect()
|
gc_collect()
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_memory_error_in_subinterp(self):
|
def test_memory_error_in_subinterp(self):
|
||||||
# gh-109894: subinterpreters shouldn't count on last resort memory error
|
# gh-109894: subinterpreters shouldn't count on last resort memory error
|
||||||
# when MemoryError is raised through PyErr_NoMemory() call,
|
# when MemoryError is raised through PyErr_NoMemory() call,
|
||||||
|
|
|
@ -14,7 +14,7 @@ try:
|
||||||
from _testexternalinspection import PROCESS_VM_READV_SUPPORTED
|
from _testexternalinspection import PROCESS_VM_READV_SUPPORTED
|
||||||
from _testexternalinspection import get_stack_trace
|
from _testexternalinspection import get_stack_trace
|
||||||
except ImportError:
|
except ImportError:
|
||||||
unittest.skip("Test only runs when _testexternalinspection is available")
|
raise unittest.SkipTest("Test only runs when _testexternalinspection is available")
|
||||||
|
|
||||||
def _make_test_script(script_dir, script_basename, source):
|
def _make_test_script(script_dir, script_basename, source):
|
||||||
to_return = make_script(script_dir, script_basename, source)
|
to_return = make_script(script_dir, script_basename, source)
|
||||||
|
|
|
@ -266,6 +266,7 @@ class FaultHandlerTests(unittest.TestCase):
|
||||||
5,
|
5,
|
||||||
'Illegal instruction')
|
'Illegal instruction')
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, 'need _testcapi')
|
||||||
def check_fatal_error_func(self, release_gil):
|
def check_fatal_error_func(self, release_gil):
|
||||||
# Test that Py_FatalError() dumps a traceback
|
# Test that Py_FatalError() dumps a traceback
|
||||||
with support.SuppressCrashReport():
|
with support.SuppressCrashReport():
|
||||||
|
|
|
@ -117,7 +117,9 @@ class TestFcntl(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_fcntl_bad_file_overflow(self):
|
def test_fcntl_bad_file_overflow(self):
|
||||||
from _testcapi import INT_MAX, INT_MIN
|
_testcapi = import_module("_testcapi")
|
||||||
|
INT_MAX = _testcapi.INT_MAX
|
||||||
|
INT_MIN = _testcapi.INT_MIN
|
||||||
# Issue 15989
|
# Issue 15989
|
||||||
with self.assertRaises(OverflowError):
|
with self.assertRaises(OverflowError):
|
||||||
fcntl.fcntl(INT_MAX + 1, fcntl.F_SETFL, os.O_NONBLOCK)
|
fcntl.fcntl(INT_MAX + 1, fcntl.F_SETFL, os.O_NONBLOCK)
|
||||||
|
@ -189,7 +191,7 @@ class TestFcntl(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_flock_overflow(self):
|
def test_flock_overflow(self):
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
self.assertRaises(OverflowError, fcntl.flock, _testcapi.INT_MAX+1,
|
self.assertRaises(OverflowError, fcntl.flock, _testcapi.INT_MAX+1,
|
||||||
fcntl.LOCK_SH)
|
fcntl.LOCK_SH)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ from test.support.os_helper import (
|
||||||
TESTFN, TESTFN_ASCII, TESTFN_UNICODE, make_bad_fd,
|
TESTFN, TESTFN_ASCII, TESTFN_UNICODE, make_bad_fd,
|
||||||
)
|
)
|
||||||
from test.support.warnings_helper import check_warnings
|
from test.support.warnings_helper import check_warnings
|
||||||
|
from test.support.import_helper import import_module
|
||||||
from collections import UserList
|
from collections import UserList
|
||||||
|
|
||||||
import _io # C implementation of io
|
import _io # C implementation of io
|
||||||
|
@ -597,7 +598,7 @@ class COtherFileTests(OtherFileTests, unittest.TestCase):
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def testInvalidFd_overflow(self):
|
def testInvalidFd_overflow(self):
|
||||||
# Issue 15989
|
# Issue 15989
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
self.assertRaises(TypeError, self.FileIO, _testcapi.INT_MAX + 1)
|
self.assertRaises(TypeError, self.FileIO, _testcapi.INT_MAX + 1)
|
||||||
self.assertRaises(TypeError, self.FileIO, _testcapi.INT_MIN - 1)
|
self.assertRaises(TypeError, self.FileIO, _testcapi.INT_MIN - 1)
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ except ImportError:
|
||||||
def with_tp_del(cls):
|
def with_tp_del(cls):
|
||||||
class C(object):
|
class C(object):
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
raise TypeError('requires _testcapi.with_tp_del')
|
raise unittest.SkipTest('requires _testcapi.with_tp_del')
|
||||||
return C
|
return C
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -22,7 +22,7 @@ except ImportError:
|
||||||
def without_gc(cls):
|
def without_gc(cls):
|
||||||
class C:
|
class C:
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
raise TypeError('requires _testcapi.without_gc')
|
raise unittest.SkipTest('requires _testcapi.without_gc')
|
||||||
return C
|
return C
|
||||||
|
|
||||||
from test import support
|
from test import support
|
||||||
|
|
|
@ -4,6 +4,7 @@ import sys
|
||||||
import re
|
import re
|
||||||
import test.support as support
|
import test.support as support
|
||||||
import unittest
|
import unittest
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
maxsize = support.MAX_Py_ssize_t
|
maxsize = support.MAX_Py_ssize_t
|
||||||
|
|
||||||
|
@ -478,7 +479,8 @@ class FormatTest(unittest.TestCase):
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_precision_c_limits(self):
|
def test_precision_c_limits(self):
|
||||||
from _testcapi import INT_MAX
|
_testcapi = import_module("_testcapi")
|
||||||
|
INT_MAX = _testcapi.INT_MAX
|
||||||
|
|
||||||
f = 1.2
|
f = 1.2
|
||||||
with self.assertRaises(ValueError) as cm:
|
with self.assertRaises(ValueError) as cm:
|
||||||
|
|
|
@ -16,17 +16,16 @@ import time
|
||||||
import weakref
|
import weakref
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
import _testcapi
|
||||||
from _testcapi import with_tp_del
|
from _testcapi import with_tp_del
|
||||||
|
from _testcapi import ContainerNoGC
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
_testcapi = None
|
||||||
def with_tp_del(cls):
|
def with_tp_del(cls):
|
||||||
class C(object):
|
class C(object):
|
||||||
def __new__(cls, *args, **kwargs):
|
def __new__(cls, *args, **kwargs):
|
||||||
raise TypeError('requires _testcapi.with_tp_del')
|
raise unittest.SkipTest('requires _testcapi.with_tp_del')
|
||||||
return C
|
return C
|
||||||
|
|
||||||
try:
|
|
||||||
from _testcapi import ContainerNoGC
|
|
||||||
except ImportError:
|
|
||||||
ContainerNoGC = None
|
ContainerNoGC = None
|
||||||
|
|
||||||
### Support code
|
### Support code
|
||||||
|
@ -681,6 +680,7 @@ class GCTests(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
@requires_subprocess()
|
@requires_subprocess()
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_garbage_at_shutdown(self):
|
def test_garbage_at_shutdown(self):
|
||||||
import subprocess
|
import subprocess
|
||||||
code = """if 1:
|
code = """if 1:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
|
|
||||||
class TestMROEntry(unittest.TestCase):
|
class TestMROEntry(unittest.TestCase):
|
||||||
|
@ -277,7 +278,9 @@ class TestClassGetitem(unittest.TestCase):
|
||||||
class CAPITest(unittest.TestCase):
|
class CAPITest(unittest.TestCase):
|
||||||
|
|
||||||
def test_c_class(self):
|
def test_c_class(self):
|
||||||
from _testcapi import Generic, GenericAlias
|
_testcapi = import_module("_testcapi")
|
||||||
|
Generic = _testcapi.Generic
|
||||||
|
GenericAlias = _testcapi.GenericAlias
|
||||||
self.assertIsInstance(Generic.__class_getitem__(int), GenericAlias)
|
self.assertIsInstance(Generic.__class_getitem__(int), GenericAlias)
|
||||||
|
|
||||||
IntGeneric = Generic[int]
|
IntGeneric = Generic[int]
|
||||||
|
|
|
@ -33,7 +33,7 @@ from test.support import (
|
||||||
is_wasi, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS)
|
is_wasi, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS)
|
||||||
from test.support.import_helper import (
|
from test.support.import_helper import (
|
||||||
forget, make_legacy_pyc, unlink, unload, ready_to_import,
|
forget, make_legacy_pyc, unlink, unload, ready_to_import,
|
||||||
DirsOnSysPath, CleanImport)
|
DirsOnSysPath, CleanImport, import_module)
|
||||||
from test.support.os_helper import (
|
from test.support.os_helper import (
|
||||||
TESTFN, rmtree, temp_umask, TESTFN_UNENCODABLE)
|
TESTFN, rmtree, temp_umask, TESTFN_UNENCODABLE)
|
||||||
from test.support import script_helper
|
from test.support import script_helper
|
||||||
|
@ -363,7 +363,7 @@ class ImportTests(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_from_import_missing_attr_has_name_and_so_path(self):
|
def test_from_import_missing_attr_has_name_and_so_path(self):
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
with self.assertRaises(ImportError) as cm:
|
with self.assertRaises(ImportError) as cm:
|
||||||
from _testcapi import i_dont_exist
|
from _testcapi import i_dont_exist
|
||||||
self.assertEqual(cm.exception.name, '_testcapi')
|
self.assertEqual(cm.exception.name, '_testcapi')
|
||||||
|
@ -1870,6 +1870,7 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
f'ImportError: module {name} does not support loading in subinterpreters',
|
f'ImportError: module {name} does not support loading in subinterpreters',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_builtin_compat(self):
|
def test_builtin_compat(self):
|
||||||
# For now we avoid using sys or builtins
|
# For now we avoid using sys or builtins
|
||||||
# since they still don't implement multi-phase init.
|
# since they still don't implement multi-phase init.
|
||||||
|
@ -1881,6 +1882,7 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
self.check_compatible_here(module, strict=True)
|
self.check_compatible_here(module, strict=True)
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_frozen_compat(self):
|
def test_frozen_compat(self):
|
||||||
module = '_frozen_importlib'
|
module = '_frozen_importlib'
|
||||||
require_frozen(module, skip=True)
|
require_frozen(module, skip=True)
|
||||||
|
@ -1951,6 +1953,7 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
self.check_compatible_here(modname, filename,
|
self.check_compatible_here(modname, filename,
|
||||||
strict=False, isolated=False)
|
strict=False, isolated=False)
|
||||||
|
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_python_compat(self):
|
def test_python_compat(self):
|
||||||
module = 'threading'
|
module = 'threading'
|
||||||
require_pure_python(module)
|
require_pure_python(module)
|
||||||
|
@ -1996,6 +1999,7 @@ class SubinterpImportTests(unittest.TestCase):
|
||||||
with self.subTest('config: check disabled; override: disabled'):
|
with self.subTest('config: check disabled; override: disabled'):
|
||||||
check_compatible(False, -1)
|
check_compatible(False, -1)
|
||||||
|
|
||||||
|
@unittest.skipIf(_testinternalcapi is None, "requires _testinternalcapi")
|
||||||
def test_isolated_config(self):
|
def test_isolated_config(self):
|
||||||
module = 'threading'
|
module = 'threading'
|
||||||
require_pure_python(module)
|
require_pure_python(module)
|
||||||
|
@ -2741,7 +2745,7 @@ class CAPITests(unittest.TestCase):
|
||||||
def test_pyimport_addmodule(self):
|
def test_pyimport_addmodule(self):
|
||||||
# gh-105922: Test PyImport_AddModuleRef(), PyImport_AddModule()
|
# gh-105922: Test PyImport_AddModuleRef(), PyImport_AddModule()
|
||||||
# and PyImport_AddModuleObject()
|
# and PyImport_AddModuleObject()
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
for name in (
|
for name in (
|
||||||
'sys', # frozen module
|
'sys', # frozen module
|
||||||
'test', # package
|
'test', # package
|
||||||
|
@ -2751,7 +2755,7 @@ class CAPITests(unittest.TestCase):
|
||||||
|
|
||||||
def test_pyimport_addmodule_create(self):
|
def test_pyimport_addmodule_create(self):
|
||||||
# gh-105922: Test PyImport_AddModuleRef(), create a new module
|
# gh-105922: Test PyImport_AddModuleRef(), create a new module
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
name = 'dontexist'
|
name = 'dontexist'
|
||||||
self.assertNotIn(name, sys.modules)
|
self.assertNotIn(name, sys.modules)
|
||||||
self.addCleanup(unload, name)
|
self.addCleanup(unload, name)
|
||||||
|
|
|
@ -15,6 +15,8 @@ import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import types
|
import types
|
||||||
|
|
||||||
|
_testsinglephase = import_helper.import_module("_testsinglephase")
|
||||||
|
|
||||||
|
|
||||||
BUILTINS = types.SimpleNamespace()
|
BUILTINS = types.SimpleNamespace()
|
||||||
BUILTINS.good_name = None
|
BUILTINS.good_name = None
|
||||||
|
|
|
@ -32,7 +32,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
ThreadPoolExecutor = None
|
ThreadPoolExecutor = None
|
||||||
|
|
||||||
from test.support import cpython_only
|
from test.support import cpython_only, import_helper
|
||||||
from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ
|
from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ
|
||||||
from test.support.import_helper import DirsOnSysPath, ready_to_import
|
from test.support.import_helper import DirsOnSysPath, ready_to_import
|
||||||
from test.support.os_helper import TESTFN, temp_cwd
|
from test.support.os_helper import TESTFN, temp_cwd
|
||||||
|
@ -668,7 +668,10 @@ class TestRetrievingSourceCode(GetSourceBase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_c_cleandoc(self):
|
def test_c_cleandoc(self):
|
||||||
import _testinternalcapi
|
try:
|
||||||
|
import _testinternalcapi
|
||||||
|
except ImportError:
|
||||||
|
return unittest.skip("requires _testinternalcapi")
|
||||||
func = _testinternalcapi.compiler_cleandoc
|
func = _testinternalcapi.compiler_cleandoc
|
||||||
for i, (input, expected) in enumerate(self.cleandoc_testdata):
|
for i, (input, expected) in enumerate(self.cleandoc_testdata):
|
||||||
with self.subTest(i=i):
|
with self.subTest(i=i):
|
||||||
|
@ -1220,7 +1223,7 @@ class TestClassesAndFunctions(unittest.TestCase):
|
||||||
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
||||||
"Signature information for builtins requires docstrings")
|
"Signature information for builtins requires docstrings")
|
||||||
def test_getfullargspec_builtin_func(self):
|
def test_getfullargspec_builtin_func(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
builtin = _testcapi.docstring_with_signature_with_defaults
|
builtin = _testcapi.docstring_with_signature_with_defaults
|
||||||
spec = inspect.getfullargspec(builtin)
|
spec = inspect.getfullargspec(builtin)
|
||||||
self.assertEqual(spec.defaults[0], 'avocado')
|
self.assertEqual(spec.defaults[0], 'avocado')
|
||||||
|
@ -1229,7 +1232,7 @@ class TestClassesAndFunctions(unittest.TestCase):
|
||||||
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
||||||
"Signature information for builtins requires docstrings")
|
"Signature information for builtins requires docstrings")
|
||||||
def test_getfullargspec_builtin_func_no_signature(self):
|
def test_getfullargspec_builtin_func_no_signature(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
builtin = _testcapi.docstring_no_signature
|
builtin = _testcapi.docstring_no_signature
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError):
|
||||||
inspect.getfullargspec(builtin)
|
inspect.getfullargspec(builtin)
|
||||||
|
@ -2890,7 +2893,7 @@ class TestSignatureObject(unittest.TestCase):
|
||||||
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
||||||
"Signature information for builtins requires docstrings")
|
"Signature information for builtins requires docstrings")
|
||||||
def test_signature_on_builtins(self):
|
def test_signature_on_builtins(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
|
|
||||||
def test_unbound_method(o):
|
def test_unbound_method(o):
|
||||||
"""Use this to test unbound methods (things that should have a self)"""
|
"""Use this to test unbound methods (things that should have a self)"""
|
||||||
|
@ -2971,7 +2974,7 @@ class TestSignatureObject(unittest.TestCase):
|
||||||
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
@unittest.skipIf(MISSING_C_DOCSTRINGS,
|
||||||
"Signature information for builtins requires docstrings")
|
"Signature information for builtins requires docstrings")
|
||||||
def test_signature_on_decorated_builtins(self):
|
def test_signature_on_decorated_builtins(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
func = _testcapi.docstring_with_signature_with_defaults
|
func = _testcapi.docstring_with_signature_with_defaults
|
||||||
|
|
||||||
def decorator(func):
|
def decorator(func):
|
||||||
|
@ -2992,7 +2995,7 @@ class TestSignatureObject(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_signature_on_builtins_no_signature(self):
|
def test_signature_on_builtins_no_signature(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
with self.assertRaisesRegex(ValueError,
|
with self.assertRaisesRegex(ValueError,
|
||||||
'no signature found for builtin'):
|
'no signature found for builtin'):
|
||||||
inspect.signature(_testcapi.docstring_no_signature)
|
inspect.signature(_testcapi.docstring_no_signature)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import unittest
|
||||||
import asyncio
|
import asyncio
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import requires_specialization, script_helper
|
from test.support import requires_specialization, script_helper
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
PAIR = (0,1)
|
PAIR = (0,1)
|
||||||
|
|
||||||
|
@ -1829,15 +1830,15 @@ class TestRegressions(MonitoringTestBase, unittest.TestCase):
|
||||||
class TestOptimizer(MonitoringTestBase, unittest.TestCase):
|
class TestOptimizer(MonitoringTestBase, unittest.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
import _testinternalcapi
|
_testinternalcapi = import_module("_testinternalcapi")
|
||||||
self.old_opt = _testinternalcapi.get_optimizer()
|
self.old_opt = _testinternalcapi.get_optimizer()
|
||||||
opt = _testinternalcapi.new_counter_optimizer()
|
opt = _testinternalcapi.new_counter_optimizer()
|
||||||
_testinternalcapi.set_optimizer(opt)
|
_testinternalcapi.set_optimizer(opt)
|
||||||
super(TestOptimizer, self).setUp()
|
super(TestOptimizer, self).setUp()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
import _testinternalcapi
|
|
||||||
super(TestOptimizer, self).tearDown()
|
super(TestOptimizer, self).tearDown()
|
||||||
|
import _testinternalcapi
|
||||||
_testinternalcapi.set_optimizer(self.old_opt)
|
_testinternalcapi.set_optimizer(self.old_opt)
|
||||||
|
|
||||||
def test_for_loop(self):
|
def test_for_loop(self):
|
||||||
|
|
|
@ -12,6 +12,7 @@ import unittest
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
from test.support.os_helper import TESTFN
|
from test.support.os_helper import TESTFN
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
ALL_CJKENCODINGS = [
|
ALL_CJKENCODINGS = [
|
||||||
# _codecs_cn
|
# _codecs_cn
|
||||||
|
@ -212,7 +213,7 @@ class Test_IncrementalEncoder(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_subinterp(self):
|
def test_subinterp(self):
|
||||||
# bpo-42846: Test a CJK codec in a subinterpreter
|
# bpo-42846: Test a CJK codec in a subinterpreter
|
||||||
import _testcapi
|
_testcapi = import_module("_testcapi")
|
||||||
encoding = 'cp932'
|
encoding = 'cp932'
|
||||||
text = "Python の開発は、1990 年ごろから開始されています。"
|
text = "Python の開発は、1990 年ごろから開始されています。"
|
||||||
code = textwrap.dedent("""
|
code = textwrap.dedent("""
|
||||||
|
|
|
@ -5,12 +5,13 @@ import threading
|
||||||
import types
|
import types
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import threading_helper, check_impl_detail, requires_specialization
|
from test.support import threading_helper, check_impl_detail, requires_specialization
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
# Skip this module on other interpreters, it is cpython specific:
|
# Skip this module on other interpreters, it is cpython specific:
|
||||||
if check_impl_detail(cpython=False):
|
if check_impl_detail(cpython=False):
|
||||||
raise unittest.SkipTest('implementation detail specific to cpython')
|
raise unittest.SkipTest('implementation detail specific to cpython')
|
||||||
|
|
||||||
import _testinternalcapi
|
_testinternalcapi = import_module("_testinternalcapi")
|
||||||
|
|
||||||
|
|
||||||
def disabling_optimizer(func):
|
def disabling_optimizer(func):
|
||||||
|
|
|
@ -57,8 +57,10 @@ try:
|
||||||
except (ImportError, AttributeError):
|
except (ImportError, AttributeError):
|
||||||
all_users = []
|
all_users = []
|
||||||
try:
|
try:
|
||||||
|
import _testcapi
|
||||||
from _testcapi import INT_MAX, PY_SSIZE_T_MAX
|
from _testcapi import INT_MAX, PY_SSIZE_T_MAX
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
_testcapi = None
|
||||||
INT_MAX = PY_SSIZE_T_MAX = sys.maxsize
|
INT_MAX = PY_SSIZE_T_MAX = sys.maxsize
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -5338,6 +5340,7 @@ class ForkTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipUnless(sys.platform in ("linux", "android", "darwin"),
|
@unittest.skipUnless(sys.platform in ("linux", "android", "darwin"),
|
||||||
"Only Linux and macOS detect this today.")
|
"Only Linux and macOS detect this today.")
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_fork_warns_when_non_python_thread_exists(self):
|
def test_fork_warns_when_non_python_thread_exists(self):
|
||||||
code = """if 1:
|
code = """if 1:
|
||||||
import os, threading, warnings
|
import os, threading, warnings
|
||||||
|
|
|
@ -2,7 +2,11 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from _testinternalcapi import perf_map_state_teardown, write_perf_map_entry
|
try:
|
||||||
|
from _testinternalcapi import perf_map_state_teardown, write_perf_map_entry
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testinternalcapi")
|
||||||
|
|
||||||
|
|
||||||
if sys.platform != 'linux':
|
if sys.platform != 'linux':
|
||||||
raise unittest.SkipTest('Linux only')
|
raise unittest.SkipTest('Linux only')
|
||||||
|
|
|
@ -172,7 +172,10 @@ class PollTests(unittest.TestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_poll_c_limits(self):
|
def test_poll_c_limits(self):
|
||||||
from _testcapi import USHRT_MAX, INT_MAX, UINT_MAX
|
try:
|
||||||
|
from _testcapi import USHRT_MAX, INT_MAX, UINT_MAX
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testcapi")
|
||||||
pollster = select.poll()
|
pollster = select.poll()
|
||||||
pollster.register(1)
|
pollster.register(1)
|
||||||
|
|
||||||
|
|
|
@ -1372,7 +1372,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
@requires_docstrings
|
@requires_docstrings
|
||||||
def test_module_level_callable_unrepresentable_default(self):
|
def test_module_level_callable_unrepresentable_default(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
builtin = _testcapi.func_with_unrepresentable_signature
|
builtin = _testcapi.func_with_unrepresentable_signature
|
||||||
self.assertEqual(self._get_summary_line(builtin),
|
self.assertEqual(self._get_summary_line(builtin),
|
||||||
"func_with_unrepresentable_signature(a, b=<x>)")
|
"func_with_unrepresentable_signature(a, b=<x>)")
|
||||||
|
@ -1382,7 +1382,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
def test_builtin_staticmethod_unrepresentable_default(self):
|
def test_builtin_staticmethod_unrepresentable_default(self):
|
||||||
self.assertEqual(self._get_summary_line(str.maketrans),
|
self.assertEqual(self._get_summary_line(str.maketrans),
|
||||||
"maketrans(x, y=<unrepresentable>, z=<unrepresentable>, /)")
|
"maketrans(x, y=<unrepresentable>, z=<unrepresentable>, /)")
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
||||||
self.assertEqual(self._get_summary_line(cls.staticmeth),
|
self.assertEqual(self._get_summary_line(cls.staticmeth),
|
||||||
"staticmeth(a, b=<x>)")
|
"staticmeth(a, b=<x>)")
|
||||||
|
@ -1393,7 +1393,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
self.assertEqual(self._get_summary_line(dict.pop),
|
self.assertEqual(self._get_summary_line(dict.pop),
|
||||||
"pop(self, key, default=<unrepresentable>, /) "
|
"pop(self, key, default=<unrepresentable>, /) "
|
||||||
"unbound builtins.dict method")
|
"unbound builtins.dict method")
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
||||||
self.assertEqual(self._get_summary_line(cls.meth),
|
self.assertEqual(self._get_summary_line(cls.meth),
|
||||||
"meth(self, /, a, b=<x>) unbound "
|
"meth(self, /, a, b=<x>) unbound "
|
||||||
|
@ -1405,7 +1405,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
self.assertEqual(self._get_summary_line({}.pop),
|
self.assertEqual(self._get_summary_line({}.pop),
|
||||||
"pop(key, default=<unrepresentable>, /) "
|
"pop(key, default=<unrepresentable>, /) "
|
||||||
"method of builtins.dict instance")
|
"method of builtins.dict instance")
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
obj = _testcapi.DocStringUnrepresentableSignatureTest()
|
obj = _testcapi.DocStringUnrepresentableSignatureTest()
|
||||||
self.assertEqual(self._get_summary_line(obj.meth),
|
self.assertEqual(self._get_summary_line(obj.meth),
|
||||||
"meth(a, b=<x>) "
|
"meth(a, b=<x>) "
|
||||||
|
@ -1414,7 +1414,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
@requires_docstrings
|
@requires_docstrings
|
||||||
def test_unbound_builtin_classmethod_unrepresentable_default(self):
|
def test_unbound_builtin_classmethod_unrepresentable_default(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
||||||
descr = cls.__dict__['classmeth']
|
descr = cls.__dict__['classmeth']
|
||||||
self.assertEqual(self._get_summary_line(descr),
|
self.assertEqual(self._get_summary_line(descr),
|
||||||
|
@ -1424,7 +1424,7 @@ class TestDescriptions(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
@requires_docstrings
|
@requires_docstrings
|
||||||
def test_bound_builtin_classmethod_unrepresentable_default(self):
|
def test_bound_builtin_classmethod_unrepresentable_default(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
cls = _testcapi.DocStringUnrepresentableSignatureTest
|
||||||
self.assertEqual(self._get_summary_line(cls.classmeth),
|
self.assertEqual(self._get_summary_line(cls.classmeth),
|
||||||
"classmeth(a, b=<x>) class method of "
|
"classmeth(a, b=<x>) class method of "
|
||||||
|
|
|
@ -1742,6 +1742,10 @@ class ArgsTestCase(BaseTestCase):
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_uncollectable(self):
|
def test_uncollectable(self):
|
||||||
|
try:
|
||||||
|
import _testcapi
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testcapi")
|
||||||
code = textwrap.dedent(r"""
|
code = textwrap.dedent(r"""
|
||||||
import _testcapi
|
import _testcapi
|
||||||
import gc
|
import gc
|
||||||
|
@ -2124,6 +2128,10 @@ class ArgsTestCase(BaseTestCase):
|
||||||
|
|
||||||
def check_add_python_opts(self, option):
|
def check_add_python_opts(self, option):
|
||||||
# --fast-ci and --slow-ci add "-u -W default -bb -E" options to Python
|
# --fast-ci and --slow-ci add "-u -W default -bb -E" options to Python
|
||||||
|
try:
|
||||||
|
import _testinternalcapi
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testinternalcapi")
|
||||||
code = textwrap.dedent(r"""
|
code = textwrap.dedent(r"""
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
|
|
@ -8,6 +8,7 @@ from textwrap import dedent
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import cpython_only, has_subprocess_support, SuppressCrashReport
|
from test.support import cpython_only, has_subprocess_support, SuppressCrashReport
|
||||||
from test.support.script_helper import kill_python
|
from test.support.script_helper import kill_python
|
||||||
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
|
|
||||||
if not has_subprocess_support:
|
if not has_subprocess_support:
|
||||||
|
@ -64,6 +65,7 @@ class TestInteractiveInterpreter(unittest.TestCase):
|
||||||
# _PyRefchain_Trace() on memory allocation error.
|
# _PyRefchain_Trace() on memory allocation error.
|
||||||
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
@unittest.skipIf(support.Py_TRACE_REFS, 'cannot test Py_TRACE_REFS build')
|
||||||
def test_no_memory(self):
|
def test_no_memory(self):
|
||||||
|
import_module("_testcapi")
|
||||||
# Issue #30696: Fix the interactive interpreter looping endlessly when
|
# Issue #30696: Fix the interactive interpreter looping endlessly when
|
||||||
# no memory. Check also that the fix does not break the interactive
|
# no memory. Check also that the fix does not break the interactive
|
||||||
# loop when an exception is raised.
|
# loop when an exception is raised.
|
||||||
|
|
|
@ -3,7 +3,6 @@ from test import support
|
||||||
from test.support import (
|
from test.support import (
|
||||||
is_apple, os_helper, refleak_helper, socket_helper, threading_helper
|
is_apple, os_helper, refleak_helper, socket_helper, threading_helper
|
||||||
)
|
)
|
||||||
|
|
||||||
import _thread as thread
|
import _thread as thread
|
||||||
import array
|
import array
|
||||||
import contextlib
|
import contextlib
|
||||||
|
@ -37,6 +36,10 @@ try:
|
||||||
import fcntl
|
import fcntl
|
||||||
except ImportError:
|
except ImportError:
|
||||||
fcntl = None
|
fcntl = None
|
||||||
|
try:
|
||||||
|
import _testcapi
|
||||||
|
except ImportError:
|
||||||
|
_testcapi = None
|
||||||
|
|
||||||
support.requires_working_socket(module=True)
|
support.requires_working_socket(module=True)
|
||||||
|
|
||||||
|
@ -1173,6 +1176,7 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
self.assertRaises(OverflowError, func, 1<<34)
|
self.assertRaises(OverflowError, func, 1<<34)
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def testNtoHErrors(self):
|
def testNtoHErrors(self):
|
||||||
import _testcapi
|
import _testcapi
|
||||||
s_good_values = [0, 1, 2, 0xffff]
|
s_good_values = [0, 1, 2, 0xffff]
|
||||||
|
@ -1638,6 +1642,7 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
except socket.gaierror:
|
except socket.gaierror:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_getaddrinfo_int_port_overflow(self):
|
def test_getaddrinfo_int_port_overflow(self):
|
||||||
# gh-74895: Test that getaddrinfo does not raise OverflowError on port.
|
# gh-74895: Test that getaddrinfo does not raise OverflowError on port.
|
||||||
#
|
#
|
||||||
|
@ -1831,6 +1836,7 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
srv.listen()
|
srv.listen()
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def test_listen_backlog_overflow(self):
|
def test_listen_backlog_overflow(self):
|
||||||
# Issue 15989
|
# Issue 15989
|
||||||
import _testcapi
|
import _testcapi
|
||||||
|
@ -2712,22 +2718,29 @@ class BasicTCPTest(SocketConnectedTest):
|
||||||
def _testDup(self):
|
def _testDup(self):
|
||||||
self.serv_conn.send(MSG)
|
self.serv_conn.send(MSG)
|
||||||
|
|
||||||
def testShutdown(self):
|
def check_shutdown(self):
|
||||||
# Testing shutdown()
|
# Test shutdown() helper
|
||||||
msg = self.cli_conn.recv(1024)
|
msg = self.cli_conn.recv(1024)
|
||||||
self.assertEqual(msg, MSG)
|
self.assertEqual(msg, MSG)
|
||||||
# wait for _testShutdown to finish: on OS X, when the server
|
# wait for _testShutdown[_overflow] to finish: on OS X, when the server
|
||||||
# closes the connection the client also becomes disconnected,
|
# closes the connection the client also becomes disconnected,
|
||||||
# and the client's shutdown call will fail. (Issue #4397.)
|
# and the client's shutdown call will fail. (Issue #4397.)
|
||||||
self.done.wait()
|
self.done.wait()
|
||||||
|
|
||||||
|
def testShutdown(self):
|
||||||
|
self.check_shutdown()
|
||||||
|
|
||||||
def _testShutdown(self):
|
def _testShutdown(self):
|
||||||
self.serv_conn.send(MSG)
|
self.serv_conn.send(MSG)
|
||||||
self.serv_conn.shutdown(2)
|
self.serv_conn.shutdown(2)
|
||||||
|
|
||||||
testShutdown_overflow = support.cpython_only(testShutdown)
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
|
def testShutdown_overflow(self):
|
||||||
|
self.check_shutdown()
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def _testShutdown_overflow(self):
|
def _testShutdown_overflow(self):
|
||||||
import _testcapi
|
import _testcapi
|
||||||
self.serv_conn.send(MSG)
|
self.serv_conn.send(MSG)
|
||||||
|
@ -4884,6 +4897,7 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
|
@unittest.skipIf(_testcapi is None, "requires _testcapi")
|
||||||
def testSetBlocking_overflow(self):
|
def testSetBlocking_overflow(self):
|
||||||
# Issue 15989
|
# Issue 15989
|
||||||
import _testcapi
|
import _testcapi
|
||||||
|
|
|
@ -34,8 +34,7 @@ from test.support import (
|
||||||
is_apple, is_emscripten, is_wasi
|
is_apple, is_emscripten, is_wasi
|
||||||
)
|
)
|
||||||
from test.support import gc_collect
|
from test.support import gc_collect
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper, import_helper
|
||||||
from _testcapi import INT_MAX, ULLONG_MAX
|
|
||||||
from os import SEEK_SET, SEEK_CUR, SEEK_END
|
from os import SEEK_SET, SEEK_CUR, SEEK_END
|
||||||
from test.support.os_helper import TESTFN, TESTFN_UNDECODABLE, unlink, temp_dir, FakePath
|
from test.support.os_helper import TESTFN, TESTFN_UNDECODABLE, unlink, temp_dir, FakePath
|
||||||
|
|
||||||
|
@ -1202,7 +1201,6 @@ class BlobTests(unittest.TestCase):
|
||||||
def test_blob_seek_error(self):
|
def test_blob_seek_error(self):
|
||||||
msg_oor = "offset out of blob range"
|
msg_oor = "offset out of blob range"
|
||||||
msg_orig = "'origin' should be os.SEEK_SET, os.SEEK_CUR, or os.SEEK_END"
|
msg_orig = "'origin' should be os.SEEK_SET, os.SEEK_CUR, or os.SEEK_END"
|
||||||
msg_of = "seek offset results in overflow"
|
|
||||||
|
|
||||||
dataset = (
|
dataset = (
|
||||||
(ValueError, msg_oor, lambda: self.blob.seek(1000)),
|
(ValueError, msg_oor, lambda: self.blob.seek(1000)),
|
||||||
|
@ -1214,12 +1212,15 @@ class BlobTests(unittest.TestCase):
|
||||||
with self.subTest(exc=exc, msg=msg, fn=fn):
|
with self.subTest(exc=exc, msg=msg, fn=fn):
|
||||||
self.assertRaisesRegex(exc, msg, fn)
|
self.assertRaisesRegex(exc, msg, fn)
|
||||||
|
|
||||||
|
def test_blob_seek_overflow_error(self):
|
||||||
# Force overflow errors
|
# Force overflow errors
|
||||||
|
msg_of = "seek offset results in overflow"
|
||||||
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
self.blob.seek(1, SEEK_SET)
|
self.blob.seek(1, SEEK_SET)
|
||||||
with self.assertRaisesRegex(OverflowError, msg_of):
|
with self.assertRaisesRegex(OverflowError, msg_of):
|
||||||
self.blob.seek(INT_MAX, SEEK_CUR)
|
self.blob.seek(_testcapi.INT_MAX, SEEK_CUR)
|
||||||
with self.assertRaisesRegex(OverflowError, msg_of):
|
with self.assertRaisesRegex(OverflowError, msg_of):
|
||||||
self.blob.seek(INT_MAX, SEEK_END)
|
self.blob.seek(_testcapi.INT_MAX, SEEK_END)
|
||||||
|
|
||||||
def test_blob_read(self):
|
def test_blob_read(self):
|
||||||
buf = self.blob.read()
|
buf = self.blob.read()
|
||||||
|
@ -1379,14 +1380,17 @@ class BlobTests(unittest.TestCase):
|
||||||
with self.subTest(idx=idx):
|
with self.subTest(idx=idx):
|
||||||
with self.assertRaisesRegex(IndexError, "index out of range"):
|
with self.assertRaisesRegex(IndexError, "index out of range"):
|
||||||
self.blob[idx]
|
self.blob[idx]
|
||||||
with self.assertRaisesRegex(IndexError, "cannot fit 'int'"):
|
|
||||||
self.blob[ULLONG_MAX]
|
|
||||||
|
|
||||||
# Provoke read error
|
# Provoke read error
|
||||||
self.cx.execute("update test set b='aaaa' where rowid=1")
|
self.cx.execute("update test set b='aaaa' where rowid=1")
|
||||||
with self.assertRaises(sqlite.OperationalError):
|
with self.assertRaises(sqlite.OperationalError):
|
||||||
self.blob[0]
|
self.blob[0]
|
||||||
|
|
||||||
|
def test_blob_get_item_error_bigint(self):
|
||||||
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
|
with self.assertRaisesRegex(IndexError, "cannot fit 'int'"):
|
||||||
|
self.blob[_testcapi.ULLONG_MAX]
|
||||||
|
|
||||||
def test_blob_set_item_error(self):
|
def test_blob_set_item_error(self):
|
||||||
with self.assertRaisesRegex(TypeError, "cannot be interpreted"):
|
with self.assertRaisesRegex(TypeError, "cannot be interpreted"):
|
||||||
self.blob[0] = b"multiple"
|
self.blob[0] = b"multiple"
|
||||||
|
|
|
@ -6,7 +6,10 @@
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import import_module
|
||||||
from _testcapi import get_feature_macros
|
try:
|
||||||
|
from _testcapi import get_feature_macros
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testcapi")
|
||||||
|
|
||||||
feature_macros = get_feature_macros()
|
feature_macros = get_feature_macros()
|
||||||
|
|
||||||
|
|
|
@ -1390,7 +1390,7 @@ class SizeofTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.P = struct.calcsize('P')
|
self.P = struct.calcsize('P')
|
||||||
self.longdigit = sys.int_info.sizeof_digit
|
self.longdigit = sys.int_info.sizeof_digit
|
||||||
import _testinternalcapi
|
_testinternalcapi = import_helper.import_module("_testinternalcapi")
|
||||||
self.gc_headsize = _testinternalcapi.SIZEOF_PYGC_HEAD
|
self.gc_headsize = _testinternalcapi.SIZEOF_PYGC_HEAD
|
||||||
self.managed_pre_header_size = _testinternalcapi.SIZEOF_MANAGED_PRE_HEADER
|
self.managed_pre_header_size = _testinternalcapi.SIZEOF_MANAGED_PRE_HEADER
|
||||||
|
|
||||||
|
|
|
@ -959,6 +959,7 @@ class ThreadTests(BaseTestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_frame_tstate_tracing(self):
|
def test_frame_tstate_tracing(self):
|
||||||
|
_testcapi = import_module("_testcapi")
|
||||||
# Issue #14432: Crash when a generator is created in a C thread that is
|
# Issue #14432: Crash when a generator is created in a C thread that is
|
||||||
# destroyed while the generator is still used. The issue was that a
|
# destroyed while the generator is still used. The issue was that a
|
||||||
# generator contains a frame, and the frame kept a reference to the
|
# generator contains a frame, and the frame kept a reference to the
|
||||||
|
@ -986,7 +987,6 @@ class ThreadTests(BaseTestCase):
|
||||||
threading.settrace(noop_trace)
|
threading.settrace(noop_trace)
|
||||||
|
|
||||||
# Create a generator in a C thread which exits after the call
|
# Create a generator in a C thread which exits after the call
|
||||||
import _testcapi
|
|
||||||
_testcapi.call_in_temporary_c_thread(callback)
|
_testcapi.call_in_temporary_c_thread(callback)
|
||||||
|
|
||||||
# Call the generator in a different Python thread, check that the
|
# Call the generator in a different Python thread, check that the
|
||||||
|
@ -1490,6 +1490,7 @@ class SubinterpThreadingTests(BaseTestCase):
|
||||||
|
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_daemon_threads_fatal_error(self):
|
def test_daemon_threads_fatal_error(self):
|
||||||
|
import_module("_testcapi")
|
||||||
subinterp_code = f"""if 1:
|
subinterp_code = f"""if 1:
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
|
@ -1516,6 +1517,7 @@ class SubinterpThreadingTests(BaseTestCase):
|
||||||
daemon_allowed=True,
|
daemon_allowed=True,
|
||||||
daemon=False,
|
daemon=False,
|
||||||
):
|
):
|
||||||
|
import_module("_testinternalcapi")
|
||||||
subinterp_code = textwrap.dedent(f"""
|
subinterp_code = textwrap.dedent(f"""
|
||||||
import test.support
|
import test.support
|
||||||
import threading
|
import threading
|
||||||
|
|
|
@ -35,6 +35,7 @@ class TestMakefile(unittest.TestCase):
|
||||||
result.append(line.replace('\\', '').strip())
|
result.append(line.replace('\\', '').strip())
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@unittest.skipUnless(support.TEST_MODULES_ENABLED, "requires test modules")
|
||||||
def test_makefile_test_folders(self):
|
def test_makefile_test_folders(self):
|
||||||
test_dirs = self.list_test_dirs()
|
test_dirs = self.list_test_dirs()
|
||||||
idle_test = 'idlelib/idle_test'
|
idle_test = 'idlelib/idle_test'
|
||||||
|
|
|
@ -14,6 +14,7 @@ import random
|
||||||
from test import support
|
from test import support
|
||||||
from test.support import script_helper, ALWAYS_EQ
|
from test.support import script_helper, ALWAYS_EQ
|
||||||
from test.support import gc_collect
|
from test.support import gc_collect
|
||||||
|
from test.support import import_helper
|
||||||
from test.support import threading_helper
|
from test.support import threading_helper
|
||||||
|
|
||||||
# Used in ReferencesTestCase.test_ref_created_during_del() .
|
# Used in ReferencesTestCase.test_ref_created_during_del() .
|
||||||
|
@ -161,7 +162,7 @@ class ReferencesTestCase(TestBase):
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_cfunction(self):
|
def test_cfunction(self):
|
||||||
import _testcapi
|
_testcapi = import_helper.import_module("_testcapi")
|
||||||
create_cfunction = _testcapi.create_cfunction
|
create_cfunction = _testcapi.create_cfunction
|
||||||
f = create_cfunction()
|
f = create_cfunction()
|
||||||
wr = weakref.ref(f)
|
wr = weakref.ref(f)
|
||||||
|
|
|
@ -275,7 +275,10 @@ def gen_ctypes_test(manifest, args, outfile):
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import import_module
|
||||||
from _testcapi import get_feature_macros
|
try:
|
||||||
|
from _testcapi import get_feature_macros
|
||||||
|
except ImportError:
|
||||||
|
raise unittest.SkipTest("requires _testcapi")
|
||||||
|
|
||||||
feature_macros = get_feature_macros()
|
feature_macros = get_feature_macros()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue