diff options
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp')
-rw-r--r-- | Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp b/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp deleted file mode 100644 index d7d4159970d..00000000000 --- a/Build/source/texk/dvisvgm/dvisvgm-src/tests/XMLNodeTest.cpp +++ /dev/null @@ -1,393 +0,0 @@ -/************************************************************************* -** XMLNodeTest.cpp ** -** ** -** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> ** -** ** -** This program is free software; you can redistribute it and/or ** -** modify it under the terms of the GNU General Public License as ** -** published by the Free Software Foundation; either version 3 of ** -** the License, or (at your option) any later version. ** -** ** -** This program is distributed in the hope that it will be useful, but ** -** WITHOUT ANY WARRANTY; without even the implied warranty of ** -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** -** GNU General Public License for more details. ** -** ** -** You should have received a copy of the GNU General Public License ** -** along with this program; if not, see <http://www.gnu.org/licenses/>. ** -*************************************************************************/ - -#include <gtest/gtest.h> -#include <algorithm> -#include <cstring> -#include <memory> -#include "utility.hpp" -#include "XMLNode.hpp" - -using namespace std; - - -TEST(XMLNodeTest, downcast) { - unique_ptr<XMLNode> elem = util::make_unique<XMLElement>("element"); - EXPECT_EQ(elem->toElement(), elem.get()); - EXPECT_EQ(elem->toText(), nullptr); - EXPECT_EQ(elem->toCData(), nullptr); - EXPECT_EQ(elem->toComment(), nullptr); - - unique_ptr<XMLNode> text = util::make_unique<XMLText>("text"); - EXPECT_EQ(text->toElement(), nullptr); - EXPECT_EQ(text->toText(), text.get()); - EXPECT_EQ(text->toCData(), nullptr); - EXPECT_EQ(text->toComment(), nullptr); - - unique_ptr<XMLNode> cdata = util::make_unique<XMLCData>("cdata"); - EXPECT_EQ(cdata->toElement(), nullptr); - EXPECT_EQ(cdata->toText(), nullptr); - EXPECT_EQ(cdata->toCData(), cdata.get()); - EXPECT_EQ(cdata->toComment(), nullptr); - - unique_ptr<XMLNode> comment = util::make_unique<XMLComment>("comment"); - EXPECT_EQ(comment->toElement(), nullptr); - EXPECT_EQ(comment->toText(), nullptr); - EXPECT_EQ(comment->toCData(), nullptr); - EXPECT_EQ(comment->toComment(), comment.get()); -} - - -static int number_of_children (XMLElement &elem) { - int count=0; - for (XMLNode *node = elem.firstChild(); node; node=node->next()) - count++; - return count; -} - - -TEST(XMLNodeTest, appendElement) { - XMLElement root("root"); - root.append(util::make_unique<XMLElement>("child1")); - root.append(util::make_unique<XMLElement>("child2")); - EXPECT_EQ(number_of_children(root), 2); - EXPECT_FALSE(root.empty()); - XMLElement *child1 = root.firstChild()->toElement(); - XMLElement *child2 = root.lastChild()->toElement(); - ASSERT_NE(child1, nullptr); - EXPECT_EQ(child1->parent(), &root); - EXPECT_EQ(child1->prev(), nullptr); - EXPECT_EQ(child1->next(), child2); - EXPECT_EQ(child1->firstChild(), nullptr); - EXPECT_EQ(child1->lastChild(), nullptr); - EXPECT_EQ(child1->name(), "child1"); - - ASSERT_NE(child2, nullptr); - EXPECT_EQ(child2->parent(), &root); - EXPECT_EQ(child2->prev(), child1); - EXPECT_EQ(child2->next(), nullptr); - EXPECT_EQ(child2->firstChild(), nullptr); - EXPECT_EQ(child2->lastChild(), nullptr); - EXPECT_EQ(child2->name(), "child2"); - root.clear(); - EXPECT_TRUE(root.empty()); -} - - -TEST(XMLNodeTest, prependElement) { - XMLElement root("root"); - root.prepend(util::make_unique<XMLElement>("child1")); - root.prepend(util::make_unique<XMLElement>("child2")); - EXPECT_EQ(number_of_children(root), 2); - XMLElement *child1 = root.lastChild()->toElement(); - XMLElement *child2 = root.firstChild()->toElement(); - ASSERT_NE(child1, nullptr); - EXPECT_EQ(child1->parent(), &root); - EXPECT_EQ(child1->prev(), child2); - EXPECT_EQ(child1->next(), nullptr); - EXPECT_EQ(child1->firstChild(), nullptr); - EXPECT_EQ(child1->lastChild(), nullptr); - EXPECT_EQ(child1->name(), "child1"); - - ASSERT_NE(child2, nullptr); - EXPECT_EQ(child2->parent(), &root); - EXPECT_EQ(child2->prev(), nullptr); - EXPECT_EQ(child2->next(), child1); - EXPECT_EQ(child2->firstChild(), nullptr); - EXPECT_EQ(child2->lastChild(), nullptr); - EXPECT_EQ(child2->name(), "child2"); -} - - -TEST(XMLNodeTest, appendText) { - XMLElement root("root"); - root.append(util::make_unique<XMLText>("first string")); - EXPECT_EQ(number_of_children(root), 1); - XMLText *lastChild = root.lastChild()->toText(); - ASSERT_NE(lastChild, nullptr); - EXPECT_EQ(lastChild->getText(), "first string"); - EXPECT_EQ(lastChild->parent(), &root); - EXPECT_EQ(lastChild->prev(), nullptr); - EXPECT_EQ(lastChild->next(), nullptr); - EXPECT_EQ(root.firstChild(), root.lastChild()); - - root.append(util::make_unique<XMLText>(",second string")); - EXPECT_EQ(number_of_children(root), 1); - lastChild = root.lastChild()->toText(); - ASSERT_NE(lastChild, nullptr); - EXPECT_EQ(lastChild->getText(), "first string,second string"); - EXPECT_EQ(lastChild->parent(), &root); - EXPECT_EQ(lastChild->prev(), nullptr); - EXPECT_EQ(lastChild->next(), nullptr); - EXPECT_EQ(root.firstChild(), root.lastChild()); - - root.append(",third string"); - EXPECT_EQ(number_of_children(root), 1); - lastChild = root.lastChild()->toText(); - ASSERT_NE(lastChild, nullptr); - EXPECT_EQ(lastChild->getText(), "first string,second string,third string"); - EXPECT_EQ(lastChild->parent(), &root); - EXPECT_EQ(lastChild->prev(), nullptr); - EXPECT_EQ(lastChild->next(), nullptr); - - root.append(util::make_unique<XMLElement>("separator")); - root.append(",fourth string"); - EXPECT_EQ(number_of_children(root), 3); - lastChild = root.lastChild()->toText(); - ASSERT_NE(lastChild, nullptr); - EXPECT_EQ(lastChild->getText(), ",fourth string"); - - root.append(util::make_unique<XMLElement>("separator")); - root.append(util::make_unique<XMLText>(",fifth string")); - EXPECT_EQ(number_of_children(root), 5); - lastChild = root.lastChild()->toText(); - ASSERT_NE(lastChild, nullptr); - EXPECT_EQ(lastChild->getText(), ",fifth string"); - - root.clear(); - EXPECT_TRUE(root.empty()); -} - - -TEST(XMLNodeTest, prependText) { - XMLElement root("root"); - root.prepend(util::make_unique<XMLText>("first string")); - EXPECT_EQ(number_of_children(root), 1); - XMLText *firstChild = root.firstChild()->toText(); - ASSERT_NE(firstChild, nullptr); - EXPECT_EQ(firstChild->getText(), "first string"); - EXPECT_EQ(firstChild->parent(), &root); - EXPECT_EQ(firstChild->prev(), nullptr); - EXPECT_EQ(firstChild->next(), nullptr); - - root.prepend(util::make_unique<XMLText>("second string,")); - EXPECT_EQ(number_of_children(root), 1); - firstChild = root.firstChild()->toText(); - ASSERT_NE(firstChild, nullptr); - EXPECT_EQ(firstChild->getText(), "second string,first string"); - EXPECT_EQ(firstChild->parent(), &root); - EXPECT_EQ(firstChild->prev(), nullptr); - EXPECT_EQ(firstChild->next(), nullptr); - - root.prepend(util::make_unique<XMLElement>("separator")); - root.prepend(util::make_unique<XMLText>("third string,")); - EXPECT_EQ(number_of_children(root), 3); - firstChild = root.firstChild()->toText(); - ASSERT_NE(firstChild, nullptr); - EXPECT_EQ(firstChild->getText(), "third string,"); - EXPECT_EQ(firstChild->parent(), &root); - EXPECT_EQ(firstChild->prev(), nullptr); - EXPECT_EQ(firstChild->next()->next(), root.lastChild()); - EXPECT_EQ(root.lastChild()->prev()->prev(), root.firstChild()); -} - - -TEST(XMLNodeTest, attributes) { - XMLElement root("root"); - root.addAttribute("string", "text"); - root.addAttribute("integer", 42); - root.addAttribute("double", 42.24); - EXPECT_TRUE(root.empty()); - EXPECT_TRUE(root.hasAttribute("string")); - EXPECT_TRUE(root.hasAttribute("integer")); - EXPECT_TRUE(root.hasAttribute("double")); - EXPECT_FALSE(root.hasAttribute("noname ")); - EXPECT_STREQ(root.getAttributeValue("string"), "text"); - EXPECT_STREQ(root.getAttributeValue("integer"), "42"); - EXPECT_STREQ(root.getAttributeValue("double"), "42.24"); - EXPECT_EQ(root.getAttributeValue("none"), nullptr); -} - - -TEST(XMLNodeTest, clone) { - XMLElement root ("root"); - root.addAttribute("string", "text"); - root.addAttribute("integer", 42); - root.addAttribute("double", 42.24); - root.append("text"); - unique_ptr<XMLElement> clone = util::static_unique_ptr_cast<XMLElement>(root.clone()); - EXPECT_EQ(number_of_children(root), 1); - EXPECT_STREQ(clone->getAttributeValue("string"), "text"); - EXPECT_STREQ(clone->getAttributeValue("integer"), "42"); - EXPECT_STREQ(clone->getAttributeValue("double"), "42.24"); -} - - -TEST(XMLNodeTest, insertBefore) { - XMLElement root("root"); - auto child1 = util::make_unique<XMLElement>("child1"); - auto child2 = util::make_unique<XMLElement>("child2"); - XMLNode* child1Ptr = root.append(std::move(child1)); - XMLNode* child2Ptr = root.append(std::move(child2)); - auto node = util::make_unique<XMLElement>("node"); - EXPECT_FALSE(root.insertBefore(util::make_unique<XMLElement>("dummy"), node.get())); - EXPECT_EQ(number_of_children(root), 2); - EXPECT_TRUE(root.insertBefore(util::make_unique<XMLElement>("child3"), child1Ptr)); - EXPECT_EQ(number_of_children(root), 3); - XMLElement *child = root.firstChild()->toElement(); - EXPECT_EQ(child->name(), "child3"); - EXPECT_TRUE(root.insertBefore(util::make_unique<XMLElement>("child4"), child2Ptr)); - const char *names[] = {"child3", "child1", "child4", "child2"}; - const char **p = names; - for (XMLNode *node=root.firstChild(); node; node=node->next()) { - XMLElement *elem = node->toElement(); - ASSERT_NE(elem, nullptr); - EXPECT_EQ(elem->name(), *p++) << "name=" << elem->name(); - EXPECT_EQ(elem->parent(), &root); - if (elem->prev()) { - EXPECT_EQ(elem->prev()->next(), elem); - } - } -} - - -TEST(XMLNodeTest, insertAfter) { - XMLElement root("root"); - auto child1 = util::make_unique<XMLElement>("child1"); - auto child2 = util::make_unique<XMLElement>("child2"); - XMLNode *child1Ptr = root.append(std::move(child1)); - XMLNode *child2Ptr =root.append(std::move(child2)); - auto node = util::make_unique<XMLElement>("node"); - EXPECT_FALSE(root.insertAfter(util::make_unique<XMLElement>("dummy"), node.get())); - EXPECT_EQ(number_of_children(root), 2); - EXPECT_TRUE(root.insertAfter(util::make_unique<XMLElement>("child3"), child1Ptr)); - EXPECT_TRUE(root.insertAfter(util::make_unique<XMLElement>("child4"), child2Ptr)); - EXPECT_EQ(number_of_children(root), 4); - const char *names[] = {"child1", "child3", "child2", "child4"}; - const char **p = names; - for (XMLNode *node=root.firstChild(); node; node=node->next()) { - XMLElement *elem = node->toElement(); - ASSERT_NE(elem, nullptr); - EXPECT_EQ(elem->name(), *p++) << "name=" << elem->name(); - EXPECT_EQ(elem->parent(), &root); - if (elem->prev()) { - EXPECT_EQ(elem->prev()->next(), elem); - } - } -} - - -TEST(XMLNodeTest, getDescendants) { - XMLElement root("root"); - auto child1 = util::make_unique<XMLElement>("child"); - auto child2 = util::make_unique<XMLElement>("childX"); - auto child3 = util::make_unique<XMLElement>("child"); - auto child4 = util::make_unique<XMLElement>("child"); - child1->addAttribute("attr", "value"); - child2->addAttribute("attr", "value"); - child3->addAttribute("attr", "value"); - child3->append("text"); - XMLElement *child3Ptr = static_cast<XMLElement*>(child2->append(std::move(child3))); - XMLElement *child2Ptr = static_cast<XMLElement*>(child1->append(std::move(child2))); - XMLElement *child1Ptr = static_cast<XMLElement*>(root.append(std::move(child1))); - XMLElement *child4Ptr = static_cast<XMLElement*>(root.append(std::move(child4))); - vector<XMLElement*> elements; - root.getDescendants("child", nullptr, elements); - EXPECT_EQ(elements.size(), 3u); - { - XMLElement *nodes[] = {child1Ptr, child3Ptr, child4Ptr}; - XMLElement **p = nodes; - for (const XMLElement *elem : elements) - EXPECT_EQ(elem, *p++); - }{ - elements.clear(); - root.getDescendants("child", "attr", elements); - EXPECT_EQ(elements.size(), 2u); - XMLElement *nodes[] = {child1Ptr, child3Ptr}; - XMLElement **p = nodes; - for (const XMLElement *elem : elements) - EXPECT_EQ(elem, *p++); - }{ - elements.clear(); - root.getDescendants(nullptr, "attr", elements); - EXPECT_EQ(elements.size(), 3u); - XMLElement *nodes[] = {child1Ptr, child2Ptr, child3Ptr}; - XMLElement **p = nodes; - for (const XMLElement *elem : elements) - EXPECT_EQ(elem, *p++); - } -} - - -TEST(XMLNodeTest, getFirstDescendant) { - XMLElement root("root"); - auto child1 = util::make_unique<XMLElement>("child"); - auto child2 = util::make_unique<XMLElement>("childX"); - auto child3 = util::make_unique<XMLElement>("child"); - auto child4 = util::make_unique<XMLElement>("child"); - child1->addAttribute("attr", "valueX"); - child2->addAttribute("attr", "value"); - child3->addAttribute("attrX", "value"); - child3->append("text"); - XMLNode *child3Ptr = child2->append(std::move(child3)); - child1->append(std::move(child2)); - XMLNode *child1Ptr = root.append(std::move(child1)); - root.append(std::move(child4)); - EXPECT_EQ(root.getFirstDescendant("child", nullptr, nullptr), child1Ptr); - EXPECT_EQ(root.getFirstDescendant("child", "attr", nullptr), child1Ptr); - EXPECT_EQ(root.getFirstDescendant("child", "attrX", nullptr), child3Ptr); - EXPECT_EQ(root.getFirstDescendant("child", "attrX", "value"), child3Ptr); - EXPECT_EQ(root.getFirstDescendant(0, "attrX", "value"), child3Ptr); - EXPECT_EQ(root.getFirstDescendant(0, "attrX", nullptr), child3Ptr); - EXPECT_EQ(root.getFirstDescendant("child", "attr", "value"), nullptr); -} - - -TEST(XMLNodeTest, write) { - XMLElement root("root"); - auto child1 = util::make_unique<XMLElement>("child"); - auto child2 = util::make_unique<XMLElement>("childX"); - auto child3 = util::make_unique<XMLElement>("child"); - auto child4 = util::make_unique<XMLElement>("child"); - child1->addAttribute("attr", "valueX"); - child2->addAttribute("attr", "value"); - child3->addAttribute("attrX", "value"); - child3->append("text"); - child2->append(std::move(child3)); - child1->append(std::move(child2)); - root.append(std::move(child1)); - root.append(std::move(child4)); - ostringstream oss; - root.write(oss); - string str = oss.str(); - str.erase(remove(str.begin(), str.end(), '\n'), str.end()); - EXPECT_EQ(str, "<root><child attr='valueX'><childX attr='value'><child attrX='value'>text</child></childX></child><child/></root>"); -} - - -TEST(XMLNodeTest, cdata) { - XMLElement root("root"); - auto cdataNode = util::make_unique<XMLCData>("text & <text>"); - XMLNode *cdataNodePtr = root.append(std::move(cdataNode)); - root.append(util::make_unique<XMLElement>("element")); - root.append(cdataNodePtr->clone()); - ostringstream oss; - root.write(oss); - string str = oss.str(); - str.erase(remove(str.begin(), str.end(), '\n'), str.end()); - EXPECT_EQ(str, "<root><![CDATA[text & <text>]]><element/><![CDATA[text & <text>]]></root>"); - - cdataNodePtr->clear(); - oss.str(""); - root.write(oss); - str = oss.str(); - str.erase(remove(str.begin(), str.end(), '\n'), str.end()); - EXPECT_EQ(str, "<root><element/><![CDATA[text & <text>]]></root>"); -} |