Skip to content

Commit 87250b8

Browse files
committed
Add addAnyHandler().
1 parent 8f24573 commit 87250b8

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

Sources/StateMachine.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,19 @@ public final class StateMachine<S: StateType, E: EventType>: Machine<S, E>
307307

308308
return false
309309
}
310+
311+
// MARK: addAnyHandler (event-based & state-based)
312+
313+
public func addAnyHandler(order order: HandlerOrder = _defaultOrder, handler: Handler) -> Disposable
314+
{
315+
let disposable1 = self.addHandler(.Any => .Any, order: order, handler: handler)
316+
let disposable2 = self.addHandler(event: .Any, order: order, handler: handler)
317+
318+
return ActionDisposable {
319+
disposable1.dispose()
320+
disposable2.dispose()
321+
}
322+
}
310323

311324
//--------------------------------------------------
312325
// MARK: - RouteChain

Tests/StateMachineEventTests.swift

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,4 +374,49 @@ class StateMachineEventTests: _TestCase
374374

375375
XCTAssertEqual(invokeCount, 0, "Handler should NOT be performed")
376376
}
377-
}
377+
378+
//--------------------------------------------------
379+
// MARK: - addAnyHandler
380+
//--------------------------------------------------
381+
382+
func testAddAnyHandler()
383+
{
384+
var invokeCount = 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+
// addAnyHandler (for both event-based & state-based)
398+
machine.addAnyHandler { context in
399+
invokeCount++
400+
return
401+
}
402+
403+
}
404+
405+
// tryEvent
406+
machine <-! .Event0
407+
XCTAssertEqual(machine.state, MyState.State1)
408+
XCTAssertEqual(invokeCount, 1)
409+
410+
// tryEvent
411+
machine <-! .Event0
412+
XCTAssertEqual(machine.state, MyState.State2)
413+
XCTAssertEqual(invokeCount, 2)
414+
415+
// tryState
416+
machine <- .State3
417+
XCTAssertEqual(machine.state, MyState.State3)
418+
XCTAssertEqual(invokeCount, 3)
419+
420+
}
421+
422+
}

0 commit comments

Comments
 (0)