Skip to content

Commit

Permalink
pythongh-116417: Move 4 limited C API test files to _testlimitedcapi (p…
Browse files Browse the repository at this point in the history
…ython#116571)

Move the following files from Modules/_testcapi/ to
Modules/_testlimitedcapi/:

* bytearray.c
* bytes.c
* pyos.c
* sys.c

Changes:

* Replace PyBytes_AS_STRING() with PyBytes_AsString().
* Replace PyBytes_GET_SIZE() with PyBytes_Size().
* Update related test_capi tests.
* Copy Modules/_testcapi/util.h to Modules/_testlimitedcapi/util.h.
  • Loading branch information
vstinner authored and adorilson committed Mar 25, 2024
1 parent 0eb6d3b commit 236233a
Show file tree
Hide file tree
Showing 17 changed files with 101 additions and 80 deletions.
18 changes: 9 additions & 9 deletions Lib/test/test_capi/test_bytearray.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import unittest
from test.support import import_helper

_testcapi = import_helper.import_module('_testcapi')
_testlimitedcapi = import_helper.import_module('_testlimitedcapi')
from _testcapi import PY_SSIZE_T_MIN, PY_SSIZE_T_MAX

NULL = None
Expand All @@ -19,7 +19,7 @@ def __bytes__(self):
class CAPITest(unittest.TestCase):
def test_check(self):
# Test PyByteArray_Check()
check = _testcapi.bytearray_check
check = _testlimitedcapi.bytearray_check
self.assertTrue(check(bytearray(b'abc')))
self.assertFalse(check(b'abc'))
self.assertTrue(check(ByteArraySubclass(b'abc')))
Expand All @@ -32,7 +32,7 @@ def test_check(self):

def test_checkexact(self):
# Test PyByteArray_CheckExact()
check = _testcapi.bytearray_checkexact
check = _testlimitedcapi.bytearray_checkexact
self.assertTrue(check(bytearray(b'abc')))
self.assertFalse(check(b'abc'))
self.assertFalse(check(ByteArraySubclass(b'abc')))
Expand All @@ -45,7 +45,7 @@ def test_checkexact(self):

def test_fromstringandsize(self):
# Test PyByteArray_FromStringAndSize()
fromstringandsize = _testcapi.bytearray_fromstringandsize
fromstringandsize = _testlimitedcapi.bytearray_fromstringandsize

self.assertEqual(fromstringandsize(b'abc'), bytearray(b'abc'))
self.assertEqual(fromstringandsize(b'abc', 2), bytearray(b'ab'))
Expand All @@ -62,7 +62,7 @@ def test_fromstringandsize(self):

def test_fromobject(self):
# Test PyByteArray_FromObject()
fromobject = _testcapi.bytearray_fromobject
fromobject = _testlimitedcapi.bytearray_fromobject

self.assertEqual(fromobject(b'abc'), bytearray(b'abc'))
self.assertEqual(fromobject(bytearray(b'abc')), bytearray(b'abc'))
Expand All @@ -77,7 +77,7 @@ def test_fromobject(self):

def test_size(self):
# Test PyByteArray_Size()
size = _testcapi.bytearray_size
size = _testlimitedcapi.bytearray_size

self.assertEqual(size(bytearray(b'abc')), 3)
self.assertEqual(size(ByteArraySubclass(b'abc')), 3)
Expand All @@ -88,7 +88,7 @@ def test_size(self):

def test_asstring(self):
"""Test PyByteArray_AsString()"""
asstring = _testcapi.bytearray_asstring
asstring = _testlimitedcapi.bytearray_asstring

self.assertEqual(asstring(bytearray(b'abc'), 4), b'abc\0')
self.assertEqual(asstring(ByteArraySubclass(b'abc'), 4), b'abc\0')
Expand All @@ -100,7 +100,7 @@ def test_asstring(self):

def test_concat(self):
"""Test PyByteArray_Concat()"""
concat = _testcapi.bytearray_concat
concat = _testlimitedcapi.bytearray_concat

ba = bytearray(b'abc')
self.assertEqual(concat(ba, b'def'), bytearray(b'abcdef'))
Expand Down Expand Up @@ -133,7 +133,7 @@ def test_concat(self):

def test_resize(self):
"""Test PyByteArray_Resize()"""
resize = _testcapi.bytearray_resize
resize = _testlimitedcapi.bytearray_resize

ba = bytearray(b'abcdef')
self.assertEqual(resize(ba, 3), 0)
Expand Down
28 changes: 14 additions & 14 deletions Lib/test/test_capi/test_bytes.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import unittest
from test.support import import_helper

_testcapi = import_helper.import_module('_testcapi')
_testlimitedcapi = import_helper.import_module('_testlimitedcapi')
from _testcapi import PY_SSIZE_T_MIN, PY_SSIZE_T_MAX

NULL = None
Expand All @@ -19,7 +19,7 @@ def __bytes__(self):
class CAPITest(unittest.TestCase):
def test_check(self):
# Test PyBytes_Check()
check = _testcapi.bytes_check
check = _testlimitedcapi.bytes_check
self.assertTrue(check(b'abc'))
self.assertFalse(check('abc'))
self.assertFalse(check(bytearray(b'abc')))
Expand All @@ -33,7 +33,7 @@ def test_check(self):

def test_checkexact(self):
# Test PyBytes_CheckExact()
check = _testcapi.bytes_checkexact
check = _testlimitedcapi.bytes_checkexact
self.assertTrue(check(b'abc'))
self.assertFalse(check('abc'))
self.assertFalse(check(bytearray(b'abc')))
Expand All @@ -47,7 +47,7 @@ def test_checkexact(self):

def test_fromstringandsize(self):
# Test PyBytes_FromStringAndSize()
fromstringandsize = _testcapi.bytes_fromstringandsize
fromstringandsize = _testlimitedcapi.bytes_fromstringandsize

self.assertEqual(fromstringandsize(b'abc'), b'abc')
self.assertEqual(fromstringandsize(b'abc', 2), b'ab')
Expand All @@ -65,7 +65,7 @@ def test_fromstringandsize(self):

def test_fromstring(self):
# Test PyBytes_FromString()
fromstring = _testcapi.bytes_fromstring
fromstring = _testlimitedcapi.bytes_fromstring

self.assertEqual(fromstring(b'abc\0def'), b'abc')
self.assertEqual(fromstring(b''), b'')
Expand All @@ -74,7 +74,7 @@ def test_fromstring(self):

def test_fromobject(self):
# Test PyBytes_FromObject()
fromobject = _testcapi.bytes_fromobject
fromobject = _testlimitedcapi.bytes_fromobject

self.assertEqual(fromobject(b'abc'), b'abc')
self.assertEqual(fromobject(bytearray(b'abc')), b'abc')
Expand All @@ -88,7 +88,7 @@ def test_fromobject(self):

def test_size(self):
# Test PyBytes_Size()
size = _testcapi.bytes_size
size = _testlimitedcapi.bytes_size

self.assertEqual(size(b'abc'), 3)
self.assertEqual(size(BytesSubclass(b'abc')), 3)
Expand All @@ -100,7 +100,7 @@ def test_size(self):

def test_asstring(self):
"""Test PyBytes_AsString()"""
asstring = _testcapi.bytes_asstring
asstring = _testlimitedcapi.bytes_asstring

self.assertEqual(asstring(b'abc', 4), b'abc\0')
self.assertEqual(asstring(b'abc\0def', 8), b'abc\0def\0')
Expand All @@ -111,8 +111,8 @@ def test_asstring(self):

def test_asstringandsize(self):
"""Test PyBytes_AsStringAndSize()"""
asstringandsize = _testcapi.bytes_asstringandsize
asstringandsize_null = _testcapi.bytes_asstringandsize_null
asstringandsize = _testlimitedcapi.bytes_asstringandsize
asstringandsize_null = _testlimitedcapi.bytes_asstringandsize_null

self.assertEqual(asstringandsize(b'abc', 4), (b'abc\0', 3))
self.assertEqual(asstringandsize(b'abc\0def', 8), (b'abc\0def\0', 7))
Expand All @@ -128,7 +128,7 @@ def test_asstringandsize(self):

def test_repr(self):
# Test PyBytes_Repr()
bytes_repr = _testcapi.bytes_repr
bytes_repr = _testlimitedcapi.bytes_repr

self.assertEqual(bytes_repr(b'''abc''', 0), r"""b'abc'""")
self.assertEqual(bytes_repr(b'''abc''', 1), r"""b'abc'""")
Expand All @@ -149,7 +149,7 @@ def test_repr(self):
def test_concat(self, concat=None):
"""Test PyBytes_Concat()"""
if concat is None:
concat = _testcapi.bytes_concat
concat = _testlimitedcapi.bytes_concat

self.assertEqual(concat(b'abc', b'def'), b'abcdef')
self.assertEqual(concat(b'a\0b', b'c\0d'), b'a\0bc\0d')
Expand Down Expand Up @@ -182,11 +182,11 @@ def test_concat(self, concat=None):

def test_concatanddel(self):
"""Test PyBytes_ConcatAndDel()"""
self.test_concat(_testcapi.bytes_concatanddel)
self.test_concat(_testlimitedcapi.bytes_concatanddel)

def test_decodeescape(self):
"""Test PyBytes_DecodeEscape()"""
decodeescape = _testcapi.bytes_decodeescape
decodeescape = _testlimitedcapi.bytes_decodeescape

self.assertEqual(decodeescape(b'abc'), b'abc')
self.assertEqual(decodeescape(br'\t\n\r\x0b\x0c\x00\\\'\"'),
Expand Down
16 changes: 8 additions & 8 deletions Lib/test/test_capi/test_sys.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
from test.support import import_helper

try:
import _testcapi
import _testlimitedcapi
except ImportError:
_testcapi = None
_testlimitedcapi = None

NULL = None

Expand All @@ -20,10 +20,10 @@ class CAPITest(unittest.TestCase):
maxDiff = None

@support.cpython_only
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
@unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module')
def test_sys_getobject(self):
# Test PySys_GetObject()
getobject = _testcapi.sys_getobject
getobject = _testlimitedcapi.sys_getobject

self.assertIs(getobject(b'stdout'), sys.stdout)
with support.swap_attr(sys, '\U0001f40d', 42):
Expand All @@ -38,10 +38,10 @@ def test_sys_getobject(self):
# CRASHES getobject(NULL)

@support.cpython_only
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
@unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module')
def test_sys_setobject(self):
# Test PySys_SetObject()
setobject = _testcapi.sys_setobject
setobject = _testlimitedcapi.sys_setobject

value = ['value']
value2 = ['value2']
Expand Down Expand Up @@ -70,10 +70,10 @@ def test_sys_setobject(self):
# CRASHES setobject(NULL, value)

@support.cpython_only
@unittest.skipIf(_testcapi is None, 'need _testcapi module')
@unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module')
def test_sys_getxoptions(self):
# Test PySys_GetXOptions()
getxoptions = _testcapi.sys_getxoptions
getxoptions = _testlimitedcapi.sys_getxoptions

self.assertIs(getxoptions(), sys._xoptions)

Expand Down
4 changes: 2 additions & 2 deletions Modules/Setup.stdlib.in
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,8 @@
@MODULE__XXTESTFUZZ_TRUE@_xxtestfuzz _xxtestfuzz/_xxtestfuzz.c _xxtestfuzz/fuzzer.c
@MODULE__TESTBUFFER_TRUE@_testbuffer _testbuffer.c
@MODULE__TESTINTERNALCAPI_TRUE@_testinternalcapi _testinternalcapi.c _testinternalcapi/test_lock.c _testinternalcapi/pytime.c _testinternalcapi/set.c _testinternalcapi/test_critical_sections.c
@MODULE__TESTCAPI_TRUE@_testcapi _testcapimodule.c _testcapi/vectorcall.c _testcapi/heaptype.c _testcapi/abstract.c _testcapi/bytearray.c _testcapi/bytes.c _testcapi/unicode.c _testcapi/dict.c _testcapi/set.c _testcapi/list.c _testcapi/tuple.c _testcapi/getargs.c _testcapi/datetime.c _testcapi/docstring.c _testcapi/mem.c _testcapi/watchers.c _testcapi/long.c _testcapi/float.c _testcapi/complex.c _testcapi/numbers.c _testcapi/structmember.c _testcapi/exceptions.c _testcapi/code.c _testcapi/buffer.c _testcapi/pyatomic.c _testcapi/pyos.c _testcapi/file.c _testcapi/codec.c _testcapi/immortal.c _testcapi/gc.c _testcapi/sys.c _testcapi/hash.c _testcapi/time.c
@MODULE__TESTLIMITEDCAPI_TRUE@_testlimitedcapi _testlimitedcapi.c _testlimitedcapi/vectorcall_limited.c _testlimitedcapi/heaptype_relative.c
@MODULE__TESTCAPI_TRUE@_testcapi _testcapimodule.c _testcapi/vectorcall.c _testcapi/heaptype.c _testcapi/abstract.c _testcapi/unicode.c _testcapi/dict.c _testcapi/set.c _testcapi/list.c _testcapi/tuple.c _testcapi/getargs.c _testcapi/datetime.c _testcapi/docstring.c _testcapi/mem.c _testcapi/watchers.c _testcapi/long.c _testcapi/float.c _testcapi/complex.c _testcapi/numbers.c _testcapi/structmember.c _testcapi/exceptions.c _testcapi/code.c _testcapi/buffer.c _testcapi/pyatomic.c _testcapi/file.c _testcapi/codec.c _testcapi/immortal.c _testcapi/gc.c _testcapi/hash.c _testcapi/time.c
@MODULE__TESTLIMITEDCAPI_TRUE@_testlimitedcapi _testlimitedcapi.c _testlimitedcapi/bytearray.c _testlimitedcapi/bytes.c _testlimitedcapi/heaptype_relative.c _testlimitedcapi/pyos.c _testlimitedcapi/sys.c _testlimitedcapi/vectorcall_limited.c
@MODULE__TESTCLINIC_TRUE@_testclinic _testclinic.c
@MODULE__TESTCLINIC_LIMITED_TRUE@_testclinic_limited _testclinic_limited.c

Expand Down
4 changes: 0 additions & 4 deletions Modules/_testcapi/parts.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@
int _PyTestCapi_Init_Vectorcall(PyObject *module);
int _PyTestCapi_Init_Heaptype(PyObject *module);
int _PyTestCapi_Init_Abstract(PyObject *module);
int _PyTestCapi_Init_ByteArray(PyObject *module);
int _PyTestCapi_Init_Bytes(PyObject *module);
int _PyTestCapi_Init_Unicode(PyObject *module);
int _PyTestCapi_Init_GetArgs(PyObject *module);
int _PyTestCapi_Init_DateTime(PyObject *module);
Expand All @@ -52,12 +50,10 @@ int _PyTestCapi_Init_Exceptions(PyObject *module);
int _PyTestCapi_Init_Code(PyObject *module);
int _PyTestCapi_Init_Buffer(PyObject *module);
int _PyTestCapi_Init_PyAtomic(PyObject *module);
int _PyTestCapi_Init_PyOS(PyObject *module);
int _PyTestCapi_Init_File(PyObject *module);
int _PyTestCapi_Init_Codec(PyObject *module);
int _PyTestCapi_Init_Immortal(PyObject *module);
int _PyTestCapi_Init_GC(PyObject *module);
int _PyTestCapi_Init_Sys(PyObject *module);
int _PyTestCapi_Init_Hash(PyObject *module);
int _PyTestCapi_Init_Time(PyObject *module);

Expand Down
12 changes: 0 additions & 12 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -4017,12 +4017,6 @@ PyInit__testcapi(void)
if (_PyTestCapi_Init_Abstract(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_ByteArray(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Bytes(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Unicode(m) < 0) {
return NULL;
}
Expand Down Expand Up @@ -4077,18 +4071,12 @@ PyInit__testcapi(void)
if (_PyTestCapi_Init_Buffer(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_PyOS(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_File(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Codec(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Sys(m) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Immortal(m) < 0) {
return NULL;
}
Expand Down
14 changes: 13 additions & 1 deletion Modules/_testlimitedcapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,23 @@ PyInit__testlimitedcapi(void)
return NULL;
}

if (_PyTestCapi_Init_VectorcallLimited(mod) < 0) {
if (_PyTestCapi_Init_ByteArray(mod) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Bytes(mod) < 0) {
return NULL;
}
if (_PyTestCapi_Init_HeaptypeRelative(mod) < 0) {
return NULL;
}
if (_PyTestCapi_Init_PyOS(mod) < 0) {
return NULL;
}
if (_PyTestCapi_Init_Sys(mod) < 0) {
return NULL;
}
if (_PyTestCapi_Init_VectorcallLimited(mod) < 0) {
return NULL;
}
return mod;
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,8 @@ bytes_concat(PyObject *Py_UNUSED(module), PyObject *args)
if (new) {
assert(left != NULL);
assert(PyBytes_CheckExact(left));
left = PyBytes_FromStringAndSize(PyBytes_AS_STRING(left),
PyBytes_GET_SIZE(left));
left = PyBytes_FromStringAndSize(PyBytes_AsString(left),
PyBytes_Size(left));
if (left == NULL) {
return NULL;
}
Expand Down Expand Up @@ -191,8 +191,8 @@ bytes_concatanddel(PyObject *Py_UNUSED(module), PyObject *args)
if (new) {
assert(left != NULL);
assert(PyBytes_CheckExact(left));
left = PyBytes_FromStringAndSize(PyBytes_AS_STRING(left),
PyBytes_GET_SIZE(left));
left = PyBytes_FromStringAndSize(PyBytes_AsString(left),
PyBytes_Size(left));
if (left == NULL) {
return NULL;
}
Expand Down
6 changes: 5 additions & 1 deletion Modules/_testlimitedcapi/parts.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@
# error "Py_BUILD_CORE macro must not be defined"
#endif

int _PyTestCapi_Init_VectorcallLimited(PyObject *module);
int _PyTestCapi_Init_ByteArray(PyObject *module);
int _PyTestCapi_Init_Bytes(PyObject *module);
int _PyTestCapi_Init_HeaptypeRelative(PyObject *module);
int _PyTestCapi_Init_PyOS(PyObject *module);
int _PyTestCapi_Init_Sys(PyObject *module);
int _PyTestCapi_Init_VectorcallLimited(PyObject *module);

#endif // Py_TESTLIMITEDCAPI_PARTS_H
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 236233a

Please sign in to comment.