rubyx/test/risc/position/test_position1.rb
Torsten Ruger ad3040a846 add position_chaning to event interface
by reacting to the change _before it happens, we can move any BinaryCode out of the way

So when Instruction are inserted and code gets inserted, we don't need to set up the correct listener explicitly (which is tricky across mathods and changing chains), but instead just move anything that is in the way along
2018-06-09 08:10:41 +03:00

59 lines
1.7 KiB
Ruby

require_relative "helper"
module Risc
class TestPositionEvents < MiniTest::Test
def setup
Position.clear_positions
@instruction = DummyInstruction.new
@position = Position.new(@instruction , 0)
@listener = PositionListener.new( @instruction )
end
def test_has_register
assert @position.position_listener( @instruction )
end
def test_can_unregister
listener = PositionListener.new(self)
assert @position.position_listener(listener)
assert @position.remove_position_listener(listener)
end
def test_fires
@object = @instruction
@position.register_event(:position_changed , self)#can't use helper
@position.trigger_changed
assert_equal @position , @trigger
end
def test_no_fire_after_unregister
@object = @instruction
Position.new(self, 10)
assert @position.register_event(:position_changed , self)#can't use helper
assert @position.remove_position_listener(self)
@position.trigger(:position_changed , @position)
assert_nil @trigger
end
def test_can_trigger_inserted
@object = @instruction
@position.register_event(:position_changed , self) #can't use helper
@position.trigger_inserted
assert_equal @position , @trigger
end
def test_position_set_triggers
@object = @instruction
Position.new(self, 0)
@position.register_event(:position_changed , self)#can't use helper
@position.set(10)
assert_equal @position , @trigger
assert_equal @to , 10
end
def position_changed(pos)
@trigger = pos
end
def position_inserted(pos)
@trigger = pos
end
def position_changing(pos , to)
@trigger = pos
@to = to
end
end
end