require "test/unit" require 'fsa00.rb' class Test_Simple_FSA < Test::Unit::TestCase attr_accessor :flicked_on def setup() @flicked_on = 0 ######################################################## @fsa = FSA.new(:context => self) do state :off do event :flick => :on do |context| # check that code is executed on a transition context.flicked_on += 1 # and that we can get at the context puts "got 'on' event #{context.flicked_on}" end end state :on do event :flick => :off, :poke => :off # check that we can have multiple events using one def 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 ) end end