summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-08-16 14:51:06 +0100
committerMichael Williamson <mike@zwobble.org>2015-08-16 14:51:06 +0100
commit578ff57e4b86c4b31268e8b22a401c7bfaa9fe1a (patch)
treedaa87dd08fd71df9539832627cef0b2516e815f6
parentbc1550787eec24964c506ebbddff9363d114b9e6 (diff)
Write text nodes
-rw-r--r--lib/xml/index.js6
-rw-r--r--lib/xml/nodes.js2
-rw-r--r--lib/xml/writer.js16
-rw-r--r--tests/xml/writer.tests.js24
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>');
+ });
});