rubyx/test/parfait/test_space.rb
Torsten Ruger 33ffcf1d88 move resolve_method code from word to mom
rather make resolve an instruction.
Since it was coded in risc anyway, we not only save the setup and call
But also makes the mom instruction flow clearer
The method really came from not wanting to code it in risc, but with
the Builder, that is now surprisingly painless
2018-04-08 18:55:17 +03:00

163 lines
4.1 KiB
Ruby

require_relative "../helper"
class TestSpace < MiniTest::Test
def setup
@machine = Risc.machine.boot
@space = Parfait.object_space
end
def classes
[:Word,:List,:Message,:NamedList,:Type,:Object,:Class,:Dictionary,:TypedMethod , :Integer]
end
def test_booted
assert_equal true , @machine.booted
end
def test_space_length
assert_equal 8 , @space.get_type.instance_length , @space.get_type.inspect
end
def test_singletons
assert @space.true_object , "No truth"
assert @space.false_object , "No lies"
assert @space.nil_object , "No nothing"
end
def test_methods_booted
word = @space.get_class_by_name(:Word).instance_type
assert_equal 3 , word.method_names.get_length
assert word.get_method(:putstring) , "no putstring"
end
def test_global_space
assert_equal Parfait::Space , Parfait.object_space.class
end
def test_integer
int = Parfait.object_space.get_class_by_name :Integer
assert_equal 6, int.instance_type.method_names.get_length
end
def test_classes_class
classes.each do |name|
assert_equal :Class , @space.classes[name].get_class.name
assert_equal Parfait::Class , @space.classes[name].class
end
end
def test_types
assert @space.instance_variable_ged("@types").is_a? Parfait::Dictionary
end
def test_types_each
@space.each_type do |type|
assert type.is_a?(Parfait::Type)
end
end
def test_types_hashes
types = @space.instance_variable_ged("@types")
types.each do |has , type|
assert has.is_a?(Fixnum) , has.inspect
end
end
def test_classes_types_in_space_types
@space.classes do |name , clazz|
assert_equal clazz.instance_type , @space.get_type_for(clazz.instance_type.hash) , clazz.name
end
end
def test_word_class
word = @space.classes[:Word]
assert word.instance_type
t_word = @space.get_type_for(word.instance_type.hash)
assert_equal word.instance_type.hash , t_word.hash
assert_equal word.instance_type.object_id , t_word.object_id
end
def test_classes_type
classes.each do |name|
assert_equal Parfait::Type , @space.classes[name].get_type.class
end
end
def test_classes_name
classes.each do |name|
assert_equal name , @space.classes[name].name
end
end
def test_method_name
classes.each do |name|
cl = @space.classes[name]
cl.method_names.each do |mname|
method = cl.get_instance_method(mname)
assert_equal mname , method.name
assert_equal name , method.for_class.name
end
end
end
def test_messages
mess = @space.first_message
all = []
while mess
all << mess
assert mess.frame
mess = mess.next_message
end
assert_equal all.length , all.uniq.length
# there is a 5.times in space, but one Message gets created before
assert_equal 50 + 1 , all.length
end
def test_message_vars
mess = @space.first_message
all = mess.get_instance_variables
assert all
assert all.include?(:next_message)
end
def test_create_class
assert @space.create_class( :NewClass )
end
def test_created_class_is_stored
@space.create_class( :NewerClass )
assert @space.get_class_by_name(:NewerClass)
end
def test_class_types_are_stored
@space.classes.each do |name,clazz|
assert @space.get_type_for(clazz.instance_type.hash)
end
end
def test_class_types_are_identical
@space.classes.each do |name , clazz|
cl_type = @space.get_type_for(clazz.instance_type.hash)
assert_equal cl_type.object_id , clazz.instance_type.object_id
end
end
def test_remove_methods
@space.each_type do | type |
type.method_names.each do |method|
type.remove_method(method)
end
end
assert_equal 0 , @space.collect_methods.length
end
def test_no_methods_in_types
test_remove_methods
@space.each_type do |type|
assert_equal 0 , type.methods_length , "name #{type.name}"
end
end
def test_no_methods_in_classes
test_remove_methods
@space.classes.each do |name , cl|
assert_equal 0 , cl.instance_type.methods_length , "name #{cl.name}"
end
end
end