From aee0db0e6a12bdaacebeb8fb791f4e0d45e18a0d Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Thu, 21 Sep 2017 16:53:58 -0400 Subject: Move CFX_UnownedPtr to UnownedPtr This CL moves CFX_UnownedPtr to UnownedPtr and places in the fxcrt namespace. Bug: pdfium:898 Change-Id: I6d1fa463f365e5cb3aafa8c8a7a5f7eff62ed8e0 Reviewed-on: https://pdfium-review.googlesource.com/14620 Reviewed-by: Tom Sepez Commit-Queue: dsinclair --- core/fxcrt/unowned_ptr_unittest.cpp | 142 ++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 core/fxcrt/unowned_ptr_unittest.cpp (limited to 'core/fxcrt/unowned_ptr_unittest.cpp') diff --git a/core/fxcrt/unowned_ptr_unittest.cpp b/core/fxcrt/unowned_ptr_unittest.cpp new file mode 100644 index 0000000000..3fc5308e46 --- /dev/null +++ b/core/fxcrt/unowned_ptr_unittest.cpp @@ -0,0 +1,142 @@ +// Copyright 2017 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "core/fxcrt/unowned_ptr.h" + +#include +#include + +#include "testing/gtest/include/gtest/gtest.h" + +namespace fxcrt { +namespace { + +class Clink { + public: + UnownedPtr next_ = nullptr; +}; + +void DeleteDangling() { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + delete ptr1; + delete ptr2; +} + +void AssignDangling() { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + delete ptr1; + ptr2->next_ = nullptr; + delete ptr2; +} + +void ReleaseDangling() { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + delete ptr1; + ptr2->next_.Release(); + delete ptr2; +} + +} // namespace + +TEST(UnownedPtr, PtrOk) { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + delete ptr2; + delete ptr1; +} + +TEST(UnownedPtr, PtrNotOk) { +#if defined(MEMORY_TOOL_REPLACES_ALLOCATOR) + EXPECT_DEATH(DeleteDangling(), ""); +#else + DeleteDangling(); +#endif +} + +TEST(UnownedPtr, AssignOk) { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + ptr2->next_ = nullptr; + delete ptr2; + delete ptr1; +} + +TEST(UnownedPtr, AssignNotOk) { +#if defined(MEMORY_TOOL_REPLACES_ALLOCATOR) + EXPECT_DEATH(AssignDangling(), ""); +#else + AssignDangling(); +#endif +} + +TEST(UnownedPtr, ReleaseOk) { + Clink* ptr1 = new Clink(); + Clink* ptr2 = new Clink(); + ptr2->next_ = ptr1; + ptr2->next_.Release(); + delete ptr1; + delete ptr2; +} + +TEST(UnownedPtr, ReleaseNotOk) { +#if defined(MEMORY_TOOL_REPLACES_ALLOCATOR) + EXPECT_DEATH(ReleaseDangling(), ""); +#else + ReleaseDangling(); +#endif +} + +TEST(UnownedPtr, OperatorEQ) { + int foo; + UnownedPtr ptr1; + EXPECT_TRUE(ptr1 == ptr1); + + UnownedPtr ptr2; + EXPECT_TRUE(ptr1 == ptr2); + + UnownedPtr ptr3(&foo); + EXPECT_TRUE(&foo == ptr3); + EXPECT_TRUE(ptr3 == &foo); + EXPECT_FALSE(ptr1 == ptr3); + + ptr1 = &foo; + EXPECT_TRUE(ptr1 == ptr3); +} + +TEST(UnownedPtr, OperatorNE) { + int foo; + UnownedPtr ptr1; + EXPECT_FALSE(ptr1 != ptr1); + + UnownedPtr ptr2; + EXPECT_FALSE(ptr1 != ptr2); + + UnownedPtr ptr3(&foo); + EXPECT_FALSE(&foo != ptr3); + EXPECT_FALSE(ptr3 != &foo); + EXPECT_TRUE(ptr1 != ptr3); + + ptr1 = &foo; + EXPECT_FALSE(ptr1 != ptr3); +} + +TEST(UnownedPtr, OperatorLT) { + int foos[2]; + UnownedPtr ptr1(&foos[0]); + UnownedPtr ptr2(&foos[1]); + + EXPECT_FALSE(ptr1 < ptr1); + EXPECT_TRUE(ptr1 < ptr2); + EXPECT_FALSE(ptr2 < ptr1); +} + +} // namespace fxcrt -- cgit v1.2.3