@@ -374,4 +374,75 @@ class StateMachineEventTests: _TestCase
374374
375375 XCTAssertEqual ( invokeCount, 0 , " Handler should NOT be performed " )
376376 }
377+
378+ //--------------------------------------------------
379+ // MARK: - addAnyHandler
380+ //--------------------------------------------------
381+
382+ func testAddAnyHandler( )
383+ {
384+ var invokeCounts = [ 0 , 0 , 0 , 0 , 0 , 0 ]
385+
386+ let machine = StateMachine < MyState , MyEvent > ( state: . State0) { machine in
387+
388+ // add 0 => 1 => 2 (event-based)
389+ machine. addRoutes ( event: . Event0, transitions: [
390+ . State0 => . State1,
391+ . State1 => . State2,
392+ ] )
393+
394+ // add 2 => 3 (state-based)
395+ machine. addRoute ( . State2 => . State3)
396+
397+ //
398+ // addAnyHandler (for both event-based & state-based)
399+ //
400+
401+ machine. addAnyHandler ( . State0 => . State1) { context in
402+ invokeCounts [ 0 ] ++
403+ }
404+
405+ machine. addAnyHandler ( . State1 => . State2) { context in
406+ invokeCounts [ 1 ] ++
407+ }
408+
409+ machine. addAnyHandler ( . State2 => . State3) { context in
410+ invokeCounts [ 2 ] ++
411+ }
412+
413+ machine. addAnyHandler ( . Any => . State3) { context in
414+ invokeCounts [ 3 ] ++
415+ }
416+
417+ machine. addAnyHandler ( . State0 => . Any) { context in
418+ invokeCounts [ 4 ] ++
419+ }
420+
421+ machine. addAnyHandler ( . Any => . Any) { context in
422+ invokeCounts [ 5 ] ++
423+ }
424+
425+ }
426+
427+ // initial
428+ XCTAssertEqual ( machine. state, MyState . State0)
429+ XCTAssertEqual ( invokeCounts, [ 0 , 0 , 0 , 0 , 0 , 0 ] )
430+
431+ // tryEvent
432+ machine <-! . Event0
433+ XCTAssertEqual ( machine. state, MyState . State1)
434+ XCTAssertEqual ( invokeCounts, [ 1 , 0 , 0 , 0 , 1 , 1 ] )
435+
436+ // tryEvent
437+ machine <-! . Event0
438+ XCTAssertEqual ( machine. state, MyState . State2)
439+ XCTAssertEqual ( invokeCounts, [ 1 , 1 , 0 , 0 , 1 , 2 ] )
440+
441+ // tryState
442+ machine <- . State3
443+ XCTAssertEqual ( machine. state, MyState . State3)
444+ XCTAssertEqual ( invokeCounts, [ 1 , 1 , 1 , 1 , 1 , 3 ] )
445+
446+ }
447+
377448}
0 commit comments