xml_export.test 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. <?php
  2. class XMLExportViewsDataExportTests extends ViewsDataExportSimpleExportTest {
  3. protected $profile = 'testing';
  4. public static function getInfo() {
  5. return array(
  6. 'name' => 'XML Export',
  7. 'description' => 'Various tests for exporting to XML.',
  8. 'group' => 'Views Data Export',
  9. );
  10. }
  11. protected $vde_export_type = 'XML';
  12. protected function getStylePluginName() {
  13. return 'views_data_export_xml';
  14. }
  15. protected function getExportView($path = 'vde_test') {
  16. // Create the basic view.
  17. $view = $this->getBasicExportView();
  18. $display = $view->new_display('views_data_export', 'Data export', 'vde_test');
  19. $display->override_option('style_plugin', 'views_data_export_xml');
  20. $display->override_option('path', $path);
  21. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  22. <views_tests>
  23. <views_test>
  24. <ID>1</ID>
  25. <Name>John</Name>
  26. <Age>25</Age>
  27. </views_test>
  28. <views_test>
  29. <ID>2</ID>
  30. <Name>George</Name>
  31. <Age>27</Age>
  32. </views_test>
  33. <views_test>
  34. <ID>3</ID>
  35. <Name>Ringo</Name>
  36. <Age>28</Age>
  37. </views_test>
  38. <views_test>
  39. <ID>4</ID>
  40. <Name>Paul</Name>
  41. <Age>26</Age>
  42. </views_test>
  43. <views_test>
  44. <ID>5</ID>
  45. <Name>Meredith</Name>
  46. <Age>30</Age>
  47. </views_test>
  48. </views_tests>';
  49. return array(&$view, $expected);
  50. }
  51. /**
  52. * Test to check if empty fields are correctly hidden.
  53. */
  54. protected function testHideEmptySupport() {
  55. $view = $this->getHideIfEmptyExportView();
  56. // We need to ensure that the test fields are actually empty/0.
  57. db_update('views_test')
  58. ->fields(array('age' => 0,))
  59. ->condition('name', 'Paul')
  60. ->execute();
  61. db_update('views_test')
  62. ->fields(array('name' => '',))
  63. ->condition('name', 'George')
  64. ->execute();
  65. db_update('views_test')
  66. ->fields(array('name' => 0,))
  67. ->condition('name', 'John')
  68. ->execute();
  69. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  70. <views_tests>
  71. <views_test>
  72. <ID>1</ID>
  73. <Name>0</Name>
  74. <Age>25</Age>
  75. </views_test>
  76. <views_test>
  77. <ID>2</ID>
  78. <Age>27</Age>
  79. </views_test>
  80. <views_test>
  81. <ID>3</ID>
  82. <Name>Ringo</Name>
  83. <Age>28</Age>
  84. </views_test>
  85. <views_test>
  86. <ID>4</ID>
  87. <Name>Paul</Name>
  88. </views_test>
  89. <views_test>
  90. <ID>5</ID>
  91. <Name>Meredith</Name>
  92. <Age>30</Age>
  93. </views_test>
  94. </views_tests>';
  95. $message = 'Hide if empty support for ' . $this->vde_export_type . ' export matched expected output.';
  96. $this->executeAndCompareGivenView($view, $expected, $message);
  97. }
  98. /**
  99. * Test to ensure that valid XML is produced when someone doesn't specify a label.
  100. */
  101. protected function testEmptyLabels() {
  102. $view = $this->getBasicExportView();
  103. $display = $view->display['default']->handler;
  104. $display->override_option('fields', array(
  105. 'id' => array(
  106. 'id' => 'id',
  107. 'table' => 'views_test',
  108. 'field' => 'id',
  109. 'relationship' => 'none',
  110. ),
  111. 'name' => array(
  112. 'id' => 'name',
  113. 'table' => 'views_test',
  114. 'field' => 'name',
  115. 'relationship' => 'none',
  116. // Remove the label from the name field.
  117. 'label' => '',
  118. ),
  119. 'age' => array(
  120. 'id' => 'age',
  121. 'table' => 'views_test',
  122. 'field' => 'age',
  123. 'relationship' => 'none',
  124. // Make this label intentially invalid XML.
  125. 'label' => '.',
  126. ),
  127. ));
  128. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  129. <views_tests>
  130. <views_test>
  131. <ID>1</ID>
  132. <no-name>John</no-name>
  133. <invalid-tag-name>25</invalid-tag-name>
  134. </views_test>
  135. <views_test>
  136. <ID>2</ID>
  137. <no-name>George</no-name>
  138. <invalid-tag-name>27</invalid-tag-name>
  139. </views_test>
  140. <views_test>
  141. <ID>3</ID>
  142. <no-name>Ringo</no-name>
  143. <invalid-tag-name>28</invalid-tag-name>
  144. </views_test>
  145. <views_test>
  146. <ID>4</ID>
  147. <no-name>Paul</no-name>
  148. <invalid-tag-name>26</invalid-tag-name>
  149. </views_test>
  150. <views_test>
  151. <ID>5</ID>
  152. <no-name>Meredith</no-name>
  153. <invalid-tag-name>30</invalid-tag-name>
  154. </views_test>
  155. </views_tests>';
  156. $message = 'Empty label test in ' . $this->vde_export_type . ' export matched expected output.';
  157. $this->executeAndCompareGivenView($view, $expected, $message);
  158. }
  159. /**
  160. * Test to ensure that XML nodes names can be manually specified.
  161. */
  162. protected function testCustomiseXMLNodes() {
  163. $view = $this->getBasicExportView();
  164. // Load the include that contains the _views_data_export_xml_tag_clean function.
  165. module_load_include('inc', 'views_data_export', 'theme/views_data_export.theme');
  166. $root_node = _views_data_export_xml_tag_clean($this->randomName());
  167. $item_node = _views_data_export_xml_tag_clean($this->randomName());
  168. $style_options = array(
  169. 'root_node' => $root_node,
  170. 'item_node' => $item_node,
  171. );
  172. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  173. <' . $root_node . '>
  174. <' . $item_node . '>
  175. <ID>1</ID>
  176. <Name>John</Name>
  177. <Age>25</Age>
  178. </' . $item_node . '>
  179. <' . $item_node . '>
  180. <ID>2</ID>
  181. <Name>George</Name>
  182. <Age>27</Age>
  183. </' . $item_node . '>
  184. <' . $item_node . '>
  185. <ID>3</ID>
  186. <Name>Ringo</Name>
  187. <Age>28</Age>
  188. </' . $item_node . '>
  189. <' . $item_node . '>
  190. <ID>4</ID>
  191. <Name>Paul</Name>
  192. <Age>26</Age>
  193. </' . $item_node . '>
  194. <' . $item_node . '>
  195. <ID>5</ID>
  196. <Name>Meredith</Name>
  197. <Age>30</Age>
  198. </' . $item_node . '>
  199. </' . $root_node . '>';
  200. $message = 'Custom XML nodes test in ' . $this->vde_export_type . ' export matched expected output.';
  201. $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
  202. }
  203. /**
  204. * Test to ensure certain fields can be optionally non-escaped.
  205. */
  206. protected function testXMLNoEntityEncode() {
  207. $view = $this->getBasicExportView();
  208. $display = $view->display['default']->handler;
  209. $style_options = array(
  210. 'no_entity_encode' => array(
  211. 'id' => 'id',
  212. ),
  213. );
  214. $display->override_option('fields', array(
  215. 'id' => array(
  216. 'id' => 'id',
  217. 'table' => 'views_test',
  218. 'field' => 'id',
  219. 'relationship' => 'none',
  220. 'alter' => array(
  221. 'alter_text' => TRUE,
  222. 'text' => '<strong>[id]</strong>',
  223. ),
  224. ),
  225. 'name' => array(
  226. 'id' => 'name',
  227. 'table' => 'views_test',
  228. 'field' => 'name',
  229. 'relationship' => 'none',
  230. 'alter' => array(
  231. 'alter_text' => TRUE,
  232. 'text' => '<em>[name]</em>',
  233. ),
  234. ),
  235. 'age' => array(
  236. 'id' => 'age',
  237. 'table' => 'views_test',
  238. 'field' => 'age',
  239. 'relationship' => 'none',
  240. ),
  241. ));
  242. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  243. <views_tests>
  244. <views_test>
  245. <ID><strong>1</strong></ID>
  246. <Name>&lt;em&gt;John&lt;/em&gt;</Name>
  247. <Age>25</Age>
  248. </views_test>
  249. <views_test>
  250. <ID><strong>2</strong></ID>
  251. <Name>&lt;em&gt;George&lt;/em&gt;</Name>
  252. <Age>27</Age>
  253. </views_test>
  254. <views_test>
  255. <ID><strong>3</strong></ID>
  256. <Name>&lt;em&gt;Ringo&lt;/em&gt;</Name>
  257. <Age>28</Age>
  258. </views_test>
  259. <views_test>
  260. <ID><strong>4</strong></ID>
  261. <Name>&lt;em&gt;Paul&lt;/em&gt;</Name>
  262. <Age>26</Age>
  263. </views_test>
  264. <views_test>
  265. <ID><strong>5</strong></ID>
  266. <Name>&lt;em&gt;Meredith&lt;/em&gt;</Name>
  267. <Age>30</Age>
  268. </views_test>
  269. </views_tests>';
  270. $message = 'XML in values test in ' . $this->vde_export_type . ' export matched expected output.';
  271. $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
  272. }
  273. /**
  274. * Test to ensure certain fields can be optionally non-escaped.
  275. */
  276. protected function testXMLCDATAWrapper() {
  277. $view = $this->getBasicExportView();
  278. $style_options = array(
  279. 'cdata_wrapper' => array(
  280. 'id' => 'id',
  281. 'name' => 'name',
  282. ),
  283. );
  284. $display = $view->display['default']->handler;
  285. $display->override_option('fields', array(
  286. 'id' => array(
  287. 'id' => 'id',
  288. 'table' => 'views_test',
  289. 'field' => 'id',
  290. 'relationship' => 'none',
  291. ),
  292. 'name' => array(
  293. 'id' => 'name',
  294. 'table' => 'views_test',
  295. 'field' => 'name',
  296. 'relationship' => 'none',
  297. 'alter' => array(
  298. 'alter_text' => TRUE,
  299. 'text' => '<em>[name]</em>',
  300. ),
  301. ),
  302. 'age' => array(
  303. 'id' => 'age',
  304. 'table' => 'views_test',
  305. 'field' => 'age',
  306. 'relationship' => 'none',
  307. ),
  308. ));
  309. $expected = '<?xml version="1.0" encoding="UTF-8" ?>
  310. <views_tests>
  311. <views_test>
  312. <ID><![CDATA[1]]></ID>
  313. <Name><![CDATA[<em>John</em>]]></Name>
  314. <Age>25</Age>
  315. </views_test>
  316. <views_test>
  317. <ID><![CDATA[2]]></ID>
  318. <Name><![CDATA[<em>George</em>]]></Name>
  319. <Age>27</Age>
  320. </views_test>
  321. <views_test>
  322. <ID><![CDATA[3]]></ID>
  323. <Name><![CDATA[<em>Ringo</em>]]></Name>
  324. <Age>28</Age>
  325. </views_test>
  326. <views_test>
  327. <ID><![CDATA[4]]></ID>
  328. <Name><![CDATA[<em>Paul</em>]]></Name>
  329. <Age>26</Age>
  330. </views_test>
  331. <views_test>
  332. <ID><![CDATA[5]]></ID>
  333. <Name><![CDATA[<em>Meredith</em>]]></Name>
  334. <Age>30</Age>
  335. </views_test>
  336. </views_tests>';
  337. $message = 'XML in values test in ' . $this->vde_export_type . ' export matched expected output.';
  338. $this->executeAndCompareGivenView($view, $expected, $message, $style_options);
  339. }
  340. }