ext/Internal/extension-object-test.cpp (35 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) #include "extension-object.h" #include "gtest/gtest.h" #include "capi.h" #include "linked-list.h" #include "test-utils.h" namespace py { namespace testing { using ExtensionObjectTest = RuntimeFixture; TEST_F(ExtensionObjectTest, TrackExtensionObjectAndUntrackExtensionObject) { ListEntry entry0{nullptr, nullptr}; ListEntry entry1{nullptr, nullptr}; EXPECT_EQ(numExtensionObjects(runtime_), 0); EXPECT_TRUE(trackExtensionObject(runtime_, &entry0)); EXPECT_EQ(numExtensionObjects(runtime_), 1); EXPECT_TRUE(trackExtensionObject(runtime_, &entry1)); EXPECT_EQ(numExtensionObjects(runtime_), 2); // Trying to track an already tracked object returns false. EXPECT_FALSE(trackExtensionObject(runtime_, &entry0)); EXPECT_EQ(numExtensionObjects(runtime_), 2); EXPECT_FALSE(trackExtensionObject(runtime_, &entry1)); EXPECT_EQ(numExtensionObjects(runtime_), 2); EXPECT_TRUE(untrackExtensionObject(runtime_, &entry0)); EXPECT_EQ(numExtensionObjects(runtime_), 1); EXPECT_TRUE(untrackExtensionObject(runtime_, &entry1)); EXPECT_EQ(numExtensionObjects(runtime_), 0); // Trying to untrack an already untracked object returns false. EXPECT_FALSE(untrackExtensionObject(runtime_, &entry0)); EXPECT_EQ(numExtensionObjects(runtime_), 0); EXPECT_FALSE(untrackExtensionObject(runtime_, &entry1)); EXPECT_EQ(numExtensionObjects(runtime_), 0); // Verify untracked entires are reset to nullptr. EXPECT_EQ(entry0.prev, nullptr); EXPECT_EQ(entry0.next, nullptr); EXPECT_EQ(entry1.prev, nullptr); EXPECT_EQ(entry1.next, nullptr); } } // namespace testing } // namespace py