ff8b95f21a
block_compiler puts in the extra, that we get out when resolving the type Thus block args work, though only by assuming direct call
54 lines
1.5 KiB
Ruby
54 lines
1.5 KiB
Ruby
|
|
require_relative "helper"
|
|
|
|
module Vool
|
|
class TestBlockStatement < MiniTest::Test
|
|
include MomCompile
|
|
|
|
def setup
|
|
Parfait.boot!
|
|
@ret = compile_mom( as_test_main("self.main {|elem| elem = 5 } "))
|
|
end
|
|
def test_is_compiler
|
|
assert_equal Mom::MomCompiler , @ret.class
|
|
end
|
|
def test_has_method
|
|
assert_equal Parfait::CallableMethod , @ret.method_compilers.first.get_method.class
|
|
end
|
|
def test_method_has_block
|
|
assert @ret.method_compilers.first.get_method.blocks , "No block created"
|
|
end
|
|
end
|
|
class TestBlockCreated < MiniTest::Test
|
|
include MomCompile
|
|
def setup
|
|
Parfait.boot!
|
|
@ret = compile_mom( as_test_main("self.main {|elem| local = 5 } "))
|
|
@block = @ret.method_compilers.first.get_method.blocks
|
|
end
|
|
def test_block_arg_type
|
|
assert_equal Parfait::Type, @block.arguments_type.class
|
|
end
|
|
def test_block_arg_type_name
|
|
assert_equal 1, @block.arguments_type.variable_index(:elem)
|
|
end
|
|
def test_block_local_type
|
|
assert_equal Parfait::Type, @block.frame_type.class
|
|
end
|
|
def test_block_frame_type_name
|
|
assert_equal 1, @block.frame_type.variable_index(:local)
|
|
end
|
|
end
|
|
class TestBlockMethod < MiniTest::Test
|
|
include MomCompile
|
|
def setup
|
|
Parfait.boot!
|
|
@ret = compile_mom( as_test_main("arg.each {|elem| arg = 5 } "))
|
|
@block = @ret.method_compilers.first.get_method.blocks
|
|
end
|
|
def test_block_arg_type
|
|
assert_equal Parfait::Type, @block.arguments_type.class
|
|
end
|
|
end
|
|
end
|