var assert = require("assert"); var documents = require("../lib/documents"); var DocumentConverter = require("../lib/document-to-html").DocumentConverter; var test = require("./testing").test; var styles = require("../lib/styles"); describe('DocumentConverter', function() { test('should convert document containing one paragraph to single p element', function() { var document = new documents.Document([ paragraphOfText("Hello.") ]); var converter = new DocumentConverter(); return converter.convertToHtml(document).then(function(result) { assert.equal(result.html, "
Hello.
"); }); }); test('ignores empty paragraphs', function() { var document = new documents.Document([ paragraphOfText("") ]); var converter = new DocumentConverter(); return converter.convertToHtml(document).then(function(result) { assert.equal(result.html, ""); }); }); test('can use non-default HTML element for unstyled paragraphs', function() { var document = new documents.Document([ paragraphOfText("Hello.") ]); var converter = new DocumentConverter({defaultParagraphStyle: styles.topLevelElement("h1")}); return converter.convertToHtml(document).then(function(result) { assert.equal(result.html, "1 < 2
"); }); }); test('should convert document containing multiple paragraphs to multiple p elements', function() { var document = new documents.Document([ paragraphOfText("Hello."), paragraphOfText("Goodbye.") ]); var converter = new DocumentConverter(); return converter.convertToHtml(document).then(function(result) { assert.equal(result.html, "Hello.
Goodbye.
"); }); }); test('uses style mappings to pick HTML element for docx paragraph', function() { var document = new documents.Document([ paragraphOfText("Hello.", "Heading1"), ]); var converter = new DocumentConverter({ paragraphStyleMap: { "Heading1": styles.topLevelElement("h1") } }); return converter.convertToHtml(document).then(function(result) { assert.equal(result.html, "Hello.
"); }); }); test('italic runs are wrapped in tags', function() { var run = runOfText("Hello.", {isItalic: true}); var converter = new DocumentConverter(); return converter.convertToHtml(run).then(function(result) { assert.equal(result.html, "Hello."); }); }); test('run can be both bold and italic', function() { var run = runOfText("Hello.", {isBold: true, isItalic: true}); var converter = new DocumentConverter(); return converter.convertToHtml(run).then(function(result) { assert.equal(result.html, "Hello."); }); }); test('run styles are converted to HTML if mapping exists', function() { var run = runOfText("Hello.", {styleName: "Emphasis"}); var converter = new DocumentConverter({ runStyleMap: { "Emphasis": styles.elements(["strong"]) } }); return converter.convertToHtml(run).then(function(result) { assert.equal(result.html, "Hello."); }); }); test('docx hyperlink is converted to ', function() { var hyperlink = new documents.Hyperlink( [runOfText("Hello.")], {href: "http://www.example.com"} ); var converter = new DocumentConverter(); return converter.convertToHtml(hyperlink).then(function(result) { assert.equal(result.html, 'Hello.'); }); }); }); function paragraphOfText(text, styleName) { var run = runOfText(text); return new documents.Paragraph([run], { styleName: styleName }); } function runOfText(text, properties) { var textElement = new documents.Text(text); return new documents.Run([textElement], properties); }