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 '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

end