this repo has no description
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