summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-01-17 12:37:46 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2022-01-17 12:39:17 -0800
commitc0d18a1aa2be26d416f4c5d1809533143374b863 (patch)
tree7a9562e18f4ebfa97261b8f539a1d7f48bd485df /test
parentf3c77bd480834f2835fe6fef5c0475336248dbde (diff)
[ruby/erb] Revert "Remove safe_level and further positional arguments (https://github.com/ruby/erb/pull/7)"
This reverts commit https://github.com/ruby/erb/commit/5133efa06f0603ae79292f3b2b942957bc8a442e. While we already handled this deprecation in many libraries, we noticed that some (e.g. sprockets) relied on the format of `ERB.version` and https://github.com/ruby/erb/commit/2b4182eb108b9e42fa30bcfa41931896132f88b8 broke such handling. Given that the `ERB.version` change was released at 3.1 and it's obviously new, I'll skip this removal in 3.2 and postpone this to a future version.
Diffstat (limited to 'test')
-rw-r--r--test/erb/test_erb.rb77
-rw-r--r--test/erb/test_erb_command.rb12
2 files changed, 77 insertions, 12 deletions
diff --git a/test/erb/test_erb.rb b/test/erb/test_erb.rb
index 88097af033..fb5e9b611e 100644
--- a/test/erb/test_erb.rb
+++ b/test/erb/test_erb.rb
@@ -24,6 +24,29 @@ 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"
@@ -75,16 +98,25 @@ 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", trim_mode: 0)
+ erb = @erb.new("hello", safe, 0)
assert_equal("hello", erb.result)
- erb = @erb.new("hello", trim_mode: 1)
+ erb = @erb.new("hello", safe, 1)
assert_equal("hello", erb.result)
- erb = @erb.new("hello", trim_mode: 2)
+ erb = @erb.new("hello", safe, 2)
assert_equal("hello", erb.result)
src = <<EOS
@@ -112,9 +144,9 @@ EOS
EOS
erb = @erb.new(src)
assert_equal(ans, erb.result)
- erb = @erb.new(src, trim_mode: 0)
+ erb = @erb.new(src, safe, 0)
assert_equal(ans, erb.result)
- erb = EnvUtil.suppress_warning { @erb.new(src, trim_mode: '') }
+ erb = @erb.new(src, safe, '')
assert_equal(ans, erb.result)
ans = <<EOS
@@ -125,9 +157,9 @@ EOS
* 1% n=0
* 2
EOS
- erb = @erb.new(src, trim_mode: 1)
+ erb = @erb.new(src, safe, 1)
assert_equal(ans.chomp, erb.result)
- erb = @erb.new(src, trim_mode: '>')
+ erb = @erb.new(src, safe, '>')
assert_equal(ans.chomp, erb.result)
ans = <<EOS
@@ -141,9 +173,9 @@ EOS
* 2
EOS
- erb = @erb.new(src, trim_mode: 2)
+ erb = @erb.new(src, safe, 2)
assert_equal(ans, erb.result)
- erb = @erb.new(src, trim_mode: '<>')
+ erb = @erb.new(src, safe, '<>')
assert_equal(ans, erb.result)
ans = <<EOS
@@ -157,7 +189,7 @@ EOS
* 0
EOS
- erb = @erb.new(src, trim_mode: '%')
+ erb = @erb.new(src, safe, '%')
assert_equal(ans, erb.result)
ans = <<EOS
@@ -165,7 +197,7 @@ EOS
= hello
* 0* 0* 0
EOS
- erb = @erb.new(src, trim_mode: '%>')
+ erb = @erb.new(src, safe, '%>')
assert_equal(ans.chomp, erb.result)
ans = <<EOS
@@ -175,7 +207,7 @@ EOS
* 0
* 0
EOS
- erb = @erb.new(src, trim_mode: '%<>')
+ erb = @erb.new(src, safe, '%<>')
assert_equal(ans, erb.result)
end
@@ -629,6 +661,27 @@ 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)}
diff --git a/test/erb/test_erb_command.rb b/test/erb/test_erb_command.rb
index ef170744c2..0baa59ddd5 100644
--- a/test/erb/test_erb_command.rb
+++ b/test/erb/test_erb_command.rb
@@ -15,4 +15,16 @@ class TestErbCommand < Test::Unit::TestCase
File.expand_path("../../libexec/erb", __dir__)],
"<%=''.encoding.to_s%>", ["UTF-8"])
end
+
+ # These interfaces will be removed at Ruby 2.7.
+ def test_deprecated_option
+ warnings = [
+ "warning: -S option of erb command is deprecated. Please do not use this.",
+ /\n.+\/libexec\/erb:\d+: warning: Passing safe_level with the 2nd argument of ERB\.new is deprecated\. Do not use it, and specify other arguments as keyword arguments\.\n/,
+ ]
+ assert_in_out_err(["-I#{File.expand_path('../../lib', __dir__)}", "-w",
+ File.expand_path("../../libexec/erb", __dir__),
+ "-S", "0"],
+ "hoge", ["hoge"], warnings)
+ end
end