1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/csv] Add invalid: :replace for CSV.open (#130)

This PR adds `invalid: :replace` for `CSV.open`. It is a PR similar to #129.
https://github.com/ruby/csv/commit/5bf687341c
This commit is contained in:
Koichi ITO 2020-06-04 12:33:47 +09:00 committed by Nobuyoshi Nakada
parent cee10c1b70
commit 08e70126ae
No known key found for this signature in database
GPG key ID: 7CD2805BFA3770C6
Notes: git 2020-07-20 03:35:40 +09:00
2 changed files with 35 additions and 2 deletions

View file

@ -962,6 +962,8 @@ class CSV
#
# possible options elements:
# hash form:
# :invalid => nil # raise error on invalid byte sequence (default)
# :invalid => :replace # replace invalid byte sequence
# :undef => :replace # replace undefined conversion
# :replace => string # replacement string ("?" or "\uFFFD" if not specified)
#
@ -1026,6 +1028,7 @@ class CSV
# wrap a File opened with the remaining +args+ with no newline
# decorator
file_opts = {universal_newline: false}.merge(options)
options.delete(:invalid)
options.delete(:undef)
options.delete(:replace)

View file

@ -135,6 +135,36 @@ class TestCSVInterfaceRead < Test::Unit::TestCase
end
end
def test_open_with_invalid_nil
CSV.open(@input.path, "w", encoding: Encoding::CP932, invalid: nil) do |rows|
error = assert_raise(Encoding::InvalidByteSequenceError) do
rows << ["\x82\xa0"]
end
assert_equal('"\x82" on UTF-8',
error.message)
end
end
def test_open_with_invalid_replace
CSV.open(@input.path, "w", encoding: Encoding::CP932, invalid: :replace) do |rows|
rows << ["\x82\xa0".force_encoding(Encoding::UTF_8)]
end
CSV.open(@input.path, encoding: Encoding::CP932) do |csv|
assert_equal([["??"]],
csv.to_a)
end
end
def test_open_with_invalid_replace_and_replace_string
CSV.open(@input.path, "w", encoding: Encoding::CP932, invalid: :replace, replace: "X") do |rows|
rows << ["\x82\xa0".force_encoding(Encoding::UTF_8)]
end
CSV.open(@input.path, encoding: Encoding::CP932) do |csv|
assert_equal([["XX"]],
csv.to_a)
end
end
def test_open_with_undef_replace
# U+00B7 Middle Dot
CSV.open(@input.path, "w", encoding: Encoding::CP932, undef: :replace) do |rows|