Sha256: 80c640467af3e32e02f46db10502af269b29cfcfc7545efc34cd374494f75521

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

require 'bundler'
Bundler.require(:default, :test)

require 'minitest/spec'
require 'minitest/autorun'
require 'ccsv'

TEST_CSV="/tmp/test.csv"
DEF_SIZE=20000

def create_csv(delimiter=',',limit=DEF_SIZE)
	open(TEST_CSV,"w") do |f|
        	1.upto(limit) do |n|
			f.puts [n,2*n,3+n].join(delimiter)
		end
	end
end


describe Ccsv do
	before do
		@csv=[]
	end

	after do
		begin; FileUtils.rm TEST_CSV; rescue; end
	end

	it 'reads csv with default delimiter' do
		create_csv
		Ccsv.foreach(TEST_CSV) do |v|
			@csv << v
		end
		@csv[15000].must_equal(['15001','30002','15004'])
		@csv.size.must_equal(DEF_SIZE)
	end

	it 'reads csv with tab delimiter' do
		create_csv("\t")
		Ccsv.foreach(TEST_CSV,"\t") do |v|
			@csv << v
		end
		@csv[15000].must_equal(['15001','30002','15004'])
	end

	it 'reads csv with comma delimiter' do
		create_csv(',')
		Ccsv.foreach(TEST_CSV,',') do |v|
			@csv << v
		end
		@csv[15000].must_equal(['15001','30002','15004'])
	end

	it 'reads csv with a multi-character delimiter' do
		create_csv('|^|')
		Ccsv.foreach(TEST_CSV,'|^|') do |v|
			@csv << v
		end
		@csv[15000].must_equal(['15001','30002','15004'])
	end

	it 'raises error' do
		proc {
			Ccsv.foreach('/non-existent-file') do |x| end
		}.must_raise(RuntimeError)
	end

	it 'filters csv' do
		create_csv
		Ccsv.foreach(TEST_CSV,',',0,[3000..4000]) do |v|
			@csv << v
		end
		@csv[0].must_equal(['3001','6002','3004'])
		@csv.size.must_equal(999)
	end

  it 'reads a line with an escaped delimiter' do
    open(TEST_CSV, 'w') do |file|
      file.puts "field1,field2,field3,field\\,with comma,field5"
    end
    Ccsv.foreach(TEST_CSV, ',') do |v|
      v[0].must_equal('field1')
      v[1].must_equal('field2')
      v[2].must_equal('field3')
      v[3].must_equal('field\\,with comma')
      v[4].must_equal('field5')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ccsv-1.1.0 spec/ccsv_spec.rb