spec/unit/initial_spec.rb in finite_machine-0.11.3 vs spec/unit/initial_spec.rb in finite_machine-0.12.0

- old
+ new

@@ -1,9 +1,7 @@ -# encoding: utf-8 +# frozen_string_literal: true -require 'spec_helper' - RSpec.describe FiniteMachine, 'initial' do before(:each) { stub_const("DummyLogger", Class.new do attr_accessor :level @@ -13,208 +11,178 @@ end end) } it "defaults initial state to :none" do - fsm = FiniteMachine.define do - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + fsm = FiniteMachine.new do + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eql(:none) end it "requires initial state transition from :none" do - fsm = FiniteMachine.define do - events { - event :init, :none => :green - event :slow, :green => :yellow - event :stop, :yellow => :red - } + fsm = FiniteMachine.new do + event :init, :none => :green + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eql(:none) fsm.init expect(fsm.current).to eql(:green) end it "allows to specify inital state" do called = [] - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } - callbacks { - on_exit :none do |event| called << 'on_exit_none' end - on_enter :green do |event| called << 'on_enter_green' end - } + event :slow, :green => :yellow + event :stop, :yellow => :red + + on_exit :none do |event| called << 'on_exit_none' end + on_enter :green do |event| called << 'on_enter_green' end end expect(fsm.current).to eql(:green) expect(called).to be_empty end it "allows to specify initial state through parameter" do - fsm = FiniteMachine.define initial: :green do - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + fsm = FiniteMachine.new initial: :green do + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eql(:green) end it "allows to specify deferred inital state" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, defer: true - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eql(:none) fsm.init expect(fsm.current).to eql(:green) end it "raises error when specyfying initial without state name" do expect { - FiniteMachine.define do + FiniteMachine.new do initial defer: true - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + event :slow, :green => :yellow + event :stop, :yellow => :red end }.to raise_error(FiniteMachine::MissingInitialStateError) end it "allows to specify inital start event" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, event: :start - events { - event :slow, :green => :none - event :stop, :yellow => :red - } + event :slow, :green => :none + event :stop, :yellow => :red end expect(fsm.current).to eql(:green) fsm.slow expect(fsm.current).to eql(:none) fsm.start expect(fsm.current).to eql(:green) end it "allows to specify deferred inital start event" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, event: :start, defer: true - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eql(:none) fsm.start expect(fsm.current).to eql(:green) end it "evaluates initial state" do logger = DummyLogger.new - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial logger.level - events { - event :slow, :green => :none - event :stop, :yellow => :red - } + event :slow, :green => :none + event :stop, :yellow => :red end expect(fsm.current).to eql(:pending) end it "doesn't care about state type" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial 1 - events { - event :a, 1 => 2 - event :b, 2 => 3 - } + + event :a, 1 => 2 + event :b, 2 => 3 end expect(fsm.current).to eql(1) fsm.a expect(fsm.current).to eql(2) fsm.b expect(fsm.current).to eql(3) end it "allows to retrieve initial state" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eq(:green) expect(fsm.initial_state).to eq(:green) fsm.slow expect(fsm.current).to eq(:yellow) expect(fsm.initial_state).to eq(:green) end it "allows to retrieve initial state for deferred" do - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, defer: true - events { - event :slow, :green => :yellow - event :stop, :yellow => :red - } + event :slow, :green => :yellow + event :stop, :yellow => :red end expect(fsm.current).to eq(:none) expect(fsm.initial_state).to eq(:none) fsm.init expect(fsm.current).to eq(:green) expect(fsm.initial_state).to eq(:green) end it "allows to trigger callbacks on initial with :silent option" do called = [] - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, silent: false - events { - event :slow, :green => :yellow - } - callbacks { - on_enter :green do |event| called << 'on_enter_green' end - } + event :slow, :green => :yellow + + on_enter :green do |event| called << 'on_enter_green' end end expect(fsm.current).to eq(:green) expect(called).to eq(['on_enter_green']) end it "allows to trigger callbacks on deferred initial state" do called = [] - fsm = FiniteMachine.define do + fsm = FiniteMachine.new do initial :green, silent: false, defer: true - events { - event :slow, :green => :yellow - } - callbacks { - on_enter :green do |event| called << 'on_enter_green' end - } + event :slow, :green => :yellow + + on_enter :green do |event| called << 'on_enter_green' end end expect(fsm.current).to eq(:none) fsm.init expect(called).to eq(['on_enter_green']) end