@@ -59,8 +59,8 @@ private class Button
5959 }
6060
6161 [ Test ]
62- [ Category ( "MonoGameStateMachine.FluentTests.OnMethods " ) ]
63- public void OnMethodTests ( )
62+ [ Category ( "MonoGameStateMachine.FluentTests" ) ]
63+ public void OnMethodHooksShouldBeTriggeredCorrectly ( )
6464 {
6565 var button = new Button ( ) ;
6666
@@ -130,5 +130,56 @@ public void OnMethodTests()
130130 // Update was triggered twice over all states.
131131 Assert . That ( button . UpdateCounter , Is . EqualTo ( 3F ) ) ;
132132 }
133+
134+ [ Test ]
135+ [ Category ( "MonoGameStateMachine.FluentTests" ) ]
136+ public void WhenMultipleAfterConditionsFireOnASingleUpdateAdvanceStateCorrectly ( )
137+ {
138+ var m = Fsm < State , Trigger > . Builder ( State . IDLE )
139+ . State ( State . IDLE )
140+ . TransitionTo ( State . OVER ) . After ( 10 , TimeUnit . MILLISECONDS )
141+ . State ( State . OVER )
142+ . TransitionTo ( State . PRESSED ) . After ( 10 , TimeUnit . MILLISECONDS )
143+ . State ( State . PRESSED )
144+ . TransitionTo ( State . REFRESHING ) . After ( 10 , TimeUnit . MILLISECONDS )
145+ . State ( State . REFRESHING )
146+ . TransitionTo ( State . IDLE ) . After ( 10 , TimeUnit . MILLISECONDS )
147+ . Build ( ) ;
148+
149+ Assert . That ( m . Current . Identifier , Is . EqualTo ( State . IDLE ) ) ;
150+ m . Update ( new GameTime ( TimeSpan . FromDays ( 1 ) , TimeSpan . FromMilliseconds ( 40 ) ) ) ;
151+ Assert . That ( m . Current . Identifier , Is . EqualTo ( State . IDLE ) ) ;
152+ }
153+
154+ [ Test ]
155+ [ Category ( "MonoGameStateMachine.FluentTests" ) ]
156+ public void WhenMultipleAfterConditionsFireOnASingleUpdateOnEnterAndOnExitShoudFire ( )
157+ {
158+ int enterCount = 0 ;
159+ int exitCount = 0 ;
160+ var m = Fsm < State , Trigger > . Builder ( State . IDLE )
161+ . State ( State . IDLE )
162+ . OnEnter ( t => enterCount ++ )
163+ . OnExit ( t => exitCount ++ )
164+ . TransitionTo ( State . OVER ) . After ( 10 , TimeUnit . MILLISECONDS )
165+ . State ( State . OVER )
166+ . OnEnter ( t => enterCount ++ )
167+ . OnExit ( t => exitCount ++ )
168+ . TransitionTo ( State . PRESSED ) . After ( 10 , TimeUnit . MILLISECONDS )
169+ . State ( State . PRESSED )
170+ . OnEnter ( t => enterCount ++ )
171+ . OnExit ( t => exitCount ++ )
172+ . TransitionTo ( State . REFRESHING ) . After ( 10 , TimeUnit . MILLISECONDS )
173+ . State ( State . REFRESHING )
174+ . OnEnter ( t => enterCount ++ )
175+ . OnExit ( t => exitCount ++ )
176+ . TransitionTo ( State . IDLE ) . After ( 10 , TimeUnit . MILLISECONDS )
177+ . Build ( ) ;
178+
179+ Assert . That ( m . Current . Identifier , Is . EqualTo ( State . IDLE ) ) ;
180+ m . Update ( new GameTime ( TimeSpan . FromDays ( 1 ) , TimeSpan . FromMilliseconds ( 40 ) ) ) ;
181+ Assert . That ( enterCount , Is . EqualTo ( 4 ) ) ;
182+ Assert . That ( exitCount , Is . EqualTo ( 4 ) ) ;
183+ }
133184 }
134185}
0 commit comments