sheetjs_sheetjs/test.js
SheetJS 713f5aa417 version bump 0.3.0: necessary cleanup
- merged test repo with xls
- travis integration
- shifted to Apache 2.0 LICENSE
- mocha tests

The shift to Apache 2.0 was long overdue.  It's becoming clear that compliance
requires deeper integration with the xls libraries and other implementations
whose specifications are covered under the OSP.  It was a grave oversight for
the ISO and ECMA people to not try to implement parsers themselves, for if they
did I suspect the outcome would have been much different
2013-10-30 14:50:34 -07:00

40 lines
1.5 KiB
JavaScript

/* vim: set ts=2: */
var XLSX;
var fs = require('fs'), assert = require('assert');
describe('source', function() { it('should load', function() { XLSX = require('./'); }); });
var files = (fs.existsSync('tests.lst') ? fs.readFileSync('tests.lst', 'utf-8').split("\n") : fs.readdirSync('test_files')).filter(function(x){return x.substr(-5)==".xlsx" || x.substr(-13)==".xlsx.pending"});
function parsetest(x, wb) {
describe(x + ' should have all bits', function() {
var sname = './test_files/' + x + '.sheetnames';
it('should have all sheets', function() {
wb.SheetNames.forEach(function(y) { assert(wb.Sheets[y], 'bad sheet ' + y); });
});
it('should have the right sheet names', fs.existsSync(sname) ? function() {
var file = fs.readFileSync(sname, 'utf-8');
var names = wb.SheetNames.join("\n") + "\n";
assert.equal(file, names);
} : null);
});
describe(x + ' should generate correct output', function() {
wb.SheetNames.forEach(function(ws, i) {
var name = ('./test_files/' + x + '.' + i + '.csv');
it('#' + i + ' (' + ws + ')', fs.existsSync(name) ? function() {
var file = fs.readFileSync(name, 'utf-8');
var csv = XLSX.utils.make_csv(wb.Sheets[ws]);
assert.equal(file.replace(/"/g,""), csv.replace(/"/g,""), "CSV badness");
} : null);
});
});
}
describe('should parse test files', function() {
files.forEach(function(x) {
it(x, x.substr(-8) == ".pending" ? null : function() {
var wb = XLSX.readFile('./test_files/' + x);
parsetest(x, wb);
});
});
});