this repo has no description
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2#include "extension-object.h"
3
4#include "gtest/gtest.h"
5
6#include "capi.h"
7#include "linked-list.h"
8#include "test-utils.h"
9
10namespace py {
11namespace testing {
12
13using ExtensionObjectTest = RuntimeFixture;
14
15TEST_F(ExtensionObjectTest, TrackExtensionObjectAndUntrackExtensionObject) {
16 ListEntry entry0{nullptr, nullptr};
17 ListEntry entry1{nullptr, nullptr};
18
19 EXPECT_EQ(numExtensionObjects(runtime_), 0);
20 EXPECT_TRUE(trackExtensionObject(runtime_, &entry0));
21 EXPECT_EQ(numExtensionObjects(runtime_), 1);
22 EXPECT_TRUE(trackExtensionObject(runtime_, &entry1));
23 EXPECT_EQ(numExtensionObjects(runtime_), 2);
24 // Trying to track an already tracked object returns false.
25 EXPECT_FALSE(trackExtensionObject(runtime_, &entry0));
26 EXPECT_EQ(numExtensionObjects(runtime_), 2);
27 EXPECT_FALSE(trackExtensionObject(runtime_, &entry1));
28 EXPECT_EQ(numExtensionObjects(runtime_), 2);
29
30 EXPECT_TRUE(untrackExtensionObject(runtime_, &entry0));
31 EXPECT_EQ(numExtensionObjects(runtime_), 1);
32 EXPECT_TRUE(untrackExtensionObject(runtime_, &entry1));
33 EXPECT_EQ(numExtensionObjects(runtime_), 0);
34
35 // Trying to untrack an already untracked object returns false.
36 EXPECT_FALSE(untrackExtensionObject(runtime_, &entry0));
37 EXPECT_EQ(numExtensionObjects(runtime_), 0);
38 EXPECT_FALSE(untrackExtensionObject(runtime_, &entry1));
39 EXPECT_EQ(numExtensionObjects(runtime_), 0);
40
41 // Verify untracked entires are reset to nullptr.
42 EXPECT_EQ(entry0.prev, nullptr);
43 EXPECT_EQ(entry0.next, nullptr);
44 EXPECT_EQ(entry1.prev, nullptr);
45 EXPECT_EQ(entry1.next, nullptr);
46}
47
48} // namespace testing
49} // namespace py