PageRenderTime 54ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/gnu-cpp/core/tests/vxml/vdom/vxml_vdom_simple.cpp

https://bitbucket.org/osi/wsb-core
C++ | 283 lines | 139 code | 84 blank | 60 comment | 3 complexity | 5a70cc2fc6103bb0b32e23f5a1b3200c MD5 | raw file
  1. /**
  2. * simple_dom.cpp
  3. *
  4. * This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
  5. * To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send
  6. * a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
  7. *
  8. */
  9. // Includes
  10. //-----------------
  11. //-- Std
  12. #include <fstream>
  13. #include <iostream>
  14. #include <omp.h>
  15. //-- Gtest
  16. #include <gtest/gtest.h>
  17. #include <vxml/vdom/VDOMRegistry.h>
  18. #include <vxml/vdom/VDOMDocument.h>
  19. /**
  20. * Just creates a simple document
  21. */
  22. TEST(vdom, newdoc) {
  23. //-- Get Implementation
  24. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  25. //-- Create
  26. VDOM::VDOMDocument * document = libxml2impl->newDocument();
  27. ASSERT_TRUE(document!=NULL);
  28. ASSERT_NO_THROW(delete libxml2impl);
  29. }
  30. /**
  31. * Just parses a document
  32. */
  33. TEST(vdom, parse) {
  34. //-- Get Implementation
  35. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  36. //-- Parse
  37. string xml("<?xml version='1.0' encoding='UTF8'?><root></root>");
  38. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  39. ASSERT_TRUE(document!=NULL);
  40. ASSERT_NO_THROW(delete libxml2impl);
  41. }
  42. TEST(vdom, parse_error) {
  43. //-- Get Implementation
  44. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  45. //-- Parse
  46. string xml("<?xml version='1.0' encoding='UTF8'?><root></oot>");
  47. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  48. ASSERT_TRUE(document==NULL);
  49. ASSERT_NO_THROW(delete libxml2impl);
  50. }
  51. TEST(vdom, serialize) {
  52. //-- Get Implementation
  53. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  54. //-- Parse
  55. string xml("<?xml version='1.0' encoding='UTF8'?><root></root>");
  56. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  57. ASSERT_TRUE(document!=NULL);
  58. //-- Serialize
  59. ASSERT_NO_THROW(delete libxml2impl);
  60. }
  61. TEST(vdom, document_element_no_ns) {
  62. //-- Get Implementation
  63. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  64. //-- Parse
  65. string xml("<?xml version='1.0' encoding='UTF8'?><root></root>");
  66. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  67. ASSERT_TRUE(document!=NULL);
  68. //-- Get Document Element
  69. ASSERT_TRUE(document->getDocumentElement()!=NULL);
  70. ASSERT_EQ(document->getDocumentElement()->getLocalName(),"root");
  71. ASSERT_EQ(document->getDocumentElement()->getName(),"root");
  72. ASSERT_EQ(document->getDocumentElement()->getPrefix(),"");
  73. ASSERT_EQ(document->getDocumentElement()->getNamespaceURI(),"");
  74. ASSERT_NO_THROW(delete libxml2impl);
  75. }
  76. /**
  77. * Check that to same nodes return the same pointer instance
  78. */
  79. TEST(vdom, node_pool) {
  80. //-- Get Implementation
  81. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  82. //-- Parse
  83. string xml("<?xml version='1.0' encoding='UTF8'?><r:root xmlns:r='http://regression' attr='test'></r:root>");
  84. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  85. ASSERT_TRUE(document!=NULL);
  86. //-- Document Element
  87. //-------------------------------
  88. VDOM::VDOMElement * documentElement = document->getDocumentElement();
  89. VDOM::VDOMElement * documentElement2 = document->getDocumentElement();
  90. ASSERT_EQ(documentElement,documentElement2);
  91. ASSERT_NO_THROW(delete libxml2impl);
  92. ASSERT_NO_THROW(delete document);
  93. }
  94. TEST(vdom, document_element_ns_no_prefix) {
  95. //-- Get Implementation
  96. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  97. //-- Parse
  98. string xml("<?xml version='1.0' encoding='UTF8'?><root xmlns='http://regression'></root>");
  99. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  100. ASSERT_TRUE(document!=NULL);
  101. //-- Get Document Element
  102. ASSERT_TRUE(document->getDocumentElement()!=NULL);
  103. ASSERT_EQ(document->getDocumentElement()->getLocalName(),"root");
  104. ASSERT_EQ(document->getDocumentElement()->getName(),"root");
  105. ASSERT_EQ(document->getDocumentElement()->getPrefix(),"");
  106. ASSERT_EQ(document->getDocumentElement()->getNamespaceURI(),"http://regression");
  107. ASSERT_NO_THROW(delete libxml2impl);
  108. }
  109. TEST(vdom, document_element_ns_prefix) {
  110. //-- Get Implementation
  111. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  112. //-- Parse
  113. string xml("<?xml version='1.0' encoding='UTF8'?><r:root xmlns:r='http://regression'></r:root>");
  114. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  115. ASSERT_TRUE(document!=NULL);
  116. //-- Get Document Element
  117. ASSERT_TRUE(document->getDocumentElement()!=NULL);
  118. ASSERT_EQ(document->getDocumentElement()->getLocalName(),"root");
  119. ASSERT_EQ(document->getDocumentElement()->getName(),"r:root");
  120. ASSERT_EQ(document->getDocumentElement()->getPrefix(),"r");
  121. ASSERT_EQ(document->getDocumentElement()->getNamespaceURI(),"http://regression");
  122. ASSERT_NO_THROW(delete libxml2impl);
  123. }
  124. TEST(vdom, document_element_attributes_text) {
  125. //-- Get Implementation
  126. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  127. //-- Parse
  128. string xml("<?xml version='1.0' encoding='UTF8'?><r:root xmlns:r='http://regression' attr='test'></r:root>");
  129. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  130. ASSERT_TRUE(document!=NULL);
  131. //-- Get Document Element
  132. ASSERT_TRUE(document->getDocumentElement()!=NULL);
  133. ASSERT_EQ(document->getDocumentElement()->getLocalName(),"root");
  134. ASSERT_EQ(document->getDocumentElement()->getName(),"r:root");
  135. ASSERT_EQ(document->getDocumentElement()->getPrefix(),"r");
  136. ASSERT_EQ(document->getDocumentElement()->getNamespaceURI(),"http://regression");
  137. //-- Attributes
  138. ASSERT_TRUE(document->getDocumentElement()->hasAttribute("attr"));
  139. ASSERT_EQ(document->getDocumentElement()->getAttribute("attr"),"test");
  140. ASSERT_FALSE(document->getDocumentElement()->hasAttribute("attrNonExistent"));
  141. ASSERT_EQ(document->getDocumentElement()->getAttribute("attrNonExistent"),"");
  142. //-- Text
  143. ASSERT_EQ(document->getDocumentElement()->getTextContent(),"");
  144. ASSERT_NO_THROW(delete libxml2impl);
  145. ASSERT_NO_THROW(delete document);
  146. }
  147. TEST(vdom, first_level_fetch_no_thread) {
  148. //-- Get Implementation
  149. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  150. //-- Parse
  151. std::ifstream t("tests/vxml/vdom/vdom_regressions_doc.xml");
  152. std::string xml((std::istreambuf_iterator<char>(t)),
  153. std::istreambuf_iterator<char>());
  154. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  155. ASSERT_TRUE(document!=NULL);
  156. //-- Get All First level elements
  157. //VDOM::VDOMNodeList * nl = document->getDocumentElement()->getElementsByTagNameNS("http://regression","l1subelement");
  158. VDOM::VDOMNodeList * nl = document->getDocumentElement()->getElementsByTagName("l1subelement");
  159. ASSERT_EQ(nl->getLength(),(unsigned int)8);
  160. //-- Go through all and check the index attributes
  161. for (unsigned int i=0;i<nl->getLength();i++) {
  162. //-- Check kattribute presence and value
  163. VDOM::VDOMElement * elt = nl->getItem<VDOM::VDOMElement>(i);
  164. ASSERT_TRUE(elt!=NULL);
  165. ASSERT_NE(elt->getAttribute("index"),"");
  166. ASSERT_EQ((unsigned int)atoi(elt->getAttribute("index").c_str()),i);
  167. }
  168. ASSERT_NO_THROW(delete libxml2impl);
  169. }
  170. TEST(vdom, first_level_fetch_thread) {
  171. //-- Get Implementation
  172. VDOM::VDOMImplementation * libxml2impl = VDOM::VDOMRegistry::getInstance().getImplementationForName("libxml2.dom");
  173. //-- Parse
  174. std::ifstream t("tests/vxml/vdom/vdom_regressions_doc.xml");
  175. std::string xml((std::istreambuf_iterator<char>(t)),
  176. std::istreambuf_iterator<char>());
  177. VDOM::VDOMDocument * document = libxml2impl->parseDocument(xml);
  178. ASSERT_TRUE(document!=NULL);
  179. //-- Get All First level elements
  180. //VDOM::VDOMNodeList * nl = document->getDocumentElement()->getElementsByTagNameNS("http://regression","l1subelement");
  181. VDOM::VDOMNodeList * nl = document->getDocumentElement()->getElementsByTagName("l1subelement");
  182. ASSERT_EQ(nl->getLength(),(unsigned int)8);
  183. //-- Go through all and check the index attributes
  184. #pragma omp parallel for
  185. for (unsigned int i=0;i<(nl->getLength()*500);i++) {
  186. if (omp_get_num_threads()<=1) {
  187. cerr << "THREAD TEST NOT PARALLELIZED" << endl;
  188. }
  189. unsigned ei = i%nl->getLength();
  190. //-- Check kattribute presence and value
  191. VDOM::VDOMElement * elt = nl->getItem<VDOM::VDOMElement>(ei);
  192. string index = elt->getAttribute("index");
  193. unsigned int indexInt = atoi(elt->getAttribute("index").c_str());
  194. EXPECT_TRUE(elt!=NULL);
  195. EXPECT_NE(elt->getAttribute("index"),"");
  196. EXPECT_EQ(indexInt,ei);
  197. }
  198. ASSERT_NO_THROW(delete libxml2impl);
  199. }