officegen-dbb
Version:
Modification of Ziv Barber's officegen, to provide a reasonable way to have line breaks in table cells.
157 lines (106 loc) • 4.48 kB
JavaScript
//======================================================================================================================
// TEST SUITE FOR OFFICEGEN
// This generates small individual files that test specific aspects of the API
// and compares them to reference files.
//
// The comparison is based on string comparisons of specified XML subdocuments.
// Comparing PPTX files for exact-bytewise equality fails because the doc properties include the creation date.
// This method tests a defined set of XML subdocuments for string equality.
//======================================================================================================================
var assert = require('assert');
var officegen = require('../');
var fs = require('fs');
var path = require('path');
var IMAGEDIR = __dirname + "/../examples/";
var OUTDIR = __dirname + "/../tmp/";
var AdmZip = require('adm-zip');
var docxEquivalent = function (path1, path2, subdocs) {
var left = new AdmZip(path1);
var right = new AdmZip(path2);
for (var i = 0; i < subdocs.length; i++) {
if (left.readAsText(subdocs[i]) != right.readAsText(subdocs[i])) {
return false;
}
}
return true;
}
// Common error method
var onError = function (err) {
console.log(err);
assert(false);
done()
};
describe("DOCX generator", function () {
this.timeout(1000);
it("creates a document with text and styles", function (done) {
var docx = officegen ( 'docx' );
docx.on ( 'error', onError );
var pObj = docx.createP ();
pObj.addText ( 'Simple' );
pObj.addText ( ' with color', { color: '000088' } );
pObj.addText ( ' and back color.', { color: '00ffff', back: '000088' } );
var pObj = docx.createP ();
pObj.addText ( 'Bold + underline', { bold: true, underline: true } );
var pObj = docx.createP ( { align: 'center' } );
pObj.addText ( 'Center this text.' );
var pObj = docx.createP ();
pObj.options.align = 'right';
pObj.addText ( 'Align this text to the right.' );
var pObj = docx.createP ();
pObj.addText ( 'Those two lines are in the same paragraph,' );
pObj.addLineBreak ();
pObj.addText ( 'but they are separated by a line break.' );
docx.putPageBreak ();
var pObj = docx.createP ();
pObj.addText ( 'Fonts face only.', { font_face: 'Arial' } );
pObj.addText ( ' Fonts face and size.', { font_face: 'Arial', font_size: 40 } );
docx.putPageBreak ();
var pObj = docx.createListOfNumbers ();
pObj.addText ( 'Option 1' );
var pObj = docx.createListOfNumbers ();
pObj.addText ( 'Option 2' );
var FILENAME = "test-doc-1.docx";
var out = fs.createWriteStream(OUTDIR + FILENAME);
docx.generate(out);
out.on ( 'close', function () {
done ();
});
});
it("can handle text without spaces", function (done) {
var docx = officegen ( 'docx' );
docx.on ( 'error', onError );
var pObj = docx.createP();
pObj.addText('Hello,World');
var FILENAME = "test-doc-3.docx";
var out = fs.createWriteStream(OUTDIR + FILENAME);
docx.generate(out);
out.on ( 'close', function () {
done ();
});
});
it("creates a document with images", function (done) {
var docx = officegen ( 'docx' );
docx.on ( 'error', onError );
var pObj = docx.createP ();
var pObj = docx.createP ();
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/image3.png' ) );
docx.putPageBreak ();
var pObj = docx.createP ();
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/image1.png' ) );
var pObj = docx.createP ();
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/sword_001.png' ) );
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/sword_002.png' ) );
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/sword_003.png' ) );
pObj.addText ( '... some text here ...', { font_face: 'Arial' } );
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/sword_004.png' ) );
var pObj = docx.createP ();
pObj.addImage ( path.resolve(IMAGEDIR, 'images_for_examples/image1.png' ) );
var FILENAME = "test-doc-2.docx";
var out = fs.createWriteStream(OUTDIR + FILENAME);
out.on ( 'error', onError );
docx.generate(out);
out.on ( 'close', function () {
done ();
});
});
});