diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-08-16 14:51:06 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-08-16 14:51:06 +0100 |
| commit | 578ff57e4b86c4b31268e8b22a401c7bfaa9fe1a (patch) | |
| tree | daa87dd08fd71df9539832627cef0b2516e815f6 | |
| parent | bc1550787eec24964c506ebbddff9363d114b9e6 (diff) | |
Write text nodes
| -rw-r--r-- | lib/xml/index.js | 6 | ||||
| -rw-r--r-- | lib/xml/nodes.js | 2 | ||||
| -rw-r--r-- | lib/xml/writer.js | 16 | ||||
| -rw-r--r-- | tests/xml/writer.tests.js | 24 |
4 files changed, 37 insertions, 11 deletions
diff --git a/lib/xml/index.js b/lib/xml/index.js index 6c35998..0320bc2 100644 --- a/lib/xml/index.js +++ b/lib/xml/index.js @@ -1,2 +1,6 @@ -exports.Element = require("./nodes").Element; +var nodes = require("./nodes"); + +exports.Element = nodes.Element; +exports.element = nodes.element; +exports.text = nodes.text; exports.readString = require("./reader").readString; diff --git a/lib/xml/nodes.js b/lib/xml/nodes.js index 8232684..9305918 100644 --- a/lib/xml/nodes.js +++ b/lib/xml/nodes.js @@ -3,7 +3,7 @@ var _ = require("underscore"); exports.Element = Element; exports.element = function(name, attributes, children) { - return new Element(); + return new Element(name, attributes, children); }; exports.text = function(value) { return { diff --git a/lib/xml/writer.js b/lib/xml/writer.js index 239dd04..90746af 100644 --- a/lib/xml/writer.js +++ b/lib/xml/writer.js @@ -12,15 +12,27 @@ function writeString(root) { standalone: true }); root.children.forEach(function(child) { - writeElement(builder, child); + writeNode(builder, child); }); return builder.end(); } +var nodeWriters = { + element: writeElement, + text: writeTextNode +} + +function writeNode(builder, node) { + return nodeWriters[node.type](builder, node); +} function writeElement(builder, element) { var elementBuilder = builder.element(element.name); element.children.forEach(function(child) { - writeElement(elementBuilder, child); + writeNode(elementBuilder, child); }); } + +function writeTextNode(builder, node) { + builder.text(node.value); +} diff --git a/tests/xml/writer.tests.js b/tests/xml/writer.tests.js index ed7039c..a2f52ed 100644 --- a/tests/xml/writer.tests.js +++ b/tests/xml/writer.tests.js @@ -1,30 +1,40 @@ var assert = require("assert"); -var Element = require("../../lib/xml").Element; +var xml = require("../../lib/xml"); var writer = require("../../lib/xml/writer"); var test = require("../testing").test; describe('xml.writer', function() { test('writing empty root element writes out xml declaration and empty root element', function() { - assertXmlString(new Element("root"), '<root/>'); + assertXmlString(xml.element("root"), '<root/>'); }); test('can write empty child elements', function() { - assertXmlString(new Element("root", {}, [new Element("album"), new Element("single")]), + assertXmlString(xml.element("root", {}, [xml.element("album"), xml.element("single")]), '<root><album/><single/></root>'); }); test('can write empty descendant elements', function() { - var element = new Element("root", {}, [ - new Element("album", {}, [ - new Element("year"), - new Element("song") + var element = xml.element("root", {}, [ + xml.element("album", {}, [ + xml.element("year"), + xml.element("song") ]) ]); assertXmlString(element, '<root><album><year/><song/></album></root>'); }); + + test('can write text nodes', function() { + var element = xml.element("root", {}, [ + xml.element("album", {}, [ + xml.text("Everything in Transit") + ]) + ]); + assertXmlString(element, + '<root><album>Everything in Transit</album></root>'); + }); }); |
