require "test/unit" require 'fsa01.rb' class Test_Simple_FSA < Test::Unit::TestCase attr_accessor :flicked_on attr_accessor :enter_on_state attr_accessor :leave_on_state def setup() @flicked_on = 0 @enter_on_state = 0 @leave_on_state = 0 ######################################################################### @fsa = FSA.new(:context => self) do state :off do event :flick => :on do |context| context.flicked_on += 1 end end state :on do before_event do |content| # check that before_event works puts 'just turned on' # content.enter_on_state += 1 # end # event :flick => :off, :poke => :off after_event do |content| # check that after_event works puts 'about to turn off' # content.leave_on_state += 1 # end # end end ######################################################################### end def test_should_flick_on_and_off() visitor = @fsa.get_visitor assert_equal( :off, visitor.current_state.state_name) visitor.receive :flick assert_equal( :on, visitor.current_state.state_name ) visitor.receive :flick assert_equal( :off, visitor.current_state.state_name ) visitor.receive :flick assert_equal( :on, visitor.current_state.state_name ) visitor.receive :poke assert_equal( :off, visitor.current_state.state_name ) visitor.receive :flick assert_equal( :on, visitor.current_state.state_name ) assert_equal( 3, @flicked_on ) assert_equal( 3, @enter_on_state ) assert_equal( 2, @leave_on_state ) end end