diff --git a/pom.xml b/pom.xml
index e9e560c..9289e02 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
me.bvn13.fsm
fsm
- 2.1.7
+ 2.1.8
jar
diff --git a/src/main/java/me/bvn13/fsm/Fsm.java b/src/main/java/me/bvn13/fsm/Fsm.java
index 1253454..39b1a81 100644
--- a/src/main/java/me/bvn13/fsm/Fsm.java
+++ b/src/main/java/me/bvn13/fsm/Fsm.java
@@ -252,7 +252,6 @@ public class Fsm {
throw new NotInitializedException(format("Unable to find state '%s'", name), e);
}
this.done = currentState.isFinish();
- this.currentState.beforeEvent();
}
private void switchToNextState(E event) {
diff --git a/src/test/java/me/bvn13/fsm/tests/FsmTest.java b/src/test/java/me/bvn13/fsm/tests/FsmTest.java
index f79ff1e..a02e733 100644
--- a/src/test/java/me/bvn13/fsm/tests/FsmTest.java
+++ b/src/test/java/me/bvn13/fsm/tests/FsmTest.java
@@ -7,6 +7,7 @@ import org.junit.Assert;
import org.junit.Test;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Created by bvn13 on 28.12.2017.
@@ -179,7 +180,7 @@ public class FsmTest {
Assert.assertFalse(initBefore.get());
Assert.assertFalse(initProcess.get());
Assert.assertFalse(initAfter.get());
- Assert.assertTrue(intermediateBefore.get());
+ Assert.assertFalse(intermediateBefore.get());
Assert.assertTrue(intermediateAfter.get());
Assert.assertTrue(intermediateProcess.get());
Assert.assertTrue(finishBefore.get());
@@ -188,4 +189,83 @@ public class FsmTest {
}
+ @Test
+ public void newSyntaxCountingEveryStep() {
+
+ Counter initCounter = new Counter();
+ Counter firstIntermediateCounter = new Counter();
+ Counter secondIntermediateCounter = new Counter();
+ Counter finishCounter = new Counter();
+
+ // @formatter:off
+
+ SimpleFsm simpleFsm = Fsm
+ ., String>from(SimpleFsm::new)
+ .withStates()
+ .from("init")
+ .withBeforeHandler(fsm -> initCounter.before.incrementAndGet())
+ .withAfterHandler(fsm -> initCounter.after.incrementAndGet())
+ .withProcessor((fsm, event) -> initCounter.process.incrementAndGet())
+ .end()
+ .state("intermediate-1")
+ .withBeforeHandler(fsm -> firstIntermediateCounter.before.incrementAndGet())
+ .withAfterHandler(fsm -> firstIntermediateCounter.after.incrementAndGet())
+ .withProcessor((fsm, event) -> firstIntermediateCounter.process.incrementAndGet())
+ .end()
+ .state("intermediate-2")
+ .withBeforeHandler(fsm -> secondIntermediateCounter.before.incrementAndGet())
+ .withAfterHandler(fsm -> secondIntermediateCounter.after.incrementAndGet())
+ .withProcessor((fsm, event) -> secondIntermediateCounter.process.incrementAndGet())
+ .end()
+ .finish("finish")
+ .withBeforeHandler(fsm -> finishCounter.before.incrementAndGet())
+ .withAfterHandler(fsm -> finishCounter.after.incrementAndGet())
+ .withProcessor((fsm, event) -> finishCounter.process.incrementAndGet())
+ .end()
+ .withTransition()
+ .from("init")
+ .to("intermediate-1")
+ .checking((fsm, event) -> true)
+ .end()
+ .withTransition()
+ .from("intermediate-1")
+ .to("intermediate-2")
+ .checking((fsm, event) -> true)
+ .end()
+ .withTransition()
+ .from("intermediate-2")
+ .to("finish")
+ .checking((fsm, event) -> true)
+ .end()
+ .create()
+ ;
+
+ // @formatter:on
+
+ simpleFsm.process("");
+ simpleFsm.process("");
+ simpleFsm.process("");
+
+ Assert.assertEquals("finish", simpleFsm.getCurrentState().getName());
+ Assert.assertEquals(1, initCounter.before.get());
+ Assert.assertEquals(1, initCounter.after.get());
+ Assert.assertEquals(1, initCounter.process.get());
+ Assert.assertEquals(1, firstIntermediateCounter.before.get());
+ Assert.assertEquals(1, firstIntermediateCounter.after.get());
+ Assert.assertEquals(1, firstIntermediateCounter.process.get());
+ Assert.assertEquals(1, secondIntermediateCounter.before.get());
+ Assert.assertEquals(1, secondIntermediateCounter.after.get());
+ Assert.assertEquals(1, secondIntermediateCounter.process.get());
+ Assert.assertEquals(1, finishCounter.before.get());
+ Assert.assertEquals(0, finishCounter.after.get());
+ Assert.assertEquals(0, finishCounter.process.get());
+
+ }
+
+ static class Counter {
+ final AtomicInteger before = new AtomicInteger(0);
+ final AtomicInteger after = new AtomicInteger(0);
+ final AtomicInteger process = new AtomicInteger(0);
+ }
+
}