@@ -157,3 +157,57 @@ test("state transition fired without completing previous transition", function()
157157
158158//-----------------------------------------------------------------------------
159159
160+ test ( "hooks are called when appropriate" , function ( ) {
161+
162+ var fsm = StateMachine . create ( {
163+ initial : 'green' ,
164+ events : [
165+ { name : 'warn' , from : 'green' , to : 'yellow' , async : true } ,
166+ { name : 'panic' , from : 'yellow' , to : 'red' , async : true } ,
167+ { name : 'calm' , from : 'red' , to : 'yellow' , async : true } ,
168+ { name : 'clear' , from : 'yellow' , to : 'green' , async : true } ,
169+ ] } ) ;
170+
171+ var called = [ ] ;
172+
173+ // generic state hook
174+ fsm . onchangestate = function ( from , to ) { called . push ( 'onchange from ' + from + ' to ' + to ) ; } ;
175+
176+ // state hooks
177+ fsm . onentergreen = function ( ) { called . push ( 'onentergreen' ) ; } ;
178+ fsm . onleavegreen = function ( ) { called . push ( 'onleavegreen' ) ; } ;
179+ fsm . onenteryellow = function ( ) { called . push ( 'onenteryellow' ) ; } ;
180+ fsm . onleaveyellow = function ( ) { called . push ( 'onleaveyellow' ) ; } ;
181+ fsm . onenterred = function ( ) { called . push ( 'onenterred' ) ; } ;
182+ fsm . onleavered = function ( ) { called . push ( 'onleavered' ) ; } ;
183+
184+ // event hooks
185+ fsm . onbeforewarn = function ( ) { called . push ( 'onbeforewarn' ) ; } ;
186+ fsm . onafterwarn = function ( ) { called . push ( 'onafterwarn' ) ; } ;
187+ fsm . onbeforepanic = function ( ) { called . push ( 'onbeforepanic' ) ; } ;
188+ fsm . onafterpanic = function ( ) { called . push ( 'onafterpanic' ) ; } ;
189+ fsm . onbeforecalm = function ( ) { called . push ( 'onbeforecalm' ) ; } ;
190+ fsm . onaftercalm = function ( ) { called . push ( 'onaftercalm' ) ; } ;
191+ fsm . onbeforeclear = function ( ) { called . push ( 'onbeforeclear' ) ; } ;
192+ fsm . onafterclear = function ( ) { called . push ( 'onafterclear' ) ; } ;
193+
194+ called = [ ] ;
195+ fsm . warn ( ) ; deepEqual ( called , [ 'onbeforewarn' , 'onleavegreen' ] ) ;
196+ fsm . transition ( ) ; deepEqual ( called , [ 'onbeforewarn' , 'onleavegreen' , 'onenteryellow' , 'onchange from green to yellow' , 'onafterwarn' ] ) ;
197+
198+ called = [ ] ;
199+ fsm . panic ( ) ; deepEqual ( called , [ 'onbeforepanic' , 'onleaveyellow' ] ) ;
200+ fsm . transition ( ) ; deepEqual ( called , [ 'onbeforepanic' , 'onleaveyellow' , 'onenterred' , 'onchange from yellow to red' , 'onafterpanic' ] ) ;
201+
202+ called = [ ] ;
203+ fsm . calm ( ) ; deepEqual ( called , [ 'onbeforecalm' , 'onleavered' ] ) ;
204+ fsm . transition ( ) ; deepEqual ( called , [ 'onbeforecalm' , 'onleavered' , 'onenteryellow' , 'onchange from red to yellow' , 'onaftercalm' ] ) ;
205+
206+ called = [ ] ;
207+ fsm . clear ( ) ; deepEqual ( called , [ 'onbeforeclear' , 'onleaveyellow' ] ) ;
208+ fsm . transition ( ) ; deepEqual ( called , [ 'onbeforeclear' , 'onleaveyellow' , 'onentergreen' , 'onchange from yellow to green' , 'onafterclear' ] ) ;
209+
210+ } ) ;
211+
212+ //-----------------------------------------------------------------------------
213+
0 commit comments