UNPKG

csv

Version:

CSV parser with simple api, full of options and tested against large datasets.

124 lines (107 loc) 3.55 kB
### Test CSV - Copyright David Worms <open@adaltas.com> (BSD Licensed) ### fs = require 'fs' stream = require 'stream' should = require 'should' Iconv = require('iconv').Iconv csv = if process.env.CSV_COV then require '../lib-cov' else require '../src' describe 'to', -> describe 'auto', -> it 'should write to a path', (next) -> data = """ 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 """ csv() .from(data) .to( "#{__dirname}/fromto/string_to_stream.tmp" ) .on 'close', (count) -> count.should.eql 2 expect = fs.readFileSync "#{__dirname}/fromto/string_to_stream.out" result = fs.readFileSync "#{__dirname}/fromto/string_to_stream.tmp" result.should.eql expect fs.unlink "#{__dirname}/fromto/string_to_stream.tmp", next it 'should write to a string', (next) -> data = """ 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 """ csv() .from.string(data) .to (output) -> output.should.eql data next() describe 'string', -> it 'should write to a string', (next) -> data = """ 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 """ csv() .from.string(data) .to.string (output, count) -> output.should.eql data count.should.eql 2 next() describe 'path', -> it 'Test string to stream', (next) -> data = """ 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 """ csv() .from.string(data) .to.path( "#{__dirname}/fromto/string_to_stream.tmp" ) .on 'record', (record, index) -> index.should.be.below 2 if index is 0 record[0].should.eql '20322051544' else if index is 1 record[0].should.eql '28392898392' .on 'close', (count) -> count.should.eql 2 expect = fs.readFileSync "#{__dirname}/fromto/string_to_stream.out" result = fs.readFileSync "#{__dirname}/fromto/string_to_stream.tmp" result.should.eql expect fs.unlink "#{__dirname}/fromto/string_to_stream.tmp", next describe 'array', -> it 'should output an array', (next) -> data = """ 20322051544,1979.0,8.8017226E7,ABC,45,2000-01-01 28392898392,1974.0,8.8392926E7,DEF,23,2050-11-27 """ csv() .from.string(data) .to.array (data) -> data.should.eql [ ['20322051544','1979.0','8.8017226E7','ABC','45','2000-01-01'] ['28392898392','1974.0','8.8392926E7','DEF','23','2050-11-27'] ] next() describe 'end', -> it 'should call the end function', (next) -> out = -> @writable = true @ out.prototype.__proto__ = stream.prototype out.prototype.write = (data) -> true out.prototype.end = next out = new out csv() .from.array(['a','b']) .to.stream( out ) it 'should not call the end function if end is false', (next) -> out = -> @writable = true @ out.prototype.__proto__ = stream.prototype out.prototype.write = (data) -> true out.prototype.end = -> true.should.not.be.ok out = new out csv() .from.array(['a','b']) .to.stream( out, end: false ) .on 'end', -> setTimeout next, 200