Sha256: ae05c7a454af69e8587bf42beccdcc7b31b696ce58f0e9fd4350d3ada50772d7

Contents?: true

Size: 1.44 KB

Versions: 7

Compression:

Stored size: 1.44 KB

Contents

# encoding: utf-8

require 'spec_helper'

describe FiniteMachine, 'define' do

  context 'with block' do
    it "creates system state machine" do
      fsm = FiniteMachine.define do
        initial :green

        events {
          event :slow,  :green  => :yellow
          event :stop,  :yellow => :red
          event :ready, :red    => :yellow
          event :go,    :yellow => :green
        }
      end

      expect(fsm.current).to eql(:green)

      fsm.slow
      expect(fsm.current).to eql(:yellow)
      fsm.stop
      expect(fsm.current).to eql(:red)
      fsm.ready
      expect(fsm.current).to eql(:yellow)
      fsm.go
      expect(fsm.current).to eql(:green)
    end
  end

  context 'without block' do
    it "creates state machine" do
      called = []
      fsm = FiniteMachine.define
      fsm.initial(:green)
      fsm.event(:slow, :green => :yellow)
      fsm.event(:stop, :yellow => :red)
      fsm.event(:ready,:red    => :yellow)
      fsm.event(:go,   :yellow => :green)
      fsm.on_enter(:yellow) { |event| called << 'on_enter_yellow' }
      fsm.handle(FiniteMachine::InvalidStateError) { |exception|
        called << 'error_handler'
      }
      fsm.init
      expect(fsm.current).to eql(:green)
      fsm.slow
      expect(fsm.current).to eql(:yellow)
      fsm.ready
      expect(fsm.current).to eql(:yellow)
      expect(called).to match_array(['on_enter_yellow', 'error_handler'])
    end
  end

  xit "creates multiple machines"
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
finite_machine-0.10.0 spec/unit/define_spec.rb
finite_machine-0.9.2 spec/unit/define_spec.rb
finite_machine-0.9.1 spec/unit/define_spec.rb
finite_machine-0.9.0 spec/unit/define_spec.rb
finite_machine-0.8.1 spec/unit/define_spec.rb
finite_machine-0.8.0 spec/unit/define_spec.rb
finite_machine-0.7.1 spec/unit/define_spec.rb