summaryrefslogtreecommitdiff
path: root/test/csv/parse/test_general.rb
diff options
context:
space:
mode:
authorHiroshi SHIBATA <[email protected]>2022-12-09 08:46:14 +0900
committerHiroshi SHIBATA <[email protected]>2022-12-09 16:36:22 +0900
commit643918ecfe9c980f251247de6acd3be6280da24c (patch)
treea5b4011c13ee3af5b110e377a839e79045266dcd /test/csv/parse/test_general.rb
parent260a00d80e4dcc930b040313a99da29e4b1e6678 (diff)
Merge csv-3.2.6
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6890
Diffstat (limited to 'test/csv/parse/test_general.rb')
-rw-r--r--test/csv/parse/test_general.rb88
1 files changed, 80 insertions, 8 deletions
diff --git a/test/csv/parse/test_general.rb b/test/csv/parse/test_general.rb
index c740462c01..902be2ce4a 100644
--- a/test/csv/parse/test_general.rb
+++ b/test/csv/parse/test_general.rb
@@ -199,6 +199,32 @@ line,5,jkl
field_size_limit: 2048 )
end
+ def test_field_size_limit_max_allowed
+ column = "abcde"
+ assert_equal([[column]],
+ CSV.parse("\"#{column}\"",
+ field_size_limit: column.size + 1))
+ end
+
+ def test_field_size_limit_quote_simple
+ column = "abcde"
+ assert_parse_errors_out("\"#{column}\"",
+ field_size_limit: column.size)
+ end
+
+ def test_field_size_limit_no_quote_implicitly
+ column = "abcde"
+ assert_parse_errors_out("#{column}",
+ field_size_limit: column.size)
+ end
+
+ def test_field_size_limit_no_quote_explicitly
+ column = "abcde"
+ assert_parse_errors_out("#{column}",
+ field_size_limit: column.size,
+ quote_char: nil)
+ end
+
def test_field_size_limit_in_extended_column_not_exceeding
data = <<~DATA
"a","b"
@@ -221,6 +247,59 @@ line,5,jkl
assert_parse_errors_out(data, field_size_limit: 5)
end
+ def test_max_field_size_controls_lookahead
+ assert_parse_errors_out( 'valid,fields,"' + BIG_DATA + '"',
+ max_field_size: 2048 )
+ end
+
+ def test_max_field_size_max_allowed
+ column = "abcde"
+ assert_equal([[column]],
+ CSV.parse("\"#{column}\"",
+ max_field_size: column.size))
+ end
+
+ def test_max_field_size_quote_simple
+ column = "abcde"
+ assert_parse_errors_out("\"#{column}\"",
+ max_field_size: column.size - 1)
+ end
+
+ def test_max_field_size_no_quote_implicitly
+ column = "abcde"
+ assert_parse_errors_out("#{column}",
+ max_field_size: column.size - 1)
+ end
+
+ def test_max_field_size_no_quote_explicitly
+ column = "abcde"
+ assert_parse_errors_out("#{column}",
+ max_field_size: column.size - 1,
+ quote_char: nil)
+ end
+
+ def test_max_field_size_in_extended_column_not_exceeding
+ data = <<~DATA
+ "a","b"
+ "
+ 2
+ ",""
+ DATA
+ assert_nothing_raised(CSV::MalformedCSVError) do
+ CSV.parse(data, max_field_size: 3)
+ end
+ end
+
+ def test_max_field_size_in_extended_column_exceeding
+ data = <<~DATA
+ "a","b"
+ "
+ 2345
+ ",""
+ DATA
+ assert_parse_errors_out(data, max_field_size: 4)
+ end
+
def test_row_sep_auto_cr
assert_equal([["a"]], CSV.parse("a\r"))
end
@@ -246,14 +325,7 @@ line,5,jkl
private
def assert_parse_errors_out(data, **options)
assert_raise(CSV::MalformedCSVError) do
- timeout = 0.2
- if defined?(RubyVM::YJIT.enabled?) and RubyVM::YJIT.enabled?
- timeout = 1 # for --yjit-call-threshold=1
- end
- if defined?(RubyVM::MJIT.enabled?) and RubyVM::MJIT.enabled?
- timeout = 5 # for --jit-wait
- end
- Timeout.timeout(timeout) do
+ Timeout.timeout(0.2) do
CSV.parse(data, **options)
fail("Parse didn't error out")
end