tests_xml2js.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. (function (root, factory) {
  2. 'use strict';
  3. if (typeof module === 'object' && module.exports) {
  4. // Node. Does not work with strict CommonJS, but only CommonJS-like
  5. // environments that support module.exports, like Node.
  6. factory(require('./x2js'), require('qunit-cli'));
  7. } else {
  8. // Browser globals (root is window)
  9. factory(root.X2JS, root.QUnit);
  10. }
  11. })(this, function (X2JS, QUnit) {
  12. 'use strict';
  13. // Test cases are full of magic numbers and that's fine.
  14. /* eslint-disable no-magic-numbers */
  15. QUnit.module('Converting XML to JavaScript objects');
  16. QUnit.test('Basic XML', function (assert) {
  17. var xml = '<document>' +
  18. '<element attribute="value" />' +
  19. '<elementX />' +
  20. '<elementX />' +
  21. '<elementY>hello there</elementY>' +
  22. '<elementZ><![CDATA[hello again]]></elementZ>' +
  23. '<elementZA>Test<![CDATA[ hello again]]></elementZA>' +
  24. '<elementZB attribute="value"><![CDATA[hello again]]></elementZB>' +
  25. '</document>';
  26. var x = new X2JS();
  27. var js = x.xml2js(xml);
  28. assert.ok(js.document);
  29. assert.ok(js.document.element);
  30. assert.ok(js.document.element._attribute);
  31. assert.strictEqual(js.document.element._attribute, 'value');
  32. assert.ok(js.document.elementX);
  33. assert.ok(js.document.elementX.length);
  34. assert.strictEqual(js.document.elementX.length, 2);
  35. assert.strictEqual(js.document.elementX[0], '');
  36. assert.strictEqual(js.document.elementX[1], '');
  37. assert.ok(js.document.elementY);
  38. assert.strictEqual(js.document.elementY.toString(), 'hello there');
  39. assert.strictEqual(js.document.elementY, 'hello there');
  40. assert.ok(js.document.elementZ);
  41. assert.strictEqual(js.document.elementZ.toString(), 'hello again');
  42. assert.strictEqual(js.document.elementZ, 'hello again');
  43. assert.ok(js.document.elementZA);
  44. assert.strictEqual(js.document.elementZA.toString(), 'Test hello again');
  45. assert.strictEqual(js.document.elementZA.__cdata, ' hello again');
  46. assert.ok(js.document.elementZB);
  47. assert.strictEqual(js.document.elementZB.toString(), 'hello again');
  48. assert.strictEqual(js.document.elementZB._attribute, 'value');
  49. assert.strictEqual(js.document.elementZB.__cdata, 'hello again');
  50. });
  51. QUnit.test('XML with namespace prefixes', function (assert) {
  52. var xml = '<ns:root xmlns:ns="http://example.com" xmlns:ns2="http://example.com(2)">' +
  53. '<nonamespace>' +
  54. '<ns2:el ns:attribute="yes" />' +
  55. '</nonamespace>' +
  56. '</ns:root>';
  57. var x = new X2JS();
  58. var js = x.xml2js(xml);
  59. // We don't understand namespaces but we do remember the prefixes.
  60. assert.ok(js);
  61. assert.ok(js.root);
  62. assert.strictEqual(js.root.__prefix, 'ns');
  63. assert.ok(js.root.nonamespace);
  64. assert.ok(js.root.nonamespace.el);
  65. assert.strictEqual(js.root.nonamespace.el.__prefix, 'ns2');
  66. // Except for attributes, which we don't acknowledge can even use namespaces.
  67. // Perhaps not the most convenient but whatever, not an important feature.
  68. assert.ok(js.root.nonamespace.el['_ns:attribute']);
  69. });
  70. QUnit.test('XML with declaration', function (assert) {
  71. var xml = '<?xml version="1.0" encoding="utf-8" ?>\n' +
  72. '<document>' +
  73. '<element>great success</element>' +
  74. '</document>';
  75. var x = new X2JS();
  76. var js = x.xml2js(xml);
  77. assert.ok(js.document);
  78. assert.ok(js.document.element);
  79. assert.strictEqual(js.document.element, 'great success');
  80. });
  81. QUnit.test('Passing non-string to xml2js returns null', function (assert) {
  82. var x = new X2JS();
  83. assert.propEqual(x.xml2js({ "wololo": "rogan" }), null);
  84. assert.propEqual(x.xml2js(99), null);
  85. assert.propEqual(x.xml2js(undefined), null);
  86. });
  87. });