27a142f2a3
can now go to mom level and add test harness still looks overly complicated, but works first block tests at mom level
92 lines
2.3 KiB
Ruby
92 lines
2.3 KiB
Ruby
require_relative "../helper"
|
|
|
|
module VoolBlocks
|
|
class TestAssignMom < MiniTest::Test
|
|
include MomCompile
|
|
|
|
def setup
|
|
Parfait.boot!
|
|
Risc::Builtin.boot_functions
|
|
@ins = compile_first_block( "local = 5")
|
|
end
|
|
|
|
def test_block_compiles
|
|
assert_equal Mom::SlotLoad , @ins.class , @ins
|
|
end
|
|
def pest_slot_is_set
|
|
assert @ins.left
|
|
end
|
|
def pest_slot_starts_at_message
|
|
assert_equal :message , @ins.left.known_object
|
|
end
|
|
def pest_slot_gets_self
|
|
assert_equal :frame , @ins.left.slots[0]
|
|
end
|
|
def pest_slot_assigns_to_local
|
|
assert_equal :main_local , @ins.left.slots[-1]
|
|
end
|
|
def pest_slot_assigns_something
|
|
assert @ins.right
|
|
end
|
|
def pest_slot_assigns_int
|
|
assert_equal Mom::IntegerConstant , @ins.right.known_object.class
|
|
end
|
|
end
|
|
|
|
#otherwise as above, but assigning instance, so should get a SlotLoad
|
|
class TestAssignMomInstanceToLocal < MiniTest::Test
|
|
include MomCompile
|
|
def setup
|
|
Parfait.boot!
|
|
@ins = compile_first_method( "@a = 5 ; local = @a")
|
|
end
|
|
def pest_class_compiles
|
|
assert_equal Mom::SlotLoad , @ins.next.class , @ins
|
|
end
|
|
end
|
|
|
|
#compiling to an argument should result in different second parameter in the slot array
|
|
class TestAssignToArg < MiniTest::Test
|
|
include MomCompile
|
|
|
|
def setup
|
|
Parfait.boot!
|
|
@ins = compile_first_method( "arg = 5")
|
|
end
|
|
|
|
def pest_class_compiles
|
|
assert_equal Mom::SlotLoad , @ins.class , @ins
|
|
end
|
|
def pest_slot_is_set
|
|
assert @ins.left
|
|
end
|
|
def pest_slot_starts_at_message
|
|
assert_equal :message , @ins.left.known_object
|
|
end
|
|
def pest_slot_gets_self
|
|
assert_equal :arguments , @ins.left.slots[0]
|
|
end
|
|
def pest_slot_assigns_to_local
|
|
assert_equal :arg , @ins.left.slots[-1]
|
|
end
|
|
end
|
|
|
|
class TestAssignMomToInstance < MiniTest::Test
|
|
include MomCompile
|
|
def setup
|
|
Parfait.boot!
|
|
end
|
|
def pest_assigns_const
|
|
@ins = compile_first_method( "@a = 5")
|
|
assert_equal Mom::SlotLoad , @ins.class , @ins
|
|
assert_equal Mom::IntegerConstant , @ins.right.known_object.class , @ins
|
|
end
|
|
def pest_assigns_move
|
|
@ins = compile_first_method( "@a = arg")
|
|
assert_equal Mom::SlotLoad , @ins.class , @ins
|
|
assert_equal Mom::SlotDefinition , @ins.right.class , @ins
|
|
end
|
|
end
|
|
|
|
end
|