@@ -224,4 +224,55 @@ test("hooks are called when appropriate", function() {
224224
225225//-----------------------------------------------------------------------------
226226
227+ test ( "arguments are passed correctly to all hooks" , function ( ) {
228+
229+ var fsm = StateMachine . create ( {
230+ initial : 'green' ,
231+ events : [
232+ { name : 'warn' , from : 'green' , to : 'yellow' } ,
233+ { name : 'panic' , from : 'yellow' , to : 'red' } ,
234+ { name : 'calm' , from : 'red' , to : 'yellow' } ,
235+ { name : 'clear' , from : 'yellow' , to : 'green' } ,
236+ ] } ) ;
237+
238+ var called = [ ] ;
239+
240+ // generic state hook
241+ fsm . onchangestate = function ( from , to , a , b , c ) { called . push ( 'onchange from ' + from + ' to ' + to + ' ' + ( a + b + c ) ) ; } ;
242+
243+ // state hooks
244+ fsm . onentergreen = function ( a , b , c ) { called . push ( 'onentergreen ' + ( a + b + c ) ) ; } ;
245+ fsm . onleavegreen = function ( a , b , c ) { called . push ( 'onleavegreen ' + ( a + b + c ) ) ; } ;
246+ fsm . onenteryellow = function ( a , b , c ) { called . push ( 'onenteryellow ' + ( a + b + c ) ) ; } ;
247+ fsm . onleaveyellow = function ( a , b , c ) { called . push ( 'onleaveyellow ' + ( a + b + c ) ) ; } ;
248+ fsm . onenterred = function ( a , b , c ) { called . push ( 'onenterred ' + ( a + b + c ) ) ; } ;
249+ fsm . onleavered = function ( a , b , c ) { called . push ( 'onleavered ' + ( a + b + c ) ) ; } ;
250+
251+ // event hooks
252+ fsm . onbeforewarn = function ( a , b , c ) { called . push ( 'onbeforewarn ' + ( a + b + c ) ) ; } ;
253+ fsm . onafterwarn = function ( a , b , c ) { called . push ( 'onafterwarn ' + ( a + b + c ) ) ; } ;
254+ fsm . onbeforepanic = function ( a , b , c ) { called . push ( 'onbeforepanic ' + ( a + b + c ) ) ; } ;
255+ fsm . onafterpanic = function ( a , b , c ) { called . push ( 'onafterpanic ' + ( a + b + c ) ) ; } ;
256+ fsm . onbeforecalm = function ( a , b , c ) { called . push ( 'onbeforecalm ' + ( a + b + c ) ) ; } ;
257+ fsm . onaftercalm = function ( a , b , c ) { called . push ( 'onaftercalm ' + ( a + b + c ) ) ; } ;
258+ fsm . onbeforeclear = function ( a , b , c ) { called . push ( 'onbeforeclear ' + ( a + b + c ) ) ; } ;
259+ fsm . onafterclear = function ( a , b , c ) { called . push ( 'onafterclear ' + ( a + b + c ) ) ; } ;
260+
261+ called = [ ] ;
262+ fsm . warn ( 1 , 2 , 3 ) ;
263+ deepEqual ( called , [ 'onbeforewarn 6' , 'onleavegreen 6' , 'onenteryellow 6' , 'onchange from green to yellow 6' , 'onafterwarn 6' ] ) ;
264+
265+ called = [ ] ;
266+ fsm . panic ( 4 , 5 , 6 ) ;
267+ deepEqual ( called , [ 'onbeforepanic 15' , 'onleaveyellow 15' , 'onenterred 15' , 'onchange from yellow to red 15' , 'onafterpanic 15' ] ) ;
268+
269+ called = [ ] ;
270+ fsm . calm ( 0 , 0 , 1 ) ;
271+ deepEqual ( called , [ 'onbeforecalm 1' , 'onleavered 1' , 'onenteryellow 1' , 'onchange from red to yellow 1' , 'onaftercalm 1' ] ) ;
272+
273+ called = [ ] ;
274+ fsm . clear ( "a" , "b" , "c" ) ;
275+ deepEqual ( called , [ 'onbeforeclear abc' , 'onleaveyellow abc' , 'onentergreen abc' , 'onchange from yellow to green abc' , 'onafterclear abc' ] ) ;
276+
277+ } ) ;
227278
0 commit comments