mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
Reapply "[ruby/erb] Reapply "Remove safe_level and further positional"
This reverts commit 5b6658a406b5f1c535aed4cb68e8e18a3cbabb81. With a ruby spec fix.
This commit is contained in:
parent
5b6658a406
commit
6365d7b0a5
15
lib/erb.rb
15
lib/erb.rb
@ -853,20 +853,7 @@ class ERB
|
||||
# [newline control]: rdoc-ref:ERB@Suppressing+Unwanted+Newlines
|
||||
# [shorthand format]: rdoc-ref:ERB@Shorthand+Format+for+Execution+Tags
|
||||
#
|
||||
def initialize(str, safe_level=NOT_GIVEN, legacy_trim_mode=NOT_GIVEN, legacy_eoutvar=NOT_GIVEN, trim_mode: nil, eoutvar: '_erbout')
|
||||
# Complex initializer for $SAFE deprecation at [Feature #14256]. Use keyword arguments to pass trim_mode or eoutvar.
|
||||
if safe_level != NOT_GIVEN
|
||||
warn 'Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments.', uplevel: 1
|
||||
end
|
||||
if legacy_trim_mode != NOT_GIVEN
|
||||
warn 'Passing trim_mode with the 3rd argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, trim_mode: ...) instead.', uplevel: 1
|
||||
trim_mode = legacy_trim_mode
|
||||
end
|
||||
if legacy_eoutvar != NOT_GIVEN
|
||||
warn 'Passing eoutvar with the 4th argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, eoutvar: ...) instead.', uplevel: 1
|
||||
eoutvar = legacy_eoutvar
|
||||
end
|
||||
|
||||
def initialize(str, trim_mode: nil, eoutvar: '_erbout')
|
||||
compiler = make_compiler(trim_mode)
|
||||
set_eoutvar(compiler, eoutvar)
|
||||
@src, @encoding, @frozen_string = *compiler.compile(str)
|
||||
|
||||
@ -139,17 +139,19 @@ END
|
||||
->{ ERB.new("<%= list %>").result }.should raise_error(NameError)
|
||||
end
|
||||
|
||||
describe "warning about arguments" do
|
||||
it "warns when passed safe_level and later arguments" do
|
||||
-> {
|
||||
ERB.new(@eruby_str, nil, '%')
|
||||
}.should complain(/warning: Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments./)
|
||||
end
|
||||
version_is ERB::VERSION, ""..."5.1.3" do # TODO: bump 5.1.3 to 6.0.0 once released
|
||||
describe "warning about arguments" do
|
||||
it "warns when passed safe_level and later arguments" do
|
||||
-> {
|
||||
ERB.new(@eruby_str, nil, '%')
|
||||
}.should complain(/warning: Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments./)
|
||||
end
|
||||
|
||||
it "does not warn when passed arguments as keyword argument" do
|
||||
-> {
|
||||
ERB.new(@eruby_str, trim_mode: '%')
|
||||
}.should_not complain(/warning: Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments./)
|
||||
it "does not warn when passed arguments as keyword argument" do
|
||||
-> {
|
||||
ERB.new(@eruby_str, trim_mode: '%')
|
||||
}.should_not complain(/warning: Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments./)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -24,29 +24,6 @@ class TestERB < Test::Unit::TestCase
|
||||
assert_match(/\Atest filename:1\b/, e.backtrace[0])
|
||||
end
|
||||
|
||||
# [deprecated] This will be removed later
|
||||
def test_without_filename_with_safe_level
|
||||
erb = EnvUtil.suppress_warning do
|
||||
ERB.new("<% raise ::TestERB::MyError %>", 1)
|
||||
end
|
||||
e = assert_raise(MyError) {
|
||||
erb.result
|
||||
}
|
||||
assert_match(/\A\(erb\):1\b/, e.backtrace[0])
|
||||
end
|
||||
|
||||
# [deprecated] This will be removed later
|
||||
def test_with_filename_and_safe_level
|
||||
erb = EnvUtil.suppress_warning do
|
||||
ERB.new("<% raise ::TestERB::MyError %>", 1)
|
||||
end
|
||||
erb.filename = "test filename"
|
||||
e = assert_raise(MyError) {
|
||||
erb.result
|
||||
}
|
||||
assert_match(/\Atest filename:1\b/, e.backtrace[0])
|
||||
end
|
||||
|
||||
def test_with_filename_lineno
|
||||
erb = ERB.new("<% raise ::TestERB::MyError %>")
|
||||
erb.filename = "test filename"
|
||||
@ -117,25 +94,16 @@ class TestERBCore < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
def test_core
|
||||
# [deprecated] Fix initializer later
|
||||
EnvUtil.suppress_warning do
|
||||
_test_core(nil)
|
||||
_test_core(0)
|
||||
_test_core(1)
|
||||
end
|
||||
end
|
||||
|
||||
def _test_core(safe)
|
||||
erb = @erb.new("hello")
|
||||
assert_equal("hello", erb.result)
|
||||
|
||||
erb = @erb.new("hello", safe, 0)
|
||||
erb = @erb.new("hello", trim_mode: 0)
|
||||
assert_equal("hello", erb.result)
|
||||
|
||||
erb = @erb.new("hello", safe, 1)
|
||||
erb = @erb.new("hello", trim_mode: 1)
|
||||
assert_equal("hello", erb.result)
|
||||
|
||||
erb = @erb.new("hello", safe, 2)
|
||||
erb = @erb.new("hello", trim_mode: 2)
|
||||
assert_equal("hello", erb.result)
|
||||
|
||||
src = <<EOS
|
||||
@ -163,9 +131,9 @@ EOS
|
||||
EOS
|
||||
erb = @erb.new(src)
|
||||
assert_equal(ans, erb.result)
|
||||
erb = @erb.new(src, safe, 0)
|
||||
erb = @erb.new(src, trim_mode: 0)
|
||||
assert_equal(ans, erb.result)
|
||||
erb = @erb.new(src, safe, '')
|
||||
erb = EnvUtil.suppress_warning { @erb.new(src, trim_mode: '') }
|
||||
assert_equal(ans, erb.result)
|
||||
|
||||
ans = <<EOS
|
||||
@ -176,9 +144,9 @@ EOS
|
||||
* 1% n=0
|
||||
* 2
|
||||
EOS
|
||||
erb = @erb.new(src, safe, 1)
|
||||
erb = @erb.new(src, trim_mode: 1)
|
||||
assert_equal(ans.chomp, erb.result)
|
||||
erb = @erb.new(src, safe, '>')
|
||||
erb = @erb.new(src, trim_mode: '>')
|
||||
assert_equal(ans.chomp, erb.result)
|
||||
|
||||
ans = <<EOS
|
||||
@ -192,9 +160,9 @@ EOS
|
||||
* 2
|
||||
EOS
|
||||
|
||||
erb = @erb.new(src, safe, 2)
|
||||
erb = @erb.new(src, trim_mode: 2)
|
||||
assert_equal(ans, erb.result)
|
||||
erb = @erb.new(src, safe, '<>')
|
||||
erb = @erb.new(src, trim_mode: '<>')
|
||||
assert_equal(ans, erb.result)
|
||||
|
||||
ans = <<EOS
|
||||
@ -208,7 +176,7 @@ EOS
|
||||
* 0
|
||||
|
||||
EOS
|
||||
erb = @erb.new(src, safe, '%')
|
||||
erb = @erb.new(src, trim_mode: '%')
|
||||
assert_equal(ans, erb.result)
|
||||
|
||||
ans = <<EOS
|
||||
@ -216,7 +184,7 @@ EOS
|
||||
= hello
|
||||
* 0* 0* 0
|
||||
EOS
|
||||
erb = @erb.new(src, safe, '%>')
|
||||
erb = @erb.new(src, trim_mode: '%>')
|
||||
assert_equal(ans.chomp, erb.result)
|
||||
|
||||
ans = <<EOS
|
||||
@ -226,7 +194,7 @@ EOS
|
||||
* 0
|
||||
* 0
|
||||
EOS
|
||||
erb = @erb.new(src, safe, '%<>')
|
||||
erb = @erb.new(src, trim_mode: '%<>')
|
||||
assert_equal(ans, erb.result)
|
||||
end
|
||||
|
||||
@ -254,12 +222,6 @@ EOS
|
||||
assert_equal("line\r\n" * 3, erb.result)
|
||||
end
|
||||
|
||||
def test_safe_level_warning
|
||||
assert_warning(/#{__FILE__}:#{__LINE__ + 1}/) do
|
||||
@erb.new("", 1)
|
||||
end
|
||||
end
|
||||
|
||||
def test_invalid_trim_mode
|
||||
pend if RUBY_ENGINE == 'truffleruby'
|
||||
|
||||
@ -688,27 +650,6 @@ EOS
|
||||
end
|
||||
end
|
||||
|
||||
# [deprecated] These interfaces will be removed later
|
||||
def test_deprecated_interface_warnings
|
||||
[nil, 0, 1, 2].each do |safe|
|
||||
assert_warn(/2nd argument of ERB.new is deprecated/) do
|
||||
ERB.new('', safe)
|
||||
end
|
||||
end
|
||||
|
||||
[nil, '', '%', '%<>'].each do |trim|
|
||||
assert_warn(/3rd argument of ERB.new is deprecated/) do
|
||||
ERB.new('', nil, trim)
|
||||
end
|
||||
end
|
||||
|
||||
[nil, '_erbout', '_hamlout'].each do |eoutvar|
|
||||
assert_warn(/4th argument of ERB.new is deprecated/) do
|
||||
ERB.new('', nil, nil, eoutvar)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_prohibited_marshal_dump
|
||||
erb = ERB.new("")
|
||||
assert_raise(TypeError) {Marshal.dump(erb)}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user