blob: f2334cf9ab7461ba4e833f314862a6fe72458b44 [file] [log] [blame]
// Copyright 2019 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/tree_node.h"
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/base/ptr_util.h"
namespace fxcrt {
class TestTreeNode : public TreeNode<TestTreeNode> {};
// NOTE: Successful cases are covered via RetainedTreeNode tests.
// These tests check that we trip CHECKS given bad calls.
TEST(TreeNode, SelfAppendFirstChild) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
EXPECT_DEATH(pNode->AppendFirstChild(pNode.get()), "");
}
TEST(TreeNode, SelfAppendLastChild) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
EXPECT_DEATH(pNode->AppendLastChild(pNode.get()), "");
}
TEST(TreeNode, SelfInsertBeforeOther) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
auto pOther = pdfium::MakeUnique<TestTreeNode>();
pNode->AppendFirstChild(pOther.get());
EXPECT_DEATH(pNode->InsertBefore(pNode.get(), pOther.get()), "");
}
TEST(TreeNode, InsertOtherBeforeSelf) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
auto pOther = pdfium::MakeUnique<TestTreeNode>();
pNode->AppendFirstChild(pOther.get());
EXPECT_DEATH(pNode->InsertBefore(pOther.get(), pNode.get()), "");
}
TEST(TreeNode, SelfInsertAfterOther) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
auto pOther = pdfium::MakeUnique<TestTreeNode>();
pNode->AppendFirstChild(pOther.get());
EXPECT_DEATH(pNode->InsertBefore(pNode.get(), pOther.get()), "");
}
TEST(TreeNode, InsertOtherAfterSelf) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
auto pOther = pdfium::MakeUnique<TestTreeNode>();
pNode->AppendFirstChild(pOther.get());
EXPECT_DEATH(pNode->InsertBefore(pOther.get(), pNode.get()), "");
}
TEST(TreeNode, RemoveParentless) {
auto pNode = pdfium::MakeUnique<TestTreeNode>();
EXPECT_DEATH(pNode->GetParent()->RemoveChild(pNode.get()), "");
}
TEST(TreeNode, RemoveFromWrongParent) {
auto pGoodParent = pdfium::MakeUnique<TestTreeNode>();
auto pBadParent = pdfium::MakeUnique<TestTreeNode>();
auto pNode = pdfium::MakeUnique<TestTreeNode>();
pGoodParent->AppendFirstChild(pNode.get());
EXPECT_DEATH(pBadParent->RemoveChild(pNode.get()), "");
}
} // namespace fxcrt