diff options
author | nagachika <nagachika@ruby-lang.org> | 2023-03-25 10:33:20 +0900 |
---|---|---|
committer | nagachika <nagachika@ruby-lang.org> | 2023-03-25 10:33:20 +0900 |
commit | 8c99882dad0b6fedbd656889829a3780366bd8b6 (patch) | |
tree | ba97c1f87dbd18df1fa04ce65a382f9ed07b72d7 /test | |
parent | 477ab3f6c7f14c79e13f694463aa06a59206dda1 (diff) |
merge revision(s) cd5cafa4a380e2459862b6e99ff0c381362ef1be: [Backport #18827]
Respect the encoding of the source [Bug #18827]
Do not override the input string encoding at the time of preparation,
the source encoding is not determined from the input yet.
---
parse.y | 26 ++++++++++++++++----------
test/ruby/test_ast.rb | 13 +++++++++++++
test/ruby/test_syntax.rb | 9 +++++++++
3 files changed, 38 insertions(+), 10 deletions(-)
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_ast.rb | 13 | ||||
-rw-r--r-- | test/ruby/test_syntax.rb | 9 |
2 files changed, 22 insertions, 0 deletions
diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index a4edfd3cbe..cd7299f200 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -538,6 +538,19 @@ dummy assert_equal("def test_keep_script_lines_for_of\n", node_method.source.lines.first) end + def test_encoding_with_keep_script_lines + enc = Encoding::EUC_JP + code = "__ENCODING__".encode(enc) + + assert_equal(enc, eval(code)) + + node = RubyVM::AbstractSyntaxTree.parse(code, keep_script_lines: false) + assert_equal(enc, node.children[2].children[0]) + + node = RubyVM::AbstractSyntaxTree.parse(code, keep_script_lines: true) + assert_equal(enc, node.children[2].children[0]) + end + def test_e_option assert_in_out_err(["-e", "def foo; end; pp RubyVM::AbstractSyntaxTree.of(method(:foo)).type"], "", [":SCOPE"], []) diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index 5dc9bbdaeb..53036cab3b 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -66,6 +66,15 @@ class TestSyntax < Test::Unit::TestCase f&.close! end + def test_script_lines_encoding + require 'tmpdir' + Dir.mktmpdir do |dir| + File.write(File.join(dir, "script_lines.rb"), "SCRIPT_LINES__ = {}\n") + assert_in_out_err(%w"-r./script_lines -w -Ke", "puts __ENCODING__.name", + %w"EUC-JP", /-K is specified/, chdir: dir) + end + end + def test_anonymous_block_forwarding assert_syntax_error("def b; c(&); end", /no anonymous block parameter/) assert_separately([], "#{<<-"begin;"}\n#{<<-'end;'}") |