summaryrefslogtreecommitdiff
path: root/core/fxcrt/xml/cfx_xmlnode_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt/xml/cfx_xmlnode_unittest.cpp')
-rw-r--r--core/fxcrt/xml/cfx_xmlnode_unittest.cpp379
1 files changed, 166 insertions, 213 deletions
diff --git a/core/fxcrt/xml/cfx_xmlnode_unittest.cpp b/core/fxcrt/xml/cfx_xmlnode_unittest.cpp
index 1c69069942..ec56603a58 100644
--- a/core/fxcrt/xml/cfx_xmlnode_unittest.cpp
+++ b/core/fxcrt/xml/cfx_xmlnode_unittest.cpp
@@ -2,274 +2,227 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <utility>
-
#include "core/fxcrt/xml/cfx_xmlelement.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/test_support.h"
-#include "third_party/base/ptr_util.h"
TEST(CFX_XMLNodeTest, GetParent) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
- node1->AppendChild(std::move(child2));
- node2->AppendChild(std::move(child3));
+ node1.AppendChild(&node2);
+ node2.AppendChild(&node3);
- EXPECT_EQ(nullptr, node1->GetParent());
- EXPECT_EQ(node1.get(), node2->GetParent());
- EXPECT_EQ(node2, node3->GetParent());
+ EXPECT_EQ(nullptr, node1.GetParent());
+ EXPECT_EQ(&node1, node2.GetParent());
+ EXPECT_EQ(&node2, node3.GetParent());
}
TEST(CFX_XMLNodeTest, GetRoot) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
+ node1.AppendChild(&node2);
+ node2.AppendChild(&node3);
- node1->AppendChild(std::move(child2));
- node2->AppendChild(std::move(child3));
-
- EXPECT_EQ(node1.get(), node1->GetRoot());
- EXPECT_EQ(node1.get(), node2->GetRoot());
- EXPECT_EQ(node1.get(), node3->GetRoot());
+ EXPECT_EQ(&node1, node1.GetRoot());
+ EXPECT_EQ(&node1, node2.GetRoot());
+ EXPECT_EQ(&node1, node3.GetRoot());
}
TEST(CFX_XMLNodeTest, GetChildren) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
- CFX_XMLElement* node4 = child4.get();
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
+ CFX_XMLElement node4(L"node4");
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child4));
- node2->AppendChild(std::move(child3));
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node4);
+ node2.AppendChild(&node3);
- EXPECT_EQ(node2, node1->GetFirstChild());
+ EXPECT_EQ(&node2, node1.GetFirstChild());
- EXPECT_EQ(node4, node2->GetNextSibling());
- EXPECT_EQ(node3, node2->GetFirstChild());
+ EXPECT_EQ(&node4, node2.GetNextSibling());
+ EXPECT_EQ(&node3, node2.GetFirstChild());
- EXPECT_TRUE(node3->GetNextSibling() == nullptr);
- EXPECT_TRUE(node3->GetFirstChild() == nullptr);
+ EXPECT_TRUE(node3.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node3.GetFirstChild() == nullptr);
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
- EXPECT_TRUE(node4->GetFirstChild() == nullptr);
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node4.GetFirstChild() == nullptr);
}
TEST(CFX_XMLNodeTest, DeleteChildren) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
-
- CFX_XMLElement* node2 = child2.get();
- // CFX_XMLElement* node3 = child3.get();
- // CFX_XMLElement* node4 = child4.get();
-
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child4));
- node2->AppendChild(std::move(child3));
-
- node1->DeleteChildren();
- EXPECT_TRUE(node1->GetFirstChild() == nullptr);
- EXPECT_TRUE(node1->GetLastChildForTesting() == nullptr);
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
+ CFX_XMLElement node4(L"node4");
- // TODO(dsinclair): This isn't true currently but will be true when
- // we own the nodes in an XML document. (Currently nodes are unique_ptrs
- // so the objects have been deleted by this point.)
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node4);
+ node2.AppendChild(&node3);
- // EXPECT_TRUE(node2->GetParent() == nullptr);
- // EXPECT_TRUE(node4->GetParent() == nullptr);
+ node1.DeleteChildren();
+ EXPECT_TRUE(node1.GetFirstChild() == nullptr);
+ EXPECT_TRUE(node2.GetParent() == nullptr);
+ EXPECT_TRUE(node4.GetParent() == nullptr);
- // // node2 and node4 should no longer be siblings.
- // EXPECT_TRUE(node2->GetNextSibling() == nullptr);
- // EXPECT_TRUE(node4->GetPrevSiblingForTesting() == nullptr);
+ // node2 and node4 should no longer be siblings.
+ EXPECT_TRUE(node2.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node4.GetPrevSiblingForTesting() == nullptr);
// Deleting children doesn't change deleted substructure
- // EXPECT_EQ(node3, node2->GetFirstChild());
- // EXPECT_TRUE(node3->GetParent() == node2);
+ EXPECT_EQ(&node3, node2.GetFirstChild());
+ EXPECT_TRUE(node3.GetParent() == &node2);
}
TEST(CFX_XMLNodeTest, AddingChildren) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
- auto child5 = pdfium::MakeUnique<CFX_XMLElement>(L"node5");
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
- CFX_XMLElement* node4 = child4.get();
- CFX_XMLElement* node5 = child5.get();
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node3);
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child3));
+ EXPECT_EQ(&node1, node2.GetParent());
+ EXPECT_EQ(&node1, node3.GetParent());
- EXPECT_EQ(node1.get(), node2->GetParent());
- EXPECT_EQ(node1.get(), node3->GetParent());
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node3, node2->GetNextSibling());
- EXPECT_TRUE(node3->GetNextSibling() == nullptr);
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node3, node2.GetNextSibling());
+ EXPECT_TRUE(node3.GetNextSibling() == nullptr);
// Insert to negative appends.
- node1->InsertChildNode(std::move(child4), -1);
- EXPECT_EQ(node1.get(), node4->GetParent());
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
-
- node1->InsertChildNode(std::move(child5), 1);
- EXPECT_EQ(node1.get(), node5->GetParent());
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node5, node2->GetNextSibling());
- EXPECT_EQ(node3, node5->GetNextSibling());
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
+ CFX_XMLElement node4(L"node4");
+ node1.InsertChildNode(&node4, -1);
+ EXPECT_EQ(&node1, node4.GetParent());
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+
+ CFX_XMLElement node5(L"node5");
+ node1.InsertChildNode(&node5, 1);
+ EXPECT_EQ(&node1, node5.GetParent());
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node5, node2.GetNextSibling());
+ EXPECT_EQ(&node3, node5.GetNextSibling());
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+}
+
+#ifndef NDEBUG
+TEST(CFX_XMLNodeTest, DuplicateInsertOfNode) {
+ CFX_XMLElement node1(L"node");
+ CFX_XMLElement node2(L"node2");
+
+ node1.AppendChild(&node2);
+ EXPECT_DEATH(node1.AppendChild(&node2), "");
}
+#endif // NDEBUG
TEST(CFX_XMLNodeTest, RemovingMiddleChild) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
- CFX_XMLElement* node4 = child4.get();
-
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child3));
- node1->AppendChild(std::move(child4));
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node3, node2->GetNextSibling());
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
-
- node1->RemoveChildNode(node3);
- // Node is released by parent, so need to take ownership
- child3 = pdfium::WrapUnique(node3);
-
- EXPECT_TRUE(node3->GetParent() == nullptr);
- EXPECT_TRUE(node3->GetNextSibling() == nullptr);
- EXPECT_TRUE(node3->GetPrevSiblingForTesting() == nullptr);
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node4, node2->GetNextSibling());
- EXPECT_EQ(node2, node4->GetPrevSiblingForTesting());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
+ CFX_XMLElement node1(L"node1");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
+ CFX_XMLElement node4(L"node4");
+
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node3);
+ node1.AppendChild(&node4);
+
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node3, node2.GetNextSibling());
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+
+ node1.RemoveChildNode(&node3);
+ EXPECT_TRUE(node3.GetParent() == nullptr);
+ EXPECT_TRUE(node3.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node3.GetPrevSiblingForTesting() == nullptr);
+
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node4, node2.GetNextSibling());
+ EXPECT_EQ(&node2, node4.GetPrevSiblingForTesting());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
}
TEST(CFX_XMLNodeTest, RemovingFirstChild) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
- CFX_XMLElement* node4 = child4.get();
-
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child3));
- node1->AppendChild(std::move(child4));
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node3, node2->GetNextSibling());
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
-
- node1->RemoveChildNode(node2);
- // Node is released by parent, so need to take ownership
- child2 = pdfium::WrapUnique(node2);
-
- EXPECT_TRUE(node2->GetParent() == nullptr);
- EXPECT_TRUE(node2->GetNextSibling() == nullptr);
- EXPECT_TRUE(node2->GetPrevSiblingForTesting() == nullptr);
-
- EXPECT_EQ(node3, node1->GetFirstChild());
- EXPECT_TRUE(node3->GetPrevSiblingForTesting() == nullptr);
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
+ CFX_XMLElement node1(L"node1");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
+ CFX_XMLElement node4(L"node4");
+
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node3);
+ node1.AppendChild(&node4);
+
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node3, node2.GetNextSibling());
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+
+ node1.RemoveChildNode(&node2);
+ EXPECT_TRUE(node2.GetParent() == nullptr);
+ EXPECT_TRUE(node2.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node2.GetPrevSiblingForTesting() == nullptr);
+
+ EXPECT_EQ(&node3, node1.GetFirstChild());
+ EXPECT_TRUE(node3.GetPrevSiblingForTesting() == nullptr);
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
}
TEST(CFX_XMLNodeTest, RemovingLastChild) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
- auto child4 = pdfium::MakeUnique<CFX_XMLElement>(L"node4");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
- CFX_XMLElement* node4 = child4.get();
-
- node1->AppendChild(std::move(child2));
- node1->AppendChild(std::move(child3));
- node1->AppendChild(std::move(child4));
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node3, node2->GetNextSibling());
- EXPECT_EQ(node4, node3->GetNextSibling());
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
-
- node1->RemoveChildNode(node4);
- // Node is released by parent, so need to take ownership
- child4 = pdfium::WrapUnique(node4);
-
- EXPECT_TRUE(node4->GetParent() == nullptr);
- EXPECT_TRUE(node4->GetNextSibling() == nullptr);
- EXPECT_TRUE(node4->GetPrevSiblingForTesting() == nullptr);
-
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_EQ(node3, node2->GetNextSibling());
- EXPECT_TRUE(node3->GetNextSibling() == nullptr);
+ CFX_XMLElement node1(L"node1");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
+ CFX_XMLElement node4(L"node4");
+
+ node1.AppendChild(&node2);
+ node1.AppendChild(&node3);
+ node1.AppendChild(&node4);
+
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node3, node2.GetNextSibling());
+ EXPECT_EQ(&node4, node3.GetNextSibling());
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+
+ node1.RemoveChildNode(&node4);
+ EXPECT_TRUE(node4.GetParent() == nullptr);
+ EXPECT_TRUE(node4.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node4.GetPrevSiblingForTesting() == nullptr);
+
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_EQ(&node3, node2.GetNextSibling());
+ EXPECT_TRUE(node3.GetNextSibling() == nullptr);
}
TEST(CFX_XMLNodeTest, RemovingOnlyChild) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
+ CFX_XMLElement node1(L"node1");
+ CFX_XMLElement node2(L"node2");
- CFX_XMLElement* node2 = child2.get();
+ node1.AppendChild(&node2);
- node1->AppendChild(std::move(child2));
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_TRUE(node2.GetNextSibling() == nullptr);
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_TRUE(node2->GetNextSibling() == nullptr);
+ node1.RemoveChildNode(&node2);
+ EXPECT_TRUE(node2.GetParent() == nullptr);
- node1->RemoveChildNode(node2);
- // Node is released by parent, so need to take ownership
- child2 = pdfium::WrapUnique(node2);
-
- EXPECT_TRUE(node2->GetParent() == nullptr);
-
- EXPECT_TRUE(node1->GetFirstChild() == nullptr);
- EXPECT_TRUE(node2->GetNextSibling() == nullptr);
- EXPECT_TRUE(node2->GetPrevSiblingForTesting() == nullptr);
+ EXPECT_TRUE(node1.GetFirstChild() == nullptr);
+ EXPECT_TRUE(node2.GetNextSibling() == nullptr);
+ EXPECT_TRUE(node2.GetPrevSiblingForTesting() == nullptr);
}
TEST(CFX_XMLNodeTest, RemoveMissingChild) {
- auto node1 = pdfium::MakeUnique<CFX_XMLElement>(L"node");
- auto child2 = pdfium::MakeUnique<CFX_XMLElement>(L"node2");
- auto child3 = pdfium::MakeUnique<CFX_XMLElement>(L"node3");
-
- CFX_XMLElement* node2 = child2.get();
- CFX_XMLElement* node3 = child3.get();
+ CFX_XMLElement node1(L"node1");
+ CFX_XMLElement node2(L"node2");
+ CFX_XMLElement node3(L"node3");
- node1->AppendChild(std::move(child2));
- node1->RemoveChildNode(node3);
+ node1.AppendChild(&node2);
+ node1.RemoveChildNode(&node3);
- EXPECT_TRUE(node3->GetParent() == nullptr);
- EXPECT_EQ(node2, node1->GetFirstChild());
- EXPECT_TRUE(node2->GetNextSibling() == nullptr);
+ EXPECT_TRUE(node3.GetParent() == nullptr);
+ EXPECT_EQ(&node2, node1.GetFirstChild());
+ EXPECT_TRUE(node2.GetNextSibling() == nullptr);
}