aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-14 12:27:25 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2022-06-17 01:48:52 +0900
commitcd5cafa4a380e2459862b6e99ff0c381362ef1be (patch)
treea61479213a257113355bab53f7b1b0674b4fb664 /test
parent278fefb96294adf9d27a78f919c714a31b65ef58 (diff)
downloadruby-cd5cafa4a380e2459862b6e99ff0c381362ef1be.tar.gz
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.
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_ast.rb13
-rw-r--r--test/ruby/test_syntax.rb9
2 files changed, 22 insertions, 0 deletions
diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb
index cd96027654..5cf7a7f1b5 100644
--- a/test/ruby/test_ast.rb
+++ b/test/ruby/test_ast.rb
@@ -542,6 +542,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 b1fa3e5227..1d7b89de57 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;'}")