UNPKG

@wiz-code/async-fsm

Version:

Finite StateMachine JavaScript Library

273 lines (221 loc) 8.56 kB
var assert = require('assert'); var FSM = require('../../src'); FSM.globalize(); FSM.logger.setLogLevel('error'); describe('Region', function () { describe('#addState()', function () { var region, state, result; beforeEach(function (done) { region = new Region('region'); state = new State('state'); done(); }); it('should throw error when the parameter is Machine instance', function () { assert.throws(function () { region.addState(new Machine()); }); }); it('should throw error when the parameter is not BaseState instance that except Machine', function () { assert.throws(function () { region.addState(new Transition()); }); }); it('should return state instance', function () { result = region.addState(state); assert.equal(result, state); }); it('children.states prop of region should have 3 elements', function () { region.addState(state); assert.equal(region.children.states.length, 3); }); it('container prop of state should be region instance', function () { region.addState(state); assert.equal(state.container, region); }); }); describe('#removeState()', function () { var region, state, result; beforeEach(function (done) { region = new Region('region'); state = new State('state'); region.addState(state); done(); }); it('should return state instance', function () { result = region.removeState(state); assert.equal(result, state); }); it('children.states prop of region should have 2 elements', function () { region.removeState(state); assert.equal(region.children.states.length, 2); }); it('container prop of state should be null', function () { region.removeState(state); assert.equal(state.container, null); }); }); describe('#addTransition()', function () { var region, target, transit, source, result; beforeEach(function (done) { region = new Region('region'); source = new State('source'); target = new State('target'); transit = new Transition('transit', source, target); region.addState(source, target); done(); }); it('should throw error when the parameter is not Transition instance', function () { assert.throws(function () { region.addTransition(new State()); }); }); it('should throw error when the source or target state doesn\'t exist in the container region', function () { assert.throws(function () { region.addTransition(new Transition('transit', new State(), new State())); }); }); it('should return transition instance', function () { result = region.addTransition(transit); assert.equal(result, transit); }); it('children.transitions prop of region should have 1 element', function () { region.addTransition(transit); assert.equal(region.children.transitions.length, 1); }); it('container prop of transition should be region instance', function () { region.addTransition(transit); assert.equal(transit.container, region); }); }); describe('#removeTransition()', function () { var region, target, transit, source, result; beforeEach(function (done) { region = new Region('region'); source = new State('source'); target = new State('target'); transit = new Transition('transit', source, target); region.addState(source, target); region.addTransition(transit); done(); }); it('should return transition instance', function () { result = region.removeTransition(transit); assert.equal(result, transit); }); it('children.transitions prop of region should have no element', function () { region.removeTransition(transit); assert.equal(region.children.transitions.length, 0); }); it('container prop of transition should be null', function () { region.removeTransition(transit); assert.equal(transit.container, null); }); }); describe('#hasHistory()', function () { var region, history, deepHistory, result; beforeEach(function (done) { region = new Region('region'); history = new HistoryPseudoState('history'); deepHistory = new HistoryPseudoState('deep-history', true); done(); }); it('should return true when the region have the history state', function () { region.addState(history); result = region.hasHistory(); assert.equal(result, true); }); it('should return true when the region have the history state that is deep', function () { region.addState(deepHistory); result = region.hasHistory(true); assert.equal(result, true); }); }); describe('#getIndex()', function () { var region1, region2, state, result; beforeEach(function (done) { region1 = new Region('region1'); region2 = new Region('region2'); state = new State('state'); state.appendRegion(region1); state.appendRegion(region2); done(); }); it('should return 1', function () { result = region2.getIndex(); assert.equal(result, 1); }); it('should return -1 when the region doesn\'t have no parent', function () { state.removeRegion(region2); result = region2.getIndex(); assert.equal(result, -1); }); }); describe('#getStateById()', function () { var state, region, stateId, result; beforeEach(function (done) { region = new Region('region'); state = new State('state'); stateId = state.getId(); region.addState(state); done(); }); it('should return state', function () { result = region.getStateById(stateId); assert.equal(result, state); }); }); describe('#getStateByName()', function () { var state, region, result; beforeEach(function (done) { region = new Region('region'); state = new State('state'); region.addState(state); done(); }); it('should return state', function () { result = region.getStateByName('state'); assert.equal(result, state); }); }); describe('#getTransitionById()', function () { var transit, region, transitId, result; beforeEach(function (done) { region = new Region('region'); transit = new Transition('transit'); transitId = transit.getId(); region.addTransition(transit); done(); }); it('should return transit', function () { result = region.getTransitionById(transitId); assert.equal(result, transit); }); }); describe('#getTransitionByName()', function () { var transit, region, result; beforeEach(function (done) { region = new Region('region'); transit = new Transition('transit'); region.addTransition(transit); done(); }); it('should return transit', function () { result = region.getTransitionByName('transit'); assert.equal(result, transit); }); }); describe('#findActiveState()', function () { var state, region, result; beforeEach(function (done) { region = new Region('region'); state = new State('state'); region.addState(state); done(); }); it('should return state', function () { state._activate(); result = region.findActiveState(); assert.equal(result, state); }); }); });