aboutsummaryrefslogtreecommitdiff
path: root/test/main.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/main.tests.js
parent627c4a755395e313234bdb1914d168392006c483 (diff)
Move tests to test for easier Mocha usage
Diffstat (limited to 'test/main.tests.js')
-rw-r--r--test/main.tests.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/test/main.tests.js b/test/main.tests.js
new file mode 100644
index 0000000..d603626
--- /dev/null
+++ b/test/main.tests.js
@@ -0,0 +1,91 @@
+var assert = require("assert");
+var child_process = require("child_process"); // eslint-disable-line camelcase
+var path = require("path");
+var fs = require("fs");
+
+var temp = require('temp').track();
+
+var promises = require("../lib/promises");
+var test = require("./testing").test;
+var testPath = require("./testing").testPath;
+
+describe("CLI", function() {
+ test("HTML is printed to stdout if output file is not set", function() {
+ return runMammoth(testPath("single-paragraph.docx")).then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, "<p>Walking on imported air</p>");
+ });
+ });
+
+ test("HTML is written to file if output file is set", function() {
+ return createTempDir().then(function(tempDir) {
+ var outputPath = path.join(tempDir, "output.html");
+ return runMammoth(testPath("single-paragraph.docx"), outputPath).then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, "");
+ assert.equal(fs.readFileSync(outputPath, "utf8"), "<p>Walking on imported air</p>");
+ });
+ });
+ });
+
+ var imageBase64 = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABNJREFUKFNj/M+ADzDhlWUYqdIAQSwBE8U+X40AAAAASUVORK5CYII=";
+
+ test("inline images are included in output if writing to single file", function() {
+ return runMammoth(testPath("tiny-picture.docx")).then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, '<p><img src="data:image/png;base64,' + imageBase64 + '" /></p>');
+ });
+ });
+
+ test("images are written to separate files if output dir is set", function() {
+ return createTempDir().then(function(tempDir) {
+ var outputPath = path.join(tempDir, "tiny-picture.html");
+ var imagePath = path.join(tempDir, "1.png");
+ return runMammoth(testPath("tiny-picture.docx"), "--output-dir", tempDir).then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, "");
+ assert.equal(fs.readFileSync(outputPath, "utf8"), '<p><img src="1.png" /></p>');
+ assert.equal(fs.readFileSync(imagePath, "base64"), imageBase64);
+ });
+ });
+ });
+
+ test("style map is used if set", function() {
+ return createTempDir().then(function(tempDir) {
+ var styleMapPath = path.join(tempDir, "style-map");
+ fs.writeFileSync(styleMapPath, "p => span:fresh");
+ return runMammoth(testPath("single-paragraph.docx"), "--style-map", styleMapPath).then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, "<span>Walking on imported air</span>");
+ });
+ });
+ });
+
+ test("--output-format=markdown option generate markdown output", function() {
+ return runMammoth(testPath("single-paragraph.docx"), "--output-format=markdown").then(function(result) {
+ assert.equal(result.stderrOutput, "");
+ assert.equal(result.output, "Walking on imported air\n\n");
+ });
+ });
+});
+
+
+function runMammoth() {
+ var args = Array.prototype.slice.call(arguments, 0);
+ var deferred = promises.defer();
+
+ var processArgs = ["node", "bin/mammoth"].concat(args);
+ // TODO: proper escaping of args
+ var command = processArgs.join(" ");
+ child_process.exec(command, function(error, stdout, stderr) { // eslint-disable-line camelcase
+ console.log(stderr); // eslint-disable-line no-console
+ assert.equal(error, null);
+ deferred.resolve({output: stdout, stderrOutput: stderr});
+ });
+
+ return deferred.promise;
+}
+
+function createTempDir() {
+ return promises.nfcall(temp.mkdir, null);
+}