csv
Version:
CSV parser with simple api, full of options and tested against large datasets.
124 lines (107 loc) • 3.55 kB
text/coffeescript
###
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 = ->
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 = ->
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