this repo has no description
at trunk 43 lines 1.3 kB view raw
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2#define PY_SSIZE_T_CLEAN 3#include "Python.h" 4 5#include "capi-fixture.h" 6#include "capi-testing.h" 7 8namespace py { 9namespace testing { 10 11using GetArgsSsizeTExtensionApiTest = ExtensionApi; 12 13TEST_F(GetArgsSsizeTExtensionApiTest, ParseTupleStringFromNone) { 14 PyObjectPtr pytuple(PyTuple_New(2)); 15 Py_INCREF(Py_None); 16 ASSERT_NE(-1, PyTuple_SetItem(pytuple, 0, Py_None)); 17 Py_INCREF(Py_None); 18 ASSERT_NE(-1, PyTuple_SetItem(pytuple, 1, Py_None)); 19 20 char *out1, *out2; 21 Py_ssize_t size = 123; 22 EXPECT_TRUE(PyArg_ParseTuple(pytuple, "zz#", &out1, &out2, &size)); 23 EXPECT_EQ(nullptr, out1); 24 EXPECT_EQ(nullptr, out2); 25 EXPECT_EQ(0, size); 26} 27 28TEST_F(GetArgsSsizeTExtensionApiTest, ParseTupleStringWithSize) { 29 PyObjectPtr pytuple(PyTuple_New(2)); 30 ASSERT_NE(-1, PyTuple_SetItem(pytuple, 0, PyUnicode_FromString("hello"))); 31 ASSERT_NE(-1, PyTuple_SetItem(pytuple, 1, PyUnicode_FromString("cpython"))); 32 33 char *out1, *out2; 34 Py_ssize_t size1, size2; 35 EXPECT_TRUE(PyArg_ParseTuple(pytuple, "s#z#", &out1, &size1, &out2, &size2)); 36 EXPECT_STREQ("hello", out1); 37 EXPECT_EQ(5, size1); 38 EXPECT_STREQ("cpython", out2); 39 EXPECT_EQ(7, size2); 40} 41 42} // namespace testing 43} // namespace py