rubyx/test/parfait/test_singleton_class.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

60 lines
1.8 KiB
Ruby

require_relative "helper"
module Parfait
class TestSingletonClass < ParfaitTest
def setup
super
@try = @space.create_class( :Try , :Object).single_class
end
def test_type_forclass
assert_equal "Class(Space)" , @space.get_type.object_class.inspect
assert_equal :Space , @space.get_type.object_class.name
end
def test_new_superclass_name
assert_equal :Object , @try.clazz.super_class_name
end
def test_new_superclass
assert_equal "Class(Try)" , @try.clazz.inspect
assert_equal "SingletonClass(Try)" , @try.inspect
end
def test_new_methods
assert_equal @try.method_names.class, @try.instance_methods.class
assert_equal @try.method_names.get_length , @try.instance_methods.get_length
end
def test_remove_nothere
assert !@try.remove_instance_method(:foo)
end
def test_resolve
assert_nil @try.resolve_method :foo
end
def test_remove_method
assert_equal false , @try.remove_instance_method( :foo)
end
def test_add_nil_method_raises
assert_raises{ @try.add_instance_method(nil)}
end
def test_add_instance_variable_changes_type
before = @try.instance_type
@try.add_instance_variable(:counter , :Integer)
assert before != @try.instance_type
end
def test_add_instance_variable_changes_type_hash
before = @try.instance_type.hash
@try.add_instance_variable(:counter , :Integer)
assert before != @try.instance_type.hash
end
def test_add_instance_variable_changes_class_type
@try.add_instance_variable(:counter , :Integer)
assert_equal @try.clazz.type , @try.instance_type
end
def test_name
assert_equal :"Try.Single" , @try.name
end
def test_type_is_single
assert_equal true , @try.instance_type.is_single?
end
end
end