Skip to content

Commit b891170

Browse files
committed
added qunit test to verify correct callbacks on same-state transtion (before/after event ARE fired, enter/leave state ARE NOT fired)
1 parent 9a67a16 commit b891170

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

test/test_basics.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,56 @@ test("callbacks are ordered correctly", function() {
224224

225225
//-----------------------------------------------------------------------------
226226

227+
test("callbacks are ordered correctly - for same state transition", function() {
228+
229+
var called = [];
230+
231+
var fsm = StateMachine.create({
232+
initial: 'waiting',
233+
events: [
234+
{ name: 'data', from: ['waiting', 'receipt'], to: 'receipt' },
235+
{ name: 'nothing', from: ['waiting', 'receipt'], to: 'waiting' },
236+
{ name: 'error', from: ['waiting', 'receipt'], to: 'error' } // bad practice to have event name same as state name - but I'll let it slide just this once
237+
],
238+
callbacks: {
239+
onchangestate: function(event,from,to) { called.push('onchange from ' + from + ' to ' + to); },
240+
241+
onenterwaiting: function() { called.push('onenterwaiting'); },
242+
onenterreceipt: function() { called.push('onenterreceipt'); },
243+
onentererror: function() { called.push('onentererror'); },
244+
onleavewaiting: function() { called.push('onleavewaiting'); },
245+
onleavereceipt: function() { called.push('onleavereceipt'); },
246+
onleaveerror: function() { called.push('onleaveerror'); },
247+
248+
onbeforedata: function() { called.push('onbeforedata'); },
249+
onbeforenothing: function() { called.push('onbeforenothing'); },
250+
onbeforeerror: function() { called.push('onbeforeerror'); },
251+
onafterdata: function() { called.push('onafterdata'); },
252+
onafternothing: function() { called.push('onafternothing'); },
253+
onaftereerror: function() { called.push('onaftererror'); },
254+
}
255+
});
256+
257+
called = [];
258+
fsm.data();
259+
deepEqual(called, ['onbeforedata', 'onleavewaiting', 'onenterreceipt', 'onchange from waiting to receipt', 'onafterdata']);
260+
261+
called = [];
262+
fsm.data(); // same-state transition
263+
deepEqual(called, ['onbeforedata', 'onafterdata']); // so now enter/leave/change state callbacks are fired
264+
265+
called = [];
266+
fsm.data(); // same-state transition
267+
deepEqual(called, ['onbeforedata', 'onafterdata']); // so now enter/leave/change state callbacks are fired
268+
269+
called = [];
270+
fsm.nothing();
271+
deepEqual(called, ['onbeforenothing', 'onleavereceipt', 'onenterwaiting', 'onchange from receipt to waiting', 'onafternothing']);
272+
273+
});
274+
275+
//-----------------------------------------------------------------------------
276+
227277
test("callback arguments are correct", function() {
228278

229279
var expected = { event: 'startup', from: 'none', to: 'green' }; // first expected callback

0 commit comments

Comments
 (0)