Skip to content

Commit f247a9b

Browse files
committed
fix issue jakesgordon#74 - new transitions() method is broken
1 parent fdfbcdd commit f247a9b

3 files changed

Lines changed: 37 additions & 3 deletions

File tree

state-machine.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
var from = (e.from instanceof Array) ? e.from : (e.from ? [e.from] : [StateMachine.WILDCARD]); // allow 'wildcard' transition if 'from' is not specified
5050
map[e.name] = map[e.name] || {};
5151
for (var n = 0 ; n < from.length ; n++) {
52-
transitions[e.from] = transitions[e.from] || [];
53-
transitions[e.from].push(e.name);
52+
transitions[from[n]] = transitions[from[n]] || [];
53+
transitions[from[n]].push(e.name);
5454

5555
map[e.name][from[n]] = e.to || from[n]; // allow no-op transition if 'to' is not specified
5656
}

state-machine.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test_basics.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,40 @@ test("transitions", function() {
144144

145145
//-----------------------------------------------------------------------------
146146

147+
test("transitions with multiple from states", function() {
148+
149+
var fsm = StateMachine.create({
150+
events: [
151+
{ name: 'start', from: 'none', to: 'green' },
152+
{ name: 'warn', from: ['green', 'red'], to: 'yellow' },
153+
{ name: 'panic', from: ['green', 'yellow'], to: 'red' },
154+
{ name: 'clear', from: ['red', 'yellow'], to: 'green' }
155+
]
156+
});
157+
158+
equal(fsm.current, 'none', 'current state should be none');
159+
deepEqual(fsm.transitions(), ['start'], 'current transition(s) should be start');
160+
161+
fsm.start();
162+
equal(fsm.current, 'green', 'current state should be green');
163+
deepEqual(fsm.transitions(), ['warn', 'panic'], 'current transition(s) should be warn and panic');
164+
165+
fsm.warn();
166+
equal(fsm.current, 'yellow', 'current state should be yellow');
167+
deepEqual(fsm.transitions(), ['panic', 'clear'], 'current transition(s) should be panic and clear');
168+
169+
fsm.panic();
170+
equal(fsm.current, 'red', 'current state should be red');
171+
deepEqual(fsm.transitions(), ['warn', 'clear'], 'current transition(s) should be warn and clear');
172+
173+
fsm.clear();
174+
equal(fsm.current, 'green', 'current state should be green');
175+
deepEqual(fsm.transitions(), ['warn', 'panic'], 'current transition(s) should be warn and panic');
176+
177+
});
178+
179+
//-----------------------------------------------------------------------------
180+
147181
test("isFinished", function() {
148182

149183
var fsm = StateMachine.create({

0 commit comments

Comments
 (0)