diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-08-26 14:53:21 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2022-09-03 15:54:07 +0900 |
commit | cd0c2a67c482c441ac7f0a07c0f81573d6b6072f (patch) | |
tree | eef3b14c36dad87ec04eb990a022f67fb1094021 /test | |
parent | c69fffe67d7ad9c1afc4799222e819e0617e11c0 (diff) |
Merge csv-3.2.4
Diffstat (limited to 'test')
-rw-r--r-- | test/csv/parse/test_convert.rb | 59 | ||||
-rw-r--r-- | test/csv/test_data_converters.rb | 84 | ||||
-rw-r--r-- | test/csv/test_encodings.rb | 31 |
3 files changed, 174 insertions, 0 deletions
diff --git a/test/csv/parse/test_convert.rb b/test/csv/parse/test_convert.rb index 21d9f20b28..2ac255695e 100644 --- a/test/csv/parse/test_convert.rb +++ b/test/csv/parse/test_convert.rb @@ -107,4 +107,63 @@ class TestCSVParseConvert < Test::Unit::TestCase assert_equal([nil, "empty", "a"], CSV.parse_line(',"",a', empty_value: "empty")) end + + sub_test_case("#quoted?") do + def setup + @preserving_converter = lambda do |field, info| + f = field.encode(CSV::ConverterEncoding) + return f if info.quoted? + begin + Integer(f, 10) + rescue + f + end + end + + @quoted_header_converter = lambda do |field, info| + f = field.encode(CSV::ConverterEncoding) + return f if info.quoted? + f.to_sym + end + end + + def test_parse_line + row = CSV.parse_line('1,"2",3', converters: @preserving_converter) + assert_equal([1, "2", 3], row) + end + + def test_parse + expected = [["quoted", "unquoted"], ["109", 1], ["10A", 2]] + rows = CSV.parse(<<~CSV, converters: @preserving_converter) + "quoted",unquoted + "109",1 + "10A",2 + CSV + assert_equal(expected, rows) + end + + def test_alternating_quote + row = CSV.parse_line('"1",2,"3"', converters: @preserving_converter) + assert_equal(['1', 2, '3'], row) + end + + def test_parse_headers + expected = [["quoted", :unquoted], ["109", "1"], ["10A", "2"]] + table = CSV.parse(<<~CSV, headers: true, header_converters: @quoted_header_converter) + "quoted",unquoted + "109",1 + "10A",2 + CSV + assert_equal(expected, table.to_a) + end + + def test_parse_with_string_headers + expected = [["quoted", :unquoted], %w[109 1], %w[10A 2]] + table = CSV.parse(<<~CSV, headers: '"quoted",unquoted', header_converters: @quoted_header_converter) + "109",1 + "10A",2 + CSV + assert_equal(expected, table.to_a) + end + end end diff --git a/test/csv/test_data_converters.rb b/test/csv/test_data_converters.rb index 1620e077be..c20a5d1f4b 100644 --- a/test/csv/test_data_converters.rb +++ b/test/csv/test_data_converters.rb @@ -103,4 +103,88 @@ class TestCSVDataConverters < Test::Unit::TestCase assert_equal(datetime, CSV::Converters[:date_time][iso8601_string]) end + + def test_builtin_date_time_converter_rfc3339_minute + rfc3339_string = "2018-01-14 22:25" + datetime = DateTime.new(2018, 1, 14, 22, 25) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_second + rfc3339_string = "2018-01-14 22:25:19" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_under_second + rfc3339_string = "2018-01-14 22:25:19.1" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_under_second_offset + rfc3339_string = "2018-01-14 22:25:19.1+09:00" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1, "+9") + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_offset + rfc3339_string = "2018-01-14 22:25:19+09:00" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19, "+9") + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_utc + rfc3339_string = "2018-01-14 22:25:19Z" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_minute + rfc3339_string = "2018-01-14\t22:25" + datetime = DateTime.new(2018, 1, 14, 22, 25) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_second + rfc3339_string = "2018-01-14\t22:25:19" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_under_second + rfc3339_string = "2018-01-14\t22:25:19.1" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_under_second_offset + rfc3339_string = "2018-01-14\t22:25:19.1+09:00" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19.1, "+9") + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_offset + rfc3339_string = "2018-01-14\t22:25:19+09:00" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19, "+9") + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end + + def test_builtin_date_time_converter_rfc3339_tab_utc + rfc3339_string = "2018-01-14\t22:25:19Z" + datetime = DateTime.new(2018, 1, 14, 22, 25, 19) + assert_equal(datetime, + CSV::Converters[:date_time][rfc3339_string]) + end end diff --git a/test/csv/test_encodings.rb b/test/csv/test_encodings.rb index 8d228c05f3..f08d551f69 100644 --- a/test/csv/test_encodings.rb +++ b/test/csv/test_encodings.rb @@ -288,6 +288,37 @@ class TestCSVEncodings < Test::Unit::TestCase error.message) end + def test_string_input_transcode + # U+3042 HIRAGANA LETTER A + # U+3044 HIRAGANA LETTER I + # U+3046 HIRAGANA LETTER U + value = "\u3042\u3044\u3046" + csv = CSV.new(value, encoding: "UTF-8:EUC-JP") + assert_equal([[value.encode("EUC-JP")]], + csv.read) + end + + def test_string_input_set_encoding_string + # U+3042 HIRAGANA LETTER A + # U+3044 HIRAGANA LETTER I + # U+3046 HIRAGANA LETTER U + value = "\u3042\u3044\u3046".encode("EUC-JP") + csv = CSV.new(value.dup.force_encoding("UTF-8"), encoding: "EUC-JP") + assert_equal([[value.encode("EUC-JP")]], + csv.read) + end + + def test_string_input_set_encoding_encoding + # U+3042 HIRAGANA LETTER A + # U+3044 HIRAGANA LETTER I + # U+3046 HIRAGANA LETTER U + value = "\u3042\u3044\u3046".encode("EUC-JP") + csv = CSV.new(value.dup.force_encoding("UTF-8"), + encoding: Encoding.find("EUC-JP")) + assert_equal([[value.encode("EUC-JP")]], + csv.read) + end + private def assert_parses(fields, encoding, **options) |