aboutsummaryrefslogtreecommitdiff
path: root/test/docx/files.tests.js
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-07-03 19:19:21 +0100
committerMichael Williamson <mike@zwobble.org>2016-07-03 19:20:00 +0100
commit0b56dfce42c3944cce47e284608e6806f4c839c3 (patch)
tree5f96f9c2908f1c5b00a7192e71d4c192abd7cf47 /test/docx/files.tests.js
parent627c4a755395e313234bdb1914d168392006c483 (diff)
Move tests to test for easier Mocha usage
Diffstat (limited to 'test/docx/files.tests.js')
-rw-r--r--test/docx/files.tests.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/test/docx/files.tests.js b/test/docx/files.tests.js
new file mode 100644
index 0000000..2a0919c
--- /dev/null
+++ b/test/docx/files.tests.js
@@ -0,0 +1,94 @@
+var path = require("path");
+var fs = require("fs");
+var assert = require("assert");
+
+var promises = require("../../lib/promises");
+var Files = require("../../lib/docx/files").Files;
+var uriToPath = require("../../lib/docx/files").uriToPath;
+
+var testing = require("../testing");
+var test = testing.test;
+
+var readFile = promises.promisify(fs.readFile.bind(fs));
+
+
+describe("Files", function() {
+ test("can open files with file URI", function() {
+ var filePath = path.resolve(testing.testPath("tiny-picture.png"));
+ var files = new Files(null);
+ return files.read("file:///" + filePath.replace(/^\//, ""), "base64").then(function(contents) {
+ return readFile(filePath, "base64").then(function(expectedContents) {
+ assert.deepEqual(contents, expectedContents);
+ });
+ });
+ });
+
+ test("can open files with relative URI", function() {
+ var filePath = path.resolve(testing.testPath("tiny-picture.png"));
+ var files = new Files(testing.testPath("."));
+ return files.read("tiny-picture.png", "base64").then(function(contents) {
+ return readFile(filePath, "base64").then(function(expectedContents) {
+ assert.deepEqual(contents, expectedContents);
+ });
+ });
+ });
+
+ test("given base is not set when opening relative uri then error is raised", function() {
+ var files = new Files(null);
+ return assertError(files.read("not-a-real-file.png", "base64"), function(err) {
+ assert.equal(err.message, "could not find external image 'not-a-real-file.png', path of input document is unknown");
+ });
+ });
+
+ test("error if relative uri cannot be opened", function() {
+ var files = new Files("/tmp");
+ return assertError(files.read("not-a-real-file.png", "base64"), function(err) {
+ assertRegex(err.message, /could not open external image: 'not-a-real-file.png' \(document directory: '\/tmp'\)\nENOENT.*\/tmp\/not-a-real-file.png.*/);
+ });
+ });
+});
+
+function assertError(promise, func) {
+ return promise.then(function() {
+ assert(false, "Expected error");
+ }, func);
+}
+
+function assertRegex(actual, expected) {
+ assert.ok(expected.test(actual), "Expected regex: " + expected + "\nbut was: " + actual);
+}
+
+
+describe("uriToPath", function() {
+ test("leading slash is retained on non-Windows file URIs", function() {
+ assert.equal(uriToPath("file:///a/b/c", "linux"), "/a/b/c");
+ assert.equal(uriToPath("file:///a/b/c", "win32"), "/a/b/c");
+ });
+
+ test("URI is unquoted", function() {
+ assert.equal(uriToPath("file:///a%20b"), "/a b");
+ });
+
+ test("when host is set to localhost then path can be found", function() {
+ assert.equal(uriToPath("file://localhost/a/b/c"), "/a/b/c");
+ });
+
+ test("when host is set but not localhost then path cannot be found", function() {
+ assert.throws(function() {
+ uriToPath("file://example/a/b/c");
+ }, /Could not convert URI to path: file:\/\/example\/a\/b\/c/);
+ });
+
+ test("leading slash is not dropped on Windows file URIs when platform is not Windows", function() {
+ assert.equal(uriToPath("file:///c:/a", "linux"), "/c:/a");
+ });
+
+ test("leading slash is dropped on Windows file URIs when platform is Windows", function() {
+ assert.equal(uriToPath("file:///c:/a", "win32"), "c:/a");
+ assert.equal(uriToPath("file:///C:/a", "win32"), "C:/a");
+ });
+
+ test("relative URI is unquoted", function() {
+ assert.equal(uriToPath("a%20b/c"), "a b/c");
+ });
+});