XMLNodeTest.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  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, removeFirstChild)
  184. {
  185. ls_std::XMLNode dialogsNode {"dialogs"};
  186. std::shared_ptr<ls_std::XMLNode> currentNode {};
  187. // preparation
  188. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogA")));
  189. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogB")));
  190. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogC")));
  191. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("additionalInfo")));
  192. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("event")));
  193. ASSERT_EQ(5, dialogsNode.getChildren().size());
  194. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  195. ASSERT_STREQ("dialogA", currentNode->getName().c_str());
  196. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  197. ASSERT_STREQ("dialogB", currentNode->getName().c_str());
  198. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  199. ASSERT_STREQ("dialogC", currentNode->getName().c_str());
  200. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  201. ASSERT_STREQ("additionalInfo", currentNode->getName().c_str());
  202. currentNode = *std::next(dialogsNode.getChildren().begin(), 4);
  203. ASSERT_STREQ("event", currentNode->getName().c_str());
  204. // check
  205. dialogsNode.removeFirstChild();
  206. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  207. ASSERT_STREQ("dialogB", currentNode->getName().c_str());
  208. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  209. ASSERT_STREQ("dialogC", currentNode->getName().c_str());
  210. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  211. ASSERT_STREQ("additionalInfo", currentNode->getName().c_str());
  212. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  213. ASSERT_STREQ("event", currentNode->getName().c_str());
  214. }
  215. TEST_F(XMLNodeTest, removeLastChild)
  216. {
  217. ls_std::XMLNode dialogsNode {"dialogs"};
  218. std::shared_ptr<ls_std::XMLNode> currentNode {};
  219. // preparation
  220. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogA")));
  221. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogB")));
  222. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("dialogC")));
  223. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("additionalInfo")));
  224. ASSERT_TRUE(dialogsNode.addChildToEnd(std::make_shared<ls_std::XMLNode>("event")));
  225. ASSERT_EQ(5, dialogsNode.getChildren().size());
  226. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  227. ASSERT_STREQ("dialogA", currentNode->getName().c_str());
  228. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  229. ASSERT_STREQ("dialogB", currentNode->getName().c_str());
  230. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  231. ASSERT_STREQ("dialogC", currentNode->getName().c_str());
  232. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  233. ASSERT_STREQ("additionalInfo", currentNode->getName().c_str());
  234. currentNode = *std::next(dialogsNode.getChildren().begin(), 4);
  235. ASSERT_STREQ("event", currentNode->getName().c_str());
  236. // check
  237. dialogsNode.removeLastChild();
  238. currentNode = *std::next(dialogsNode.getChildren().begin(), 0);
  239. ASSERT_STREQ("dialogA", currentNode->getName().c_str());
  240. currentNode = *std::next(dialogsNode.getChildren().begin(), 1);
  241. ASSERT_STREQ("dialogB", currentNode->getName().c_str());
  242. currentNode = *std::next(dialogsNode.getChildren().begin(), 2);
  243. ASSERT_STREQ("dialogC", currentNode->getName().c_str());
  244. currentNode = *std::next(dialogsNode.getChildren().begin(), 3);
  245. ASSERT_STREQ("additionalInfo", currentNode->getName().c_str());
  246. }
  247. TEST_F(XMLNodeTest, setName)
  248. {
  249. ls_std::XMLNode dialogNode {"dialog"};
  250. dialogNode.setName("dialog2");
  251. ASSERT_STREQ("dialog2", dialogNode.getName().c_str());
  252. }
  253. }