Skip to content

Commit 404ae9b

Browse files
committed
Add test for bytearray buffer
1 parent cec0d0d commit 404ae9b

File tree

1 file changed

+43
-0
lines changed
  • graalpython/com.oracle.graal.python.test/src/tests/cpyext

1 file changed

+43
-0
lines changed

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_bytes.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,3 +337,46 @@ def compile_module(self, name):
337337
callfunction="resize_bytes",
338338
cmpfunc=unhandled_error_compare
339339
)
340+
341+
test_bytearray_buffer = CPyExtFunction(
342+
lambda args: args[1],
343+
lambda: (
344+
(bytearray(b"hello_world"), b"Hello_worlds"),
345+
),
346+
code="""
347+
PyObject* test_buffer(PyObject* bytes, PyObject* expected) {
348+
Py_buffer buffer;
349+
PyObject* ret;
350+
if (PyObject_GetBuffer(bytes, &buffer, PyBUF_SIMPLE | PyBUF_WRITABLE) != 0)
351+
return NULL;
352+
*(char*)buffer.buf = 'H';
353+
Py_ssize_t len = PyObject_Size(bytes);
354+
if (len == -1)
355+
goto error_release;
356+
ret = PyObject_CallMethod(bytes, "insert", "ni", len, 'x');
357+
if (ret != NULL) {
358+
Py_DECREF(ret);
359+
PyErr_SetString(PyExc_AssertionError, "insert didn't raise BufferError");
360+
goto error_release;
361+
}
362+
if (!PyErr_ExceptionMatches(PyExc_BufferError))
363+
goto error_release;
364+
PyErr_Clear();
365+
PyBuffer_Release(&buffer);
366+
ret = PyObject_CallMethod(bytes, "insert", "ni", len, 's');
367+
if (ret == NULL)
368+
return NULL;
369+
Py_DECREF(ret);
370+
Py_INCREF(bytes);
371+
return bytes;
372+
error_release:
373+
PyBuffer_Release(&buffer);
374+
return NULL;
375+
}
376+
""",
377+
resultspec="O",
378+
argspec="OO",
379+
arguments=["PyObject* bytes", "PyObject* expected"],
380+
callfunction="test_buffer",
381+
cmpfunc=unhandled_error_compare
382+
)

0 commit comments

Comments
 (0)