aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2018-01-16 22:21:21 +0000
committerMichael Williamson <mike@zwobble.org>2018-01-16 22:21:21 +0000
commitcc1b5b19480befc5611a469424a5ae16f9ebce21 (patch)
tree4774f2cbbae87b2b723902d7154b171c2060db78 /test
parent062eb4ff3fea9c49cfce841327d01ddd0099264e (diff)
Read types of relationships
Diffstat (limited to 'test')
-rw-r--r--test/docx/body-reader.tests.js53
-rw-r--r--test/docx/relationships-reader.tests.js65
2 files changed, 100 insertions, 18 deletions
diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js
index 039a9db..ceeb9c1 100644
--- a/test/docx/body-reader.tests.js
+++ b/test/docx/body-reader.tests.js
@@ -25,6 +25,7 @@ var documents = require("../../lib/documents");
var xml = require("../../lib/xml");
var XmlElement = xml.Element;
var Numbering = require("../../lib/docx/numbering-xml").Numbering;
+var Relationships = require("../../lib/docx/relationships-reader").Relationships;
var Styles = require("../../lib/docx/styles-reader").Styles;
var warning = require("../../lib/results").warning;
@@ -810,9 +811,9 @@ function isImage(options) {
function readEmbeddedImage(element) {
return readXmlElement(element, {
- relationships: {
- "rId5": {target: "media/hat.png"}
- },
+ relationships: new Relationships([
+ imageRelationship("rId5", "media/hat.png")
+ ]),
contentTypes: fakeContentTypes,
docxFile: createFakeDocxFile({
"word/media/hat.png": IMAGE_BUFFER
@@ -932,9 +933,9 @@ test("can read linked pictures", function() {
});
var element = single(readXmlElementValue(drawing, {
- relationships: {
- "rId5": {target: "file:///media/hat.png"}
- },
+ relationships: new Relationships([
+ imageRelationship("rId5", "file:///media/hat.png")
+ ]),
contentTypes: fakeContentTypes,
files: testing.createFakeFiles({
"file:///media/hat.png": IMAGE_BUFFER
@@ -954,9 +955,9 @@ test("warning if unsupported image type", function() {
});
var result = readXmlElement(drawing, {
- relationships: {
- "rId5": {target: "media/hat.emf"}
- },
+ relationships: new Relationships([
+ imageRelationship("rId5", "media/hat.emf")
+ ]),
contentTypes: fakeContentTypes,
docxFile: createFakeDocxFile({
"word/media/hat.emf": IMAGE_BUFFER
@@ -1009,9 +1010,9 @@ test("w:hyperlink", {
"is read as external hyperlink if it has a relationship ID": function() {
var runXml = new XmlElement("w:r", {}, []);
var hyperlinkXml = new XmlElement("w:hyperlink", {"r:id": "r42"}, [runXml]);
- var relationships = {
- "r42": {target: "http://example.com"}
- };
+ var relationships = new Relationships([
+ hyperlinkRelationship("r42", "http://example.com")
+ ]);
var result = readXmlElement(hyperlinkXml, {relationships: relationships});
assert.deepEqual(result.value.href, "http://example.com");
assert.deepEqual(result.value.children[0].type, "run");
@@ -1020,9 +1021,9 @@ test("w:hyperlink", {
"is read as external hyperlink if it has a relationship ID and an anchor": function() {
var runXml = new XmlElement("w:r", {}, []);
var hyperlinkXml = new XmlElement("w:hyperlink", {"r:id": "r42", "w:anchor": "fragment"}, [runXml]);
- var relationships = {
- "r42": {target: "http://example.com/"}
- };
+ var relationships = new Relationships([
+ hyperlinkRelationship("r42", "http://example.com/")
+ ]);
var result = readXmlElement(hyperlinkXml, {relationships: relationships});
assert.deepEqual(result.value.href, "http://example.com/#fragment");
assert.deepEqual(result.value.children[0].type, "run");
@@ -1031,9 +1032,9 @@ test("w:hyperlink", {
"existing fragment is replaced when anchor is set on external link": function() {
var runXml = new XmlElement("w:r", {}, []);
var hyperlinkXml = new XmlElement("w:hyperlink", {"r:id": "r42", "w:anchor": "fragment"}, [runXml]);
- var relationships = {
- "r42": {target: "http://example.com/#previous"}
- };
+ var relationships = new Relationships([
+ hyperlinkRelationship("r42", "http://example.com/#previous")
+ ]);
var result = readXmlElement(hyperlinkXml, {relationships: relationships});
assert.deepEqual(result.value.href, "http://example.com/#fragment");
assert.deepEqual(result.value.children[0].type, "run");
@@ -1251,3 +1252,19 @@ function assertImageBuffer(element, expectedImageBuffer) {
assert.equal(readValue, expectedImageBuffer);
});
}
+
+function hyperlinkRelationship(relationshipId, target) {
+ return {
+ relationshipId: relationshipId,
+ target: target,
+ type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
+ };
+}
+
+function imageRelationship(relationshipId, target) {
+ return {
+ relationshipId: relationshipId,
+ target: target,
+ type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
+ };
+}
diff --git a/test/docx/relationships-reader.tests.js b/test/docx/relationships-reader.tests.js
new file mode 100644
index 0000000..60db3b4
--- /dev/null
+++ b/test/docx/relationships-reader.tests.js
@@ -0,0 +1,65 @@
+var assert = require("assert");
+
+var readRelationships = require("../../lib/docx/relationships-reader").readRelationships;
+var xml = require("../../lib/xml");
+var test = require("../test")(module);
+
+
+test("relationships can be found by ID", function() {
+ var relationships = readRelationships(relationshipsElement([
+ relationshipElement({
+ "Id": "rId1",
+ "Target": "http://example.com/",
+ "Type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
+ }),
+ relationshipElement({
+ "Id": "rId2",
+ "Target": "http://example.net/",
+ "Type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
+ })
+ ]));
+ assert.equal(relationships.findTargetByRelationshipId("rId1"), "http://example.com/");
+});
+
+
+test("relationships can be found by type", function() {
+ var relationships = readRelationships(relationshipsElement([
+ relationshipElement({
+ "Id": "rId2",
+ "Target": "docProps/core.xml",
+ "Type": "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"
+ }),
+ relationshipElement({
+ "Id": "rId1",
+ "Target": "word/document.xml",
+ "Type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
+ }),
+ relationshipElement({
+ "Id": "rId3",
+ "Target": "word/document2.xml",
+ "Type": "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
+ })
+ ]));
+ assert.deepEqual(
+ relationships.findTargetsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"),
+ ["word/document.xml", "word/document2.xml"]
+ );
+});
+
+
+test("when there are no relationships of requested type then empty array is returned", function() {
+ var relationships = readRelationships(relationshipsElement([]));
+ assert.deepEqual(
+ relationships.findTargetsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"),
+ []
+ );
+});
+
+
+function relationshipsElement(children) {
+ return xml.element("{http://schemas.openxmlformats.org/package/2006/relationships}Relationships", {}, children)
+}
+
+function relationshipElement(attributes) {
+ return xml.element("{http://schemas.openxmlformats.org/package/2006/relationships}Relationship", attributes, [])
+}