xml-generation.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // --------------------------------------------------------------------------------------------------------------------
  2. //
  3. // xml-generation.js - tests for node-data2xml
  4. //
  5. // Copyright (c) 2011 Andrew Chilton - http://chilts.org/
  6. // Written by Andrew Chilton <andychilton@gmail.com>
  7. //
  8. // License: http://opensource.org/licenses/MIT
  9. //
  10. // --------------------------------------------------------------------------------------------------------------------
  11. var test = require('tape');
  12. var data2xml = require('../data2xml')({});
  13. var declaration = '<?xml version="1.0" encoding="utf-8"?>\n';
  14. // --------------------------------------------------------------------------------------------------------------------
  15. var tests = [
  16. {
  17. name : 'empty structure',
  18. element : 'topelement',
  19. data : {},
  20. exp : declaration + '<topelement></topelement>'
  21. },
  22. {
  23. name : 'one element structure',
  24. element : 'topelement',
  25. data : { second : 'value' },
  26. exp : declaration + '<topelement><second>value</second></topelement>'
  27. },
  28. {
  29. name : 'one element structure which has an empty value',
  30. element : 'topelement',
  31. data : { second : '' },
  32. exp : declaration + '<topelement><second></second></topelement>'
  33. },
  34. {
  35. name : 'one element structure which has a undefined value',
  36. element : 'topelement',
  37. data : { second : undefined },
  38. exp : declaration + '<topelement></topelement>'
  39. },
  40. {
  41. name : 'one element structure which has a null value',
  42. element : 'topelement',
  43. data : { second : null },
  44. exp : declaration + '<topelement></topelement>'
  45. },
  46. {
  47. name : 'one element structure with an xmlns',
  48. element : 'topelement',
  49. data : { _attr : { xmlns : 'http://www.appsattic.com/xml/namespace' }, second : 'value' },
  50. exp : declaration + '<topelement xmlns="http://www.appsattic.com/xml/namespace"><second>value</second></topelement>'
  51. },
  52. {
  53. name : 'two elements',
  54. element : 'topelement',
  55. data : { second : 'val2', third : 'val3' },
  56. exp : declaration + '<topelement><second>val2</second><third>val3</third></topelement>'
  57. },
  58. {
  59. name : 'simple hierarchical elements',
  60. element : 'topelement',
  61. data : { simple : 'val2', complex : { test : 'val4' } },
  62. exp : declaration + '<topelement><simple>val2</simple><complex><test>val4</test></complex></topelement>'
  63. },
  64. {
  65. name : 'simple one element array',
  66. element : 'topelement',
  67. data : { array : [ { item : 'value' } ] },
  68. exp : declaration + '<topelement><array><item>value</item></array></topelement>'
  69. },
  70. {
  71. name : 'simple two element array #1',
  72. element : 'topelement',
  73. data : { array : [ { item : 'value1' }, 'value2' ] },
  74. exp : declaration + '<topelement><array><item>value1</item></array><array>value2</array></topelement>'
  75. },
  76. {
  77. name : 'simple two element array #2',
  78. element : 'topelement',
  79. data : { array : [ 'value1', 'value2' ] },
  80. exp : declaration + '<topelement><array>value1</array><array>value2</array></topelement>'
  81. },
  82. {
  83. name : 'simple two element array #3',
  84. element : 'topelement',
  85. data : { array : { item : [ 'value1', 'value2' ] } },
  86. exp : declaration + '<topelement><array><item>value1</item><item>value2</item></array></topelement>'
  87. },
  88. {
  89. name : 'complex 4 element array with some attributes',
  90. element : 'topelement',
  91. data : { item : [
  92. { _attr : { type : 'a' }, _value : 'val1' },
  93. { _attr : { type : 'b' }, _value : 'val2' },
  94. 'val3',
  95. { _value : 'val4' },
  96. ] },
  97. exp : declaration + '<topelement><item type="a">val1</item><item type="b">val2</item><item>val3</item><item>val4</item></topelement>'
  98. },
  99. {
  100. name : 'element with CDATA',
  101. element : 'name',
  102. data : {
  103. text: [
  104. {
  105. _attr: {
  106. 'xml:lang': 'de-DE'
  107. },
  108. _cdata: 'Some text with <em>unescaped</em> HTML data.'
  109. },
  110. ],
  111. _value: 'My app name',
  112. },
  113. exp : declaration + '<name>My app name<text xml:lang="de-DE"><![CDATA[Some text with <em>unescaped</em> HTML data.]]></text></name>'
  114. },
  115. {
  116. name : 'element with CDATA containing a ]]>',
  117. element : 'name',
  118. data : {
  119. text: [
  120. {
  121. _attr: {
  122. 'xml:lang': 'de-DE'
  123. },
  124. _cdata: 'Some text with ]]> twice ]]> inside it.'
  125. },
  126. ],
  127. _value: 'My app name',
  128. },
  129. exp : declaration + '<name>My app name<text xml:lang="de-DE"><![CDATA[Some text with ]]]]><![CDATA[> twice ]]]]><![CDATA[> inside it.]]></text></name>'
  130. },
  131. ];
  132. test('some simple xml', function (t) {
  133. tests.forEach(function(test) {
  134. var xml = data2xml(test.element, test.data);
  135. t.equal(xml, test.exp, test.name);
  136. });
  137. t.end();
  138. });
  139. // --------------------------------------------------------------------------------------------------------------------