1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
# 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
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
|