@@ -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
152156line,1,abc
153157line,2,"def\n ghi"
154158
155159line,4,some\r junk
156160line,5,jkl
157161 CSV
158- lines = bad_data . lines . to_a
159- assert_equal ( 6 , lines . size )
160- assert_match ( /\A line,4/ , lines . find { |l | l =~ /some\r junk/ } )
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
176180line,1,abc
177181line,2,"def\n ghi"
178182
179183line,4,8'10"
180184line,5,jkl
181185 CSV
182- lines = bad_data . lines . to_a
183- assert_equal ( 6 , lines . size )
184- assert_match ( /\A line,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