2013-10-30 19:26:07 +00:00
/* vim: set ts=2: */
var XLSX ;
var fs = require ( 'fs' ) , assert = require ( 'assert' ) ;
2014-01-23 06:20:19 +00:00
describe ( 'source' , function ( ) { it ( 'should load' , function ( ) { XLSX = require ( './' ) ; } ) ; } ) ;
2013-10-30 19:26:07 +00:00
2014-01-28 16:38:02 +00:00
var ex = [ ".xlsb" , ".xlsm" , ".xlsx" ] ;
var exp = ex . map ( function ( x ) { return x + ".pending" ; } ) ;
function test _file ( x ) { return ex . indexOf ( x . substr ( - 5 ) ) >= 0 || exp . indexOf ( x . substr ( - 13 ) ) >= 0 ; }
var files = ( fs . existsSync ( 'tests.lst' ) ? fs . readFileSync ( 'tests.lst' , 'utf-8' ) . split ( "\n" ) : fs . readdirSync ( 'test_files' ) ) . filter ( test _file ) ;
2013-10-30 19:26:07 +00:00
2014-01-23 06:20:19 +00:00
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
function fixsheetname ( x ) { return x . substr ( 0 , 31 ) ; }
2013-12-27 03:15:16 +00:00
function normalizecsv ( x ) { return x . replace ( /\t/g , "," ) . replace ( /#{255}/g , "" ) . replace ( /"/g , "" ) . replace ( /[\n\r]+/g , "\n" ) . replace ( /\n*$/ , "" ) ; }
2013-10-30 19:26:07 +00:00
function parsetest ( x , wb ) {
describe ( x + ' should have all bits' , function ( ) {
2013-12-27 03:15:16 +00:00
var sname = './test_files/2011/' + x + '.sheetnames' ;
2013-10-30 19:26:07 +00:00
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' ) ;
2014-01-23 06:20:19 +00:00
var names = wb . SheetNames . map ( fixsheetname ) . join ( "\n" ) + "\n" ;
2013-12-27 03:15:16 +00:00
assert . equal ( names , file ) ;
2013-10-30 19:26:07 +00:00
} : null ) ;
} ) ;
2014-01-23 06:20:19 +00:00
describe ( x + ' should generate CSV' , function ( ) {
wb . SheetNames . forEach ( function ( ws , i ) {
it ( '#' + i + ' (' + ws + ')' , function ( ) {
var csv = XLSX . utils . make _csv ( wb . Sheets [ ws ] ) ;
} ) ;
} ) ;
} ) ;
2014-01-23 15:55:07 +00:00
describe ( x + ' should generate JSON' , function ( ) {
wb . SheetNames . forEach ( function ( ws , i ) {
it ( '#' + i + ' (' + ws + ')' , function ( ) {
var json = XLSX . utils . sheet _to _row _object _array ( wb . Sheets [ ws ] ) ;
} ) ;
} ) ;
} ) ;
describe ( x + ' should generate formulae' , function ( ) {
wb . SheetNames . forEach ( function ( ws , i ) {
it ( '#' + i + ' (' + ws + ')' , function ( ) {
var json = XLSX . utils . get _formulae ( wb . Sheets [ ws ] ) ;
} ) ;
} ) ;
} ) ;
2013-10-30 19:26:07 +00:00
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 ] ) ;
2013-12-27 03:15:16 +00:00
assert . equal ( normalizecsv ( csv ) , normalizecsv ( file ) , "CSV badness" ) ;
2013-10-30 19:26:07 +00:00
} : 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 ) ;
} ) ;
} ) ;
} ) ;
2014-01-15 07:26:00 +00:00
describe ( 'should have comment as part of cell\'s properties' , function ( ) {
2014-01-18 13:45:49 +00:00
var ws ;
before ( function ( ) {
2014-01-28 16:38:02 +00:00
XLSX = require ( './' ) ;
2014-01-16 03:42:25 +00:00
var wb = XLSX . readFile ( './test_files/apachepoi_SimpleWithComments.xlsx' ) ;
2014-01-15 07:26:00 +00:00
var sheetName = 'Sheet1' ;
2014-01-18 13:45:49 +00:00
ws = wb . Sheets [ sheetName ] ;
} ) ;
it ( 'Parse comments.xml and insert into cell' , function ( ) {
2014-01-15 07:26:00 +00:00
assert . equal ( ws . B1 . c . length , 1 , "must have 1 comment" ) ;
2014-01-18 13:45:49 +00:00
assert . equal ( ws . B1 . c [ 0 ] . t , "Yegor Kozlov:\r\nfirst cell" , "must have the concatenated texts" ) ;
assert . equal ( ws . B1 . c [ 0 ] . r , '<span style="font-weight: bold;">Yegor Kozlov:</span><span style=""><br/>first cell</span>' , "must have the html representation" ) ;
assert . equal ( ws . B1 . c [ 0 ] . a , "Yegor Kozlov" , "must have the same author" ) ;
2014-01-15 07:26:00 +00:00
} ) ;
} ) ;