diff --git a/lib/erb.rb b/lib/erb.rb index c9b987dfb7..d8a91e34bd 100644 --- a/lib/erb.rb +++ b/lib/erb.rb @@ -668,6 +668,8 @@ def prepare_trim_mode(mode) # :nodoc: when 0 return [false, nil] when String + warn "Invalid ERB trim mode: #{mode.inspect}", uplevel: 5 unless mode.match?(/\A(%|-|>|<>){1,2}\z/) + perc = mode.include?('%') if mode.include?('-') return [perc, '-'] @@ -679,6 +681,7 @@ def prepare_trim_mode(mode) # :nodoc: [perc, nil] end else + warn "Invalid ERB trim mode: #{mode.inspect}", uplevel: 5 unless mode.nil? return [false, nil] end end diff --git a/test/erb/test_erb.rb b/test/erb/test_erb.rb index ffa1fef23d..8da5051579 100644 --- a/test/erb/test_erb.rb +++ b/test/erb/test_erb.rb @@ -235,6 +235,24 @@ def test_explicit_trim_line_with_carriage_return assert_equal("line\r\n" * 3, erb.result) end + def test_invalid_trim_mode + assert_warning(/Invalid ERB trim mode/) do + @erb.new("", trim_mode: 'abc-def') + end + + assert_warning(/Invalid ERB trim mode/) do + @erb.new("", trim_mode: '%<') + end + + assert_warning(/Invalid ERB trim mode/) do + @erb.new("", trim_mode: '%<>-') + end + + assert_warning(/Invalid ERB trim mode/) do + @erb.new("", trim_mode: 3) + end + end + def test_run out = StringIO.new orig, $stdout = $stdout, out