this repo has no description
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2#include "Python.h"
3#include "gtest/gtest.h"
4
5#include "capi-fixture.h"
6#include "capi-testing.h"
7
8namespace py {
9namespace testing {
10
11using NamespaceExtensionApiTest = ExtensionApi;
12
13TEST_F(NamespaceExtensionApiTest, NewReturnsNamespaceObject) {
14 PyObjectPtr pynamespace(_PyNamespace_New(nullptr));
15 ASSERT_EQ(PyErr_Occurred(), nullptr);
16
17 PyObjectPtr key0(PyUnicode_FromString("key0"));
18 PyObjectPtr value0(PyLong_FromLong(5));
19 EXPECT_EQ(PyObject_SetAttr(pynamespace, key0, value0), 0);
20
21 PyObjectPtr key1(PyUnicode_FromString("key1"));
22 PyObjectPtr value1(PyUnicode_FromString("value1"));
23 EXPECT_EQ(PyObject_SetAttr(pynamespace, key1, value1), 0);
24
25 PyObjectPtr repr_result(PyObject_Str(pynamespace));
26 ASSERT_EQ(PyErr_Occurred(), nullptr);
27
28 EXPECT_TRUE(
29 isUnicodeEqualsCStr(repr_result, "namespace(key0=5, key1='value1')"));
30}
31
32TEST_F(NamespaceExtensionApiTest,
33 NewWithDictReturnsNamespaceObjectWithAttributes) {
34 PyObjectPtr dict(PyDict_New());
35 PyObjectPtr key(PyUnicode_FromString("key"));
36 PyObjectPtr value(PyLong_FromLong(5));
37 ASSERT_EQ(PyDict_SetItem(dict, key, value), 0);
38
39 PyObjectPtr pynamespace(_PyNamespace_New(dict));
40 ASSERT_EQ(PyErr_Occurred(), nullptr);
41
42 EXPECT_EQ(PyObject_GetAttr(pynamespace, key), value);
43}
44
45} // namespace testing
46} // namespace py