aboutsummaryrefslogtreecommitdiff
path: root/tests/document-xml-reader.tests.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2013-04-08 20:16:05 +0100
committerMichael Williamson <mike@zwobble.org>2013-04-08 20:16:05 +0100
commit2f72e903f5f8bb7ac00c69778be4cb199017617d (patch)
tree0e24cac9cd0f6f3bddc72d6c32f4a2d9192f53dc /tests/document-xml-reader.tests.js
parent2ea1d69fe5821a1e4f28e7c411e5bf41a498b2fa (diff)
Move DocumentReader to DocumentXmlReader in its own module
Diffstat (limited to 'tests/document-xml-reader.tests.js')
-rw-r--r--tests/document-xml-reader.tests.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/document-xml-reader.tests.js b/tests/document-xml-reader.tests.js
new file mode 100644
index 0000000..2f406f8
--- /dev/null
+++ b/tests/document-xml-reader.tests.js
@@ -0,0 +1,122 @@
+var assert = require("assert");
+
+var DocumentXmlReader = require("../lib/document-xml-reader").DocumentXmlReader;
+var documents = require("../lib/documents");
+var XmlElement = require("../lib/xmlreader").Element;
+
+var testing = require("./testing");
+var test = testing.test;
+var createFakeDocxFile = testing.createFakeDocxFile;
+
+function readXmlElement(element) {
+ return new DocumentXmlReader({}).readXmlElement(element);
+}
+
+describe("readElement", function() {
+ test("reads styles from run properties", function() {
+ var runStyleXml = new XmlElement("w:rStyle", {"w:val": "Emphasis"});
+ var runPropertiesXml = createRunPropertiesXml([runStyleXml]);
+ var result = readXmlElement(runPropertiesXml);
+ assert.equal(result.value.styleName, "Emphasis");
+ });
+
+ test("isBold is false if bold element is not present", function() {
+ var runPropertiesXml = createRunPropertiesXml([]);
+ var result = readXmlElement(runPropertiesXml);
+ assert.equal(result.value.isBold, false);
+ });
+
+ test("isBold is true if bold element is present", function() {
+ var boldXml = new XmlElement("w:b");
+ var runPropertiesXml = createRunPropertiesXml([boldXml]);
+ var result = readXmlElement(runPropertiesXml);
+ assert.equal(result.value.isBold, true);
+ });
+
+ test("isItalic is false if bold element is not present", function() {
+ var runPropertiesXml = createRunPropertiesXml([]);
+ var result = readXmlElement(runPropertiesXml);
+ assert.equal(result.value.isItalic, false);
+ });
+
+ test("isItalic is true if bold element is present", function() {
+ var italicXml = new XmlElement("w:i");
+ var runPropertiesXml = createRunPropertiesXml([italicXml]);
+ var result = readXmlElement(runPropertiesXml);
+ assert.equal(result.value.isItalic, true);
+ });
+
+ test("run properties are attached to run", function() {
+ var runStyleXml = new XmlElement("w:rStyle", {"w:val": "Emphasis"});
+ var runPropertiesXml = new XmlElement("w:rPr", {}, [runStyleXml]);
+ var runXml = new XmlElement("w:r", {}, [runPropertiesXml]);
+ var result = readXmlElement(runXml);
+ assert.equal(result.value.properties.styleName, "Emphasis");
+ });
+
+ test("run properties not included as child of run", function() {
+ var runStyleXml = new XmlElement("w:rStyle", {"w:val": "Emphasis"});
+ var runPropertiesXml = new XmlElement("w:rPr", {}, [runStyleXml]);
+ var runXml = new XmlElement("w:r", {}, [runPropertiesXml]);
+ var result = readXmlElement(runXml);
+ assert.deepEqual(result.value.children, []);
+ });
+
+ test("emits warning on unrecognised element", function() {
+ var unrecognisedElement = new XmlElement("w:not-an-element");
+ var result = readXmlElement(unrecognisedElement);
+ assert.deepEqual(
+ result.messages,
+ [{
+ type: "warning",
+ message: "An unrecognised element was ignored: w:not-an-element"
+ }]
+ );
+ });
+
+ test("w:bookmarkStart is ignored without warning", function() {
+ var ignoredElement = new XmlElement("w:bookmarkStart");
+ var result = readXmlElement(ignoredElement);
+ assert.deepEqual(result.messages, []);
+ assert.equal(null, result.value);
+ });
+
+ test("can read inline pictures", function() {
+ var drawing = new XmlElement("w:drawing", {}, [
+ new XmlElement("wp:inline", {}, [
+ new XmlElement("wp:docPr", {descr: "It's a hat"}),
+ new XmlElement("a:graphic", {}, [
+ new XmlElement("a:graphicData", {}, [
+ new XmlElement("pic:pic", {}, [
+ new XmlElement("pic:blipFill", {}, [
+ new XmlElement("a:blip", {"r:embed": "rId5"})
+ ])
+ ])
+ ])
+ ])
+ ])
+ ]);
+
+ var imageBuffer = new Buffer("Not an image at all!");
+ var reader = new DocumentXmlReader(
+ {
+ "rId5": {target: "media/hat.png"}
+ },
+ createFakeDocxFile({
+ "word/media/hat.png": imageBuffer
+ })
+ );
+ var result = reader.readXmlElement(drawing);
+ assert.deepEqual(result.messages, []);
+ assert.equal("image", result.value.type);
+ assert.equal(result.value.altText, "It's a hat");
+ return result.value.read()
+ .then(function(readValue) {
+ assert.equal(readValue, imageBuffer)
+ });
+ });
+});
+
+function createRunPropertiesXml(children) {
+ return new XmlElement("w:rPr", {}, children);
+}