writer.tests.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var assert = require("assert");
  2. var xml = require("../../lib/xml");
  3. var writer = require("../../lib/xml/writer");
  4. var test = require("../test")(module);
  5. test('writing empty root element writes out xml declaration and empty root element', function() {
  6. assertXmlString(xml.element("root"), {}, '<root/>');
  7. });
  8. test('can write empty child elements', function() {
  9. assertXmlString(xml.element("root", {}, [xml.element("album"), xml.element("single")]), {},
  10. '<root><album/><single/></root>');
  11. });
  12. test('can write empty descendant elements', function() {
  13. var element = xml.element("root", {}, [
  14. xml.element("album", {}, [
  15. xml.element("year"),
  16. xml.element("song")
  17. ])
  18. ]);
  19. assertXmlString(element, {},
  20. '<root><album><year/><song/></album></root>');
  21. });
  22. test('can write element attributes', function() {
  23. var element = xml.element("root", {}, [
  24. xml.element("album", {"title": "Everything in Transit"})
  25. ]);
  26. assertXmlString(element, {},
  27. '<root><album title="Everything in Transit"/></root>');
  28. });
  29. test('can write text nodes', function() {
  30. var element = xml.element("root", {}, [
  31. xml.element("album", {}, [
  32. xml.text("Everything in Transit")
  33. ])
  34. ]);
  35. assertXmlString(element, {},
  36. '<root><album>Everything in Transit</album></root>');
  37. });
  38. test('can write root element with long-form prefix when URI is namespace', function() {
  39. var element = xml.element("{music}root");
  40. assertXmlString(element, {"m": "music"},
  41. '<m:root xmlns:m="music"/>');
  42. });
  43. test('can write child elements with long-form prefix when URI is namespace', function() {
  44. var element = xml.element("root", {}, [
  45. xml.element("{music}album")
  46. ]);
  47. assertXmlString(element, {"m": "music"},
  48. '<root xmlns:m="music"><m:album/></root>');
  49. });
  50. test('can write child elements with short-form prefix when URI is namespace', function() {
  51. var element = xml.element("root", {}, [
  52. xml.element("m:album")
  53. ]);
  54. assertXmlString(element, {"m": "music"},
  55. '<root xmlns:m="music"><m:album/></root>');
  56. });
  57. test('default namespace has key of empty string', function() {
  58. var element = xml.element("root", {}, [
  59. xml.element("{music}album")
  60. ]);
  61. assertXmlString(element, {"": "music"},
  62. '<root xmlns="music"><album/></root>');
  63. });
  64. function assertXmlString(element, namespaces, expectedString) {
  65. assert.equal(writer.writeString(element, namespaces),
  66. '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' +
  67. expectedString);
  68. }