diff --git a/squirrel-foundation/pom.xml b/squirrel-foundation/pom.xml
index 644c1978..1ef1c3e0 100644
--- a/squirrel-foundation/pom.xml
+++ b/squirrel-foundation/pom.xml
@@ -191,18 +191,34 @@
+
+
+ sonatype-nexus-staging
+ Nexus Staging Repo
+ https://oss.sonatype.org/service/local/staging/deploy/maven2
+
+
+ sonatype-nexus-snapshots
+ Nexus Snapshot Repo
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+
+ unofficial
+
+
+ unofficial
+ true
+
+
+
+
+ github
+ GitHub Squirrel Maven Packages
+ https://maven.pkg.github.com/jassuncao/squirrel
+
+
+
-
-
- sonatype-nexus-staging
- Nexus Staging Repo
- https://oss.sonatype.org/service/local/staging/deploy/maven2
-
-
- sonatype-nexus-snapshots
- Nexus Snapshot Repo
- https://oss.sonatype.org/content/repositories/snapshots
-
-
diff --git a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/TransitionImpl.java b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/TransitionImpl.java
index 3cb0691d..5e9de3a7 100644
--- a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/TransitionImpl.java
+++ b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/TransitionImpl.java
@@ -184,16 +184,11 @@ private void doTransitInternal(ImmutableState source, ImmutableState
}
@Override
- public void internalFire(StateContext stateContext) {
- // Fix issue17
- if(type==TransitionType.INTERNAL && stateContext.
- getSourceState().getStateId()!=targetState.getStateId()) {
- return;
- }
+ public void internalFire(StateContext stateContext) {
if(condition.isSatisfied(stateContext.getContext())) {
ImmutableState newState = stateContext.getSourceState();
if(type==TransitionType.INTERNAL) {
- newState = transit(stateContext);
+ transit(stateContext);
} else {
// exit origin states
unwindSubStates(stateContext.getSourceState(), stateContext);
diff --git a/squirrel-foundation/src/test/java/org/squirrelframework/foundation/issues/Issue17.java b/squirrel-foundation/src/test/java/org/squirrelframework/foundation/issues/Issue17.java
index 15b4946c..a3c167f9 100644
--- a/squirrel-foundation/src/test/java/org/squirrelframework/foundation/issues/Issue17.java
+++ b/squirrel-foundation/src/test/java/org/squirrelframework/foundation/issues/Issue17.java
@@ -15,7 +15,7 @@ public class Issue17 {
enum Issue17State {A, A1, A2}
- enum Issue17Event {SAME, NEXT}
+ enum Issue17Event {SAME, NEXT, SAME_A2}
@ContextInsensitive
@StateMachineParameters(stateType=Issue17State.class, eventType=Issue17Event.class, contextType=Void.class)
@@ -27,6 +27,12 @@ void onA1ToA2(Issue17State from, Issue17State to, Issue17Event cause) {
void onSameWithinA(Issue17State from, Issue17State to, Issue17Event cause) {
logger.append("onSameWithinA");
}
+ void onSameWithinA2(Issue17State from, Issue17State to, Issue17Event cause) {
+ logger.append("onSameWithinA2");
+ }
+ void onExitA2(Issue17State from, Issue17State to, Issue17Event cause) {
+ logger.append("onExitA2");
+ }
String consumeLog() {
final String result = logger.toString();
logger = new StringBuilder();
@@ -39,7 +45,9 @@ public void testIssue17() {
final UntypedStateMachineBuilder builder = StateMachineBuilderFactory.create(Issue17StateMachine.class);
builder.defineSequentialStatesOn(Issue17State.A, Issue17State.A1, Issue17State.A2);
builder.internalTransition().within(Issue17State.A).on(Issue17Event.SAME).callMethod("onSameWithinA");
+ builder.internalTransition().within(Issue17State.A2).on(Issue17Event.SAME_A2).callMethod("onSameWithinA2");
builder.localTransition().from(Issue17State.A1).to(Issue17State.A2).on(Issue17Event.NEXT).callMethod("onA1ToA2");
+ builder.onExit(Issue17State.A2).callMethod("onExitA2");
Issue17StateMachine fsm = builder.newUntypedStateMachine(Issue17State.A);
fsm.addTransitionDeclinedListener(new TransitionDeclinedListener() {
@@ -51,8 +59,13 @@ public void transitionDeclined(
});
fsm.start();
fsm.fire(Issue17Event.NEXT);
+ Assert.assertEquals("onA1ToA2", fsm.consumeLog());
fsm.fire(Issue17Event.SAME);
- Assert.assertTrue(fsm.consumeLog().equals("onA1ToA2"));
+ Assert.assertEquals(Issue17State.A2, fsm.getCurrentState());
+ Assert.assertEquals("onSameWithinA",fsm.consumeLog());
+ fsm.fire(Issue17Event.SAME_A2);
+ Assert.assertEquals(Issue17State.A2, fsm.getCurrentState());
+ Assert.assertEquals("onSameWithinA2",fsm.consumeLog());
}
}