Skip to content

Commit eeab2ed

Browse files
committed
test: split malformed CSV tests
1 parent f4e4c5d commit eeab2ed

File tree

1 file changed

+27
-30
lines changed

1 file changed

+27
-30
lines changed

test/csv/test_csv_parsing.rb

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -143,55 +143,52 @@ def test_non_regex_edge_cases
143143
end
144144
end
145145

146-
def test_malformed_csv
147-
assert_raise(CSV::MalformedCSVError) do
146+
def test_malformed_csv_nl_first_line
147+
error = assert_raise(CSV::MalformedCSVError) do
148148
CSV.parse_line("1,2\r,3", row_sep: "\n")
149149
end
150+
assert_equal("Unquoted fields do not allow \\r or \\n in line 1.",
151+
error.message)
152+
end
150153

151-
bad_data = <<-CSV
154+
def test_malformed_csv_nl_middle_line
155+
csv = <<-CSV
152156
line,1,abc
153157
line,2,"def\nghi"
154158
155159
line,4,some\rjunk
156160
line,5,jkl
157161
CSV
158-
lines = bad_data.lines.to_a
159-
assert_equal(6, lines.size)
160-
assert_match(/\Aline,4/, lines.find { |l| l =~ /some\rjunk/ })
161-
162-
csv = CSV.new(bad_data)
163-
begin
164-
loop do
165-
assert_not_nil(csv.shift)
166-
assert_send([csv.lineno, :<, 4])
167-
end
168-
rescue CSV::MalformedCSVError
169-
assert_equal( "Unquoted fields do not allow \\r or \\n in line 4.",
170-
$!.message )
162+
163+
error = assert_raise(CSV::MalformedCSVError) do
164+
CSV.parse(csv)
171165
end
166+
assert_equal("Unquoted fields do not allow \\r or \\n in line 4.",
167+
error.message)
168+
end
172169

173-
assert_raise(CSV::MalformedCSVError) { CSV.parse_line('1,2,"3...') }
170+
def test_malformed_csv_unclosed_quote
171+
error = assert_raise(CSV::MalformedCSVError) do
172+
CSV.parse_line('1,2,"3...')
173+
end
174+
assert_equal("Unclosed quoted field in line 1.",
175+
error.message)
176+
end
174177

175-
bad_data = <<-CSV
178+
def test_malformed_csv_illegal_quote_middle_line
179+
csv = <<-CSV
176180
line,1,abc
177181
line,2,"def\nghi"
178182
179183
line,4,8'10"
180184
line,5,jkl
181185
CSV
182-
lines = bad_data.lines.to_a
183-
assert_equal(6, lines.size)
184-
assert_match(/\Aline,4/, lines.find { |l| l =~ /8'10"/ })
185-
186-
csv = CSV.new(bad_data)
187-
begin
188-
loop do
189-
assert_not_nil(csv.shift)
190-
assert_send([csv.lineno, :<, 4])
191-
end
192-
rescue CSV::MalformedCSVError
193-
assert_equal("Illegal quoting in line 4.", $!.message)
186+
187+
error = assert_raise(CSV::MalformedCSVError) do
188+
CSV.parse(csv)
194189
end
190+
assert_equal("Illegal quoting in line 4.",
191+
error.message)
195192
end
196193

197194
def test_the_parse_fails_fast_when_it_can_for_unquoted_fields

0 commit comments

Comments
 (0)