/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2020-09-25 * Changed: 2020-09-25 * * */ #include #include "../../../../source/io/xml/XMLNode.hpp" namespace { class XMLNodeTest : public ::testing::Test { protected: XMLNodeTest() = default; ~XMLNodeTest() override = default; void SetUp() override {} void TearDown() override {} }; TEST_F(XMLNodeTest, addChildAfter) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; std::shared_ptr dialogNodeA = std::make_shared("dialogNodeA"); std::shared_ptr dialogNodeB = std::make_shared("dialogNodeB"); std::shared_ptr dialogNodeC = std::make_shared("dialogNodeC"); std::shared_ptr dialogNodeD = std::make_shared("dialogNodeD"); ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeB)); ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeC)); ASSERT_EQ(2, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // add A after B ASSERT_TRUE(dialogsNode.addChildAfter(dialogNodeA, dialogNodeB)); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // add D after C ASSERT_TRUE(dialogsNode.addChildAfter(dialogNodeD, dialogNodeC)); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("dialogNodeD", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, addChildBefore) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; std::shared_ptr dialogNodeA = std::make_shared("dialogNodeA"); std::shared_ptr dialogNodeB = std::make_shared("dialogNodeB"); std::shared_ptr dialogNodeC = std::make_shared("dialogNodeC"); std::shared_ptr dialogNodeD = std::make_shared("dialogNodeD"); ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeB)); ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeC)); ASSERT_EQ(2, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // add A before C ASSERT_TRUE(dialogsNode.addChildBefore(dialogNodeA, dialogNodeC)); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // add D before B ASSERT_TRUE(dialogsNode.addChildBefore(dialogNodeD, dialogNodeB)); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeD", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, addChildToBeginning) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; ls_std::XMLNode dialogNodeA {"dialogNodeA"}; ls_std::XMLNode dialogNodeB {"dialogNodeB"}; ls_std::XMLNode dialogNodeC {"dialogNodeC"}; ASSERT_TRUE(dialogsNode.getChildren().empty()); ASSERT_EQ(0, dialogsNode.getChildren().size()); // adding C ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared(dialogNodeC))); ASSERT_TRUE(!dialogsNode.getChildren().empty()); ASSERT_EQ(1, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // adding B ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared(dialogNodeB))); ASSERT_EQ(2, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // adding A ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared(dialogNodeA))); ASSERT_EQ(3, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, addChildToEnd) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; ls_std::XMLNode dialogNodeA {"dialogNodeA"}; ls_std::XMLNode dialogNodeB {"dialogNodeB"}; ls_std::XMLNode dialogNodeC {"dialogNodeC"}; ASSERT_TRUE(dialogsNode.getChildren().empty()); ASSERT_EQ(0, dialogsNode.getChildren().size()); // adding C ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(dialogNodeC))); ASSERT_TRUE(!dialogsNode.getChildren().empty()); ASSERT_EQ(1, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); // adding B ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(dialogNodeB))); ASSERT_EQ(2, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); // adding A ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(dialogNodeA))); ASSERT_EQ(3, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, getAttributes) { ls_std::XMLNode dialogNode {"dialog"}; ASSERT_TRUE(dialogNode.getAttributes().empty()); } TEST_F(XMLNodeTest, getChildren) { ls_std::XMLNode dialogNode {"dialog"}; ASSERT_TRUE(dialogNode.getChildren().empty()); } TEST_F(XMLNodeTest, getChildrenV2) { ls_std::XMLNode dialogsNode {"dialogs"}; ls_std::XMLNode dialogNode {"dialog"}; ls_std::XMLNode otherNode {"something"}; // preparation ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(dialogNode))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(otherNode))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(otherNode))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(dialogNode))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared(otherNode))); // check ASSERT_TRUE(!dialogsNode.getChildren().empty()); ASSERT_EQ(5, dialogsNode.getChildren().size()); ASSERT_EQ(2, dialogsNode.getChildren("dialog").size()); ASSERT_EQ(3, dialogsNode.getChildren("something").size()); } TEST_F(XMLNodeTest, getName) { ls_std::XMLNode dialogNode {"dialog"}; ASSERT_STREQ("dialog", dialogNode.getName().c_str()); } TEST_F(XMLNodeTest, removeFirstChild) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; // preparation ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogA"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogB"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogC"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("additionalInfo"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("event"))); ASSERT_EQ(5, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("additionalInfo", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 4); ASSERT_STREQ("event", currentNode->getName().c_str()); // check dialogsNode.removeFirstChild(); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("additionalInfo", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("event", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, removeLastChild) { ls_std::XMLNode dialogsNode {"dialogs"}; std::shared_ptr currentNode {}; // preparation ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogA"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogB"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("dialogC"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("additionalInfo"))); ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared("event"))); ASSERT_EQ(5, dialogsNode.getChildren().size()); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("additionalInfo", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 4); ASSERT_STREQ("event", currentNode->getName().c_str()); // check dialogsNode.removeLastChild(); currentNode = *std::next(dialogsNode.getChildren().begin(), 0); ASSERT_STREQ("dialogA", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 1); ASSERT_STREQ("dialogB", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 2); ASSERT_STREQ("dialogC", currentNode->getName().c_str()); currentNode = *std::next(dialogsNode.getChildren().begin(), 3); ASSERT_STREQ("additionalInfo", currentNode->getName().c_str()); } TEST_F(XMLNodeTest, setName) { ls_std::XMLNode dialogNode {"dialog"}; dialogNode.setName("dialog2"); ASSERT_STREQ("dialog2", dialogNode.getName().c_str()); } }