You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Sven Slootweg 80dc5e66f3 Update README to describe the correct bug and its behaviour 6 years ago
.gitignore Add complexity for testing out switching back and forth between child FSMs 6 years ago
README.md Update README to describe the correct bug and its behaviour 6 years ago
index.js Add complexity for testing out switching back and forth between child FSMs 6 years ago
package.json Initial commit 6 years ago

README.md

machina-factory-bugcase

A demonstration of a bug in machina v2.0.2, where a child FSM factory is called erroneously during any handle command that's received by a child FSM, even if no state transition takes place in the parent.

What should happen:

(fsm.0) Parent state 1 reached
Creating child for state 2
(fsm.1) Child state A reached
(fsm.0) Parent state 2 reached
(fsm.1) Child state B reached
Creating child for state 3
(fsm.2) Child state A reached
(fsm.0) Parent state 3 reached
(fsm.2) Child state B reached
Parent done! Returning to state 2 one last time...
Creating child for state 2
(fsm.3) Child state A reached
(fsm.0) Parent state 2 reached
(fsm.3) Child state B reached

What happens instead:

(fsm.0) Parent state 1 reached
Creating child for state 2
(fsm.1) Child state A reached
(fsm.0) Parent state 2 reached
Creating child for state 2
(fsm.2) Child state A reached
(fsm.2) Child state B reached
Creating child for state 2
(fsm.3) Child state A reached
Creating child for state 3
(fsm.4) Child state A reached
(fsm.0) Parent state 3 reached
Creating child for state 3
(fsm.5) Child state A reached
(fsm.5) Child state B reached
Creating child for state 3
(fsm.6) Child state A reached
Parent done! Returning to state 2 one last time...
Creating child for state 2
(fsm.7) Child state A reached
(fsm.0) Parent state 2 reached
Creating child for state 2
(fsm.8) Child state A reached
(fsm.8) Child state B reached
Creating child for state 2
(fsm.9) Child state A reached

The result is even more wrong when this bug is combined with the duplicate FSM creation bug (as demonstrated in the master branch of this repository):

(fsm.0) Parent state 1 reached
Creating child for state 2
(fsm.1) Child state A reached
Creating child for state 2
(fsm.2) Child state A reached
(fsm.0) Parent state 2 reached
Creating child for state 2
(fsm.3) Child state A reached
Creating child for state 2
(fsm.4) Child state A reached
(fsm.4) Child state B reached
Creating child for state 2
(fsm.5) Child state A reached
Creating child for state 2
(fsm.6) Child state A reached
Creating child for state 3
(fsm.7) Child state A reached
Creating child for state 3
(fsm.8) Child state A reached
(fsm.0) Parent state 3 reached
Creating child for state 3
(fsm.9) Child state A reached
Creating child for state 3
(fsm.10) Child state A reached
(fsm.10) Child state B reached
Creating child for state 3
(fsm.11) Child state A reached
Creating child for state 3
(fsm.12) Child state A reached
Parent done! Returning to state 2 one last time...
Creating child for state 2
(fsm.13) Child state A reached
Creating child for state 2
(fsm.14) Child state A reached
(fsm.0) Parent state 2 reached
Creating child for state 2
(fsm.15) Child state A reached
Creating child for state 2
(fsm.16) Child state A reached
(fsm.16) Child state B reached
Creating child for state 2
(fsm.17) Child state A reached
Creating child for state 2
(fsm.18) Child state A reached