XMLNodeTest.cpp 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. /*
  2. * Author: Patrick-Christopher Mattulat
  3. * Company: Lynar Studios
  4. * E-Mail: webmaster@lynarstudios.com
  5. * Created: 2020-09-25
  6. * Changed: 2020-09-25
  7. *
  8. * */
  9. #include <gtest/gtest.h>
  10. #include "../../../../source/io/xml/XMLNode.hpp"
  11. namespace {
  12. class XMLNodeTest : public ::testing::Test {
  13. protected:
  14. XMLNodeTest() = default;
  15. ~XMLNodeTest() override = default;
  16. void SetUp() override {}
  17. void TearDown() override {}
  18. };
  19. TEST_F(XMLNodeTest, addChildAfter)
  20. {
  21. ls_std::XMLNode dialogsNode {"dialogs"};
  22. std::shared_ptr<ls_std::XMLNode> currentNode {};
  23. std::shared_ptr<ls_std::XMLNode> dialogNodeA = std::make_shared<ls_std::XMLNode>("dialogNodeA");
  24. std::shared_ptr<ls_std::XMLNode> dialogNodeB = std::make_shared<ls_std::XMLNode>("dialogNodeB");
  25. std::shared_ptr<ls_std::XMLNode> dialogNodeC = std::make_shared<ls_std::XMLNode>("dialogNodeC");
  26. std::shared_ptr<ls_std::XMLNode> dialogNodeD = std::make_shared<ls_std::XMLNode>("dialogNodeD");
  27. ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeB));
  28. ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeC));
  29. ASSERT_EQ(2, dialogsNode.getChildren().size());
  30. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  31. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  32. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  33. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  34. // add A after B
  35. ASSERT_TRUE(dialogsNode.addChildAfter(dialogNodeA, dialogNodeB));
  36. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  37. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  38. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  39. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  40. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  41. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  42. // add D after C
  43. ASSERT_TRUE(dialogsNode.addChildAfter(dialogNodeD, dialogNodeC));
  44. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  45. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  46. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  47. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  48. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  49. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  50. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  51. ASSERT_STREQ("dialogNodeD", currentNode->getName().c_str());
  52. }
  53. TEST_F(XMLNodeTest, addChildBefore)
  54. {
  55. ls_std::XMLNode dialogsNode {"dialogs"};
  56. std::shared_ptr<ls_std::XMLNode> currentNode {};
  57. std::shared_ptr<ls_std::XMLNode> dialogNodeA = std::make_shared<ls_std::XMLNode>("dialogNodeA");
  58. std::shared_ptr<ls_std::XMLNode> dialogNodeB = std::make_shared<ls_std::XMLNode>("dialogNodeB");
  59. std::shared_ptr<ls_std::XMLNode> dialogNodeC = std::make_shared<ls_std::XMLNode>("dialogNodeC");
  60. std::shared_ptr<ls_std::XMLNode> dialogNodeD = std::make_shared<ls_std::XMLNode>("dialogNodeD");
  61. ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeB));
  62. ASSERT_TRUE(dialogsNode.addChildToEnd(dialogNodeC));
  63. ASSERT_EQ(2, dialogsNode.getChildren().size());
  64. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  65. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  66. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  67. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  68. // add A before C
  69. ASSERT_TRUE(dialogsNode.addChildBefore(dialogNodeA, dialogNodeC));
  70. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  71. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  72. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  73. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  74. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  75. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  76. // add D before B
  77. ASSERT_TRUE(dialogsNode.addChildBefore(dialogNodeD, dialogNodeB));
  78. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  79. ASSERT_STREQ("dialogNodeD", currentNode->getName().c_str());
  80. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  81. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  82. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  83. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  84. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  85. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  86. }
  87. TEST_F(XMLNodeTest, addChildToBeginning)
  88. {
  89. ls_std::XMLNode dialogsNode {"dialogs"};
  90. std::shared_ptr<ls_std::XMLNode> currentNode {};
  91. ls_std::XMLNode dialogNodeA {"dialogNodeA"};
  92. ls_std::XMLNode dialogNodeB {"dialogNodeB"};
  93. ls_std::XMLNode dialogNodeC {"dialogNodeC"};
  94. ASSERT_TRUE(dialogsNode.getChildren().empty());
  95. ASSERT_EQ(0, dialogsNode.getChildren().size());
  96. // adding C
  97. ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared<ls_std::XMLNode>(dialogNodeC)));
  98. ASSERT_TRUE(!dialogsNode.getChildren().empty());
  99. ASSERT_EQ(1, dialogsNode.getChildren().size());
  100. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  101. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  102. // adding B
  103. ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared<ls_std::XMLNode>(dialogNodeB)));
  104. ASSERT_EQ(2, dialogsNode.getChildren().size());
  105. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  106. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  107. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  108. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  109. // adding A
  110. ASSERT_TRUE(dialogsNode.addChildToBeginning(std::make_shared<ls_std::XMLNode>(dialogNodeA)));
  111. ASSERT_EQ(3, dialogsNode.getChildren().size());
  112. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  113. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  114. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  115. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  116. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  117. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  118. }
  119. TEST_F(XMLNodeTest, addChildToEnd)
  120. {
  121. ls_std::XMLNode dialogsNode {"dialogs"};
  122. std::shared_ptr<ls_std::XMLNode> currentNode {};
  123. ls_std::XMLNode dialogNodeA {"dialogNodeA"};
  124. ls_std::XMLNode dialogNodeB {"dialogNodeB"};
  125. ls_std::XMLNode dialogNodeC {"dialogNodeC"};
  126. ASSERT_TRUE(dialogsNode.getChildren().empty());
  127. ASSERT_EQ(0, dialogsNode.getChildren().size());
  128. // adding C
  129. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(dialogNodeC)));
  130. ASSERT_TRUE(!dialogsNode.getChildren().empty());
  131. ASSERT_EQ(1, dialogsNode.getChildren().size());
  132. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  133. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  134. // adding B
  135. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(dialogNodeB)));
  136. ASSERT_EQ(2, dialogsNode.getChildren().size());
  137. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  138. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  139. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  140. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  141. // adding A
  142. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(dialogNodeA)));
  143. ASSERT_EQ(3, dialogsNode.getChildren().size());
  144. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  145. ASSERT_STREQ("dialogNodeC", currentNode->getName().c_str());
  146. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  147. ASSERT_STREQ("dialogNodeB", currentNode->getName().c_str());
  148. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  149. ASSERT_STREQ("dialogNodeA", currentNode->getName().c_str());
  150. }
  151. TEST_F(XMLNodeTest, getAttributes)
  152. {
  153. ls_std::XMLNode dialogNode {"dialog"};
  154. ASSERT_TRUE(dialogNode.getAttributes().empty());
  155. }
  156. TEST_F(XMLNodeTest, getChildren)
  157. {
  158. ls_std::XMLNode dialogNode {"dialog"};
  159. ASSERT_TRUE(dialogNode.getChildren().empty());
  160. }
  161. TEST_F(XMLNodeTest, getChildrenV2)
  162. {
  163. ls_std::XMLNode dialogsNode {"dialogs"};
  164. ls_std::XMLNode dialogNode {"dialog"};
  165. ls_std::XMLNode otherNode {"something"};
  166. // preparation
  167. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(dialogNode)));
  168. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(otherNode)));
  169. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(otherNode)));
  170. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(dialogNode)));
  171. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>(otherNode)));
  172. // check
  173. ASSERT_TRUE(!dialogsNode.getChildren().empty());
  174. ASSERT_EQ(5, dialogsNode.getChildren().size());
  175. ASSERT_EQ(2, dialogsNode.getChildren("dialog").size());
  176. ASSERT_EQ(3, dialogsNode.getChildren("something").size());
  177. }
  178. TEST_F(XMLNodeTest, getName)
  179. {
  180. ls_std::XMLNode dialogNode {"dialog"};
  181. ASSERT_STREQ("dialog", dialogNode.getName().c_str());
  182. }
  183. TEST_F(XMLNodeTest, setName)
  184. {
  185. ls_std::XMLNode dialogNode {"dialog"};
  186. dialogNode.setName("dialog2");
  187. ASSERT_STREQ("dialog2", dialogNode.getName().c_str());
  188. }
  189. }