1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
# -*- coding: utf-8 -*-
# frozen_string_literal: false
require_relative "../helper"
class TestCSVParseConvert < Test::Unit::TestCase
extend DifferentOFS
def setup
super
@data = "Numbers,:integer,1,:float,3.015"
@parser = CSV.new(@data)
@custom = lambda {|field| /\A:(\S.*?)\s*\Z/ =~ field ? $1.to_sym : field}
@time = Time.utc(2018, 12, 30, 6, 41, 29)
@windows_safe_time_data = @time.strftime("%a %b %d %H:%M:%S %Y")
end
def test_integer
@parser.convert(:integer)
assert_equal(["Numbers", ":integer", 1, ":float", "3.015"],
@parser.shift)
end
def test_float
@parser.convert(:float)
assert_equal(["Numbers", ":integer", 1.0, ":float", 3.015],
@parser.shift)
end
def test_float_integer
@parser.convert(:float)
@parser.convert(:integer)
assert_equal(["Numbers", ":integer", 1.0, ":float", 3.015],
@parser.shift)
end
def test_integer_float
@parser.convert(:integer)
@parser.convert(:float)
assert_equal(["Numbers", ":integer", 1, ":float", 3.015],
@parser.shift)
end
def test_numeric
@parser.convert(:numeric)
assert_equal(["Numbers", ":integer", 1, ":float", 3.015],
@parser.shift)
end
def test_all
@data << ",#{@windows_safe_time_data}"
@parser = CSV.new(@data)
@parser.convert(:all)
assert_equal(["Numbers", ":integer", 1, ":float", 3.015, @time.to_datetime],
@parser.shift)
end
def test_custom
@parser.convert do |field|
/\A:(\S.*?)\s*\Z/ =~ field ? $1.to_sym : field
end
assert_equal(["Numbers", :integer, "1", :float, "3.015"],
@parser.shift)
end
def test_builtin_custom
@parser.convert(:numeric)
@parser.convert(&@custom)
assert_equal(["Numbers", :integer, 1, :float, 3.015],
@parser.shift)
end
def test_custom_field_info_line
@parser.convert do |field, info|
assert_equal(1, info.line)
info.index == 4 ? Float(field).floor : field
end
assert_equal(["Numbers", ":integer", "1", ":float", 3],
@parser.shift)
end
def test_custom_field_info_header
headers = ["one", "two", "three", "four", "five"]
@parser = CSV.new(@data, headers: headers)
@parser.convert do |field, info|
info.header == "three" ? Integer(field) * 100 : field
end
assert_equal(CSV::Row.new(headers,
["Numbers", ":integer", 100, ":float", "3.015"]),
@parser.shift)
end
def test_custom_blank_field
converter = lambda {|field| field.nil?}
row = CSV.parse_line('nil,', converters: converter)
assert_equal([false, true], row)
end
def test_nil_value
assert_equal(["nil", "", "a"],
CSV.parse_line(',"",a', nil_value: "nil"))
end
def test_empty_value
assert_equal([nil, "empty", "a"],
CSV.parse_line(',"",a', empty_value: "empty"))
end
end
|