1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/ruby/test_rubyvm.rb
Koichi Sasada e75bd8df51 pend some tests while using to_binary
ISeqs from ISeq#to_binary/load do not support `keep_script_lines`
now so some tests should be pending tests with
`RUBY_ISEQ_DUMP_DEBUG=to_binary`
2022-01-31 03:47:03 +09:00

73 lines
1.6 KiB
Ruby

# frozen_string_literal: false
require 'test/unit'
class TestRubyVM < Test::Unit::TestCase
def test_stat
assert_kind_of Hash, RubyVM.stat
assert_kind_of Integer, RubyVM.stat[:global_constant_state]
RubyVM.stat(stat = {})
assert_not_empty stat
assert_equal stat[:global_constant_state], RubyVM.stat(:global_constant_state)
end
def test_stat_unknown
assert_raise(ArgumentError){ RubyVM.stat(:unknown) }
assert_raise_with_message(ArgumentError, /\u{30eb 30d3 30fc}/) {RubyVM.stat(:"\u{30eb 30d3 30fc}")}
end
def parse_and_compile
script = <<~RUBY
_a = 1
def foo
_b = 2
end
1.times{
_c = 3
}
RUBY
ast = RubyVM::AbstractSyntaxTree.parse(script)
iseq = RubyVM::InstructionSequence.compile(script)
[ast, iseq]
end
def test_keep_script_lines
pend if ENV['RUBY_ISEQ_DUMP_DEBUG'] # TODO
prev_conf = RubyVM.keep_script_lines
# keep
RubyVM.keep_script_lines = true
ast, iseq = *parse_and_compile
lines = ast.script_lines
assert_equal Array, lines.class
lines = iseq.script_lines
assert_equal Array, lines.class
iseq.each_child{|child|
assert_equal lines, child.script_lines
}
assert lines.frozen?
# don't keep
RubyVM.keep_script_lines = false
ast, iseq = *parse_and_compile
lines = ast.script_lines
assert_equal nil, lines
lines = iseq.script_lines
assert_equal nil, lines
iseq.each_child{|child|
assert_equal lines, child.script_lines
}
ensure
RubyVM.keep_script_lines = prev_conf
end
end