Initial commit

master
Sven Slootweg 7 years ago
commit e54f5c687b

1
.gitignore vendored

@ -0,0 +1 @@
node_modules

@ -0,0 +1,31 @@
# machina-factory-bugcase
A demonstration of a bug in machina v2.0.2, where a child FSM factory is called multiple times when specified as part of a config object.
What should happen:
```
(fsm.0) Parent state 1 reached
Creating child
(fsm.1) Child state A reached
(fsm.0) Parent state 2 reached
Creating child
(fsm.2) Child state A reached
(fsm.2) Child state B reached
```
What happens instead:
```
(fsm.0) Parent state 1 reached
Creating child
(fsm.1) Child state A reached
Creating child
(fsm.2) Child state A reached
(fsm.0) Parent state 2 reached
Creating child
(fsm.3) Child state A reached
Creating child
(fsm.4) Child state A reached
(fsm.4) Child state B reached
```

@ -0,0 +1,49 @@
'use strict';
const machina = require("machina");
let parent = new machina.Fsm({
initialState: "one",
states: {
one: {
_onEnter: function () {
console.log(`(${this.namespace}) Parent state 1 reached`);
return this.transition("two");
}
},
two: {
_onEnter: function () {
console.log(`(${this.namespace}) Parent state 2 reached`);
return this.handle("childAction");
},
_child: {
factory: function () {
console.log("Creating child");
return createChild();
}
}
}
}
});
function createChild() {
return new machina.Fsm({
initialState: "a",
states: {
a: {
_onEnter: function () {
console.log(`(${this.namespace}) Child state A reached`);
},
childAction: function () {
return this.transition("b");
}
},
b: {
_onEnter: function () {
console.log(`(${this.namespace}) Child state B reached`);
}
}
}
})
}

@ -0,0 +1,19 @@
{
"name": "machina-factory-bugcase",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@git.cryto.net:joepie91/machina-factory-bugcase.git"
},
"keywords": ["machina"],
"author": "Sven Slootweg <admin@cryto.net>",
"license": "WTFPL",
"dependencies": {
"machina": "^2.0.2"
}
}
Loading…
Cancel
Save