rubyx/test/vool/test_class_method_expression.rb
Torsten Rüger 2dcb2a9a72 Introduce singleton types
Just for future, as this gives us a way to know immediately in the type, which represent normal, and which singleton classes
Also instantiate singleton class lazily (with singleton type)
This makes the type of class single, ie unique, immediately when it is used, ie methods or variables defined.
Fixes a design mistake, where all singletonn classes shared the same type, and thus unique methods per class were impossible
(Also some misc in commit)
2019-10-01 19:42:16 +03:00

49 lines
1.3 KiB
Ruby

require_relative "helper"
module Vool
class TestClassMethodExpression < MiniTest::Test
include VoolCompile
def class_code
"class Space;def self.meth; return meth(22 + 22) ; end;end"
end
def setup
Parfait.boot!(Parfait.default_test_options)
ruby_tree = Ruby::RubyCompiler.compile( class_code )
@clazz = ruby_tree.to_vool
end
def method
@clazz.body.first
end
def test_setup
assert_equal ClassExpression , @clazz.class
assert_equal Statements , @clazz.body.class
assert_equal ClassMethodExpression , method.class
end
def test_fail
assert_raises{ method.to_parfait }
end
def test_creates_class_method
clazz = @clazz.to_parfait
m = clazz.single_class.get_instance_method(:meth)
assert m , "no method :meth"
end
def test_creates_type_method
clazz = @clazz.to_parfait
m = clazz.single_class.instance_type.get_method(:meth)
assert m , "no type method :meth"
end
def as_mom
@clazz.to_parfait
@clazz.to_mom(nil)
end
def test_mom
assert_equal :meth , as_mom.method_compilers.callable.name
end
def test_mom_frame
callable = as_mom.method_compilers.callable
assert callable.frame_type.names.last.to_s.start_with?("tmp_") , "no tmp_ variable #{callable.frame_type.names}"
end
end
end