diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-04-08 20:16:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-04-08 20:16:05 +0100 |
| commit | 2f72e903f5f8bb7ac00c69778be4cb199017617d (patch) | |
| tree | 0e24cac9cd0f6f3bddc72d6c32f4a2d9192f53dc /tests/document-xml-reader.tests.js | |
| parent | 2ea1d69fe5821a1e4f28e7c411e5bf41a498b2fa (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.js | 122 |
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); +} |
