Skip to content

Commit

Permalink
fix issue jakesgordon#74 - new transitions() method is broken
Browse files Browse the repository at this point in the history
  • Loading branch information
jakesgordon committed Jan 21, 2015
1 parent fdfbcdd commit f247a9b
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 3 deletions.
4 changes: 2 additions & 2 deletions state-machine.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@
var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified
map[e.name] = map[e.name] || {};
for (var n = 0 ; n < from.length ; n++) {
transitions[e.from] = transitions[e.from] || [];
transitions[e.from].push(e.name);
transitions[from[n]] = transitions[from[n]] || [];
transitions[from[n]].push(e.name);

map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified
}
Expand Down
2 changes: 1 addition & 1 deletion state-machine.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions test/test_basics.js
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,40 @@ test("transitions", function() {

//-----------------------------------------------------------------------------

test("transitions with multiple from states", function() {

var fsm = StateMachine.create({
events: [
{ name: 'start', from: 'none', to: 'green' },
{ name: 'warn', from: ['green', 'red'], to: 'yellow' },
{ name: 'panic', from: ['green', 'yellow'], to: 'red' },
{ name: 'clear', from: ['red', 'yellow'], to: 'green' }
]
});

equal(fsm.current, 'none', 'current state should be none');
deepEqual(fsm.transitions(), ['start'], 'current transition(s) should be start');

fsm.start();
equal(fsm.current, 'green', 'current state should be green');
deepEqual(fsm.transitions(), ['warn', 'panic'], 'current transition(s) should be warn and panic');

fsm.warn();
equal(fsm.current, 'yellow', 'current state should be yellow');
deepEqual(fsm.transitions(), ['panic', 'clear'], 'current transition(s) should be panic and clear');

fsm.panic();
equal(fsm.current, 'red', 'current state should be red');
deepEqual(fsm.transitions(), ['warn', 'clear'], 'current transition(s) should be warn and clear');

fsm.clear();
equal(fsm.current, 'green', 'current state should be green');
deepEqual(fsm.transitions(), ['warn', 'panic'], 'current transition(s) should be warn and panic');

});

//-----------------------------------------------------------------------------

test("isFinished", function() {

var fsm = StateMachine.create({
Expand Down

0 comments on commit f247a9b

Please sign in to comment.