From 6737a6ed67c0d0ecbdf1c95a42c10362708bbf75 Mon Sep 17 00:00:00 2001
From: Henrik Rentz-Reichert
Date: Mon, 24 Oct 2016 09:02:28 +0200
Subject: Bug 505406 - It is possible to add a second transition to an
inherited entry point in the graphical editor
- added test
- adjusted JUnit launch configurations to Neon/Java 8
Change-Id: I4d0bfd6e32174d8d72b1911cc118294219163b6b
---
.../core/fsm/validation/FSMValidationUtil.java | 15 ++++++++
...lipse.etrice.abstractexec.behavior.tests.launch | 6 +--
.../org.eclipse.etrice.core.genmodel.tests.launch | 4 +-
.../models/bug505406.room | 31 +++++++++++++++
.../org.eclipse.etrice.core.room.tests.launch | 4 +-
.../src/org/eclipse/etrice/core/TestBug505406.java | 44 ++++++++++++++++++++++
...rg.eclipse.etrice.etunit.converter.tests.launch | 6 +--
.../org.eclipse.etrice.generator.tests.launch | 6 +--
.../org.eclipse.etrice.ui.behavior.tests.launch | 2 +-
.../org.eclipse.etrice.ui.structure.tests.launch | 2 +-
10 files changed, 105 insertions(+), 15 deletions(-)
create mode 100644 tests/org.eclipse.etrice.core.room.tests/models/bug505406.room
create mode 100644 tests/org.eclipse.etrice.core.room.tests/src/org/eclipse/etrice/core/TestBug505406.java
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
index 552e1054c..e6353b163 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtil.java
@@ -150,6 +150,21 @@ public class FSMValidationUtil extends FSMValidationUtilXtend {
}
}
}
+
+ // in case this tp is inherited also check original state graph
+ StateGraph origSG = (StateGraph) srcTP.eContainer();
+ for (Transition t : origSG.getTransitions()) {
+ if (t==trans)
+ continue;
+
+ if (t instanceof NonInitialTransition) {
+ if (((NonInitialTransition) t).getFrom() instanceof TrPointTerminal) {
+ TrPointTerminal tpt = (TrPointTerminal)((NonInitialTransition) t).getFrom();
+ if (tpt.getTrPoint()==srcTP)
+ return Result.error("source transition point already is connected", src, FSMPackage.eINSTANCE.getTrPointTerminal_TrPoint(), 0);
+ }
+ }
+ }
}
}
else if (src instanceof SubStateTrPointTerminal) {
diff --git a/tests/org.eclipse.etrice.abstractexec.behavior.tests/org.eclipse.etrice.abstractexec.behavior.tests.launch b/tests/org.eclipse.etrice.abstractexec.behavior.tests/org.eclipse.etrice.abstractexec.behavior.tests.launch
index dfb55dc09..a6708609b 100644
--- a/tests/org.eclipse.etrice.abstractexec.behavior.tests/org.eclipse.etrice.abstractexec.behavior.tests.launch
+++ b/tests/org.eclipse.etrice.abstractexec.behavior.tests/org.eclipse.etrice.abstractexec.behavior.tests.launch
@@ -27,16 +27,16 @@
-
+
-
+
-
+
diff --git a/tests/org.eclipse.etrice.core.genmodel.tests/org.eclipse.etrice.core.genmodel.tests.launch b/tests/org.eclipse.etrice.core.genmodel.tests/org.eclipse.etrice.core.genmodel.tests.launch
index 423c58876..ad644bd71 100644
--- a/tests/org.eclipse.etrice.core.genmodel.tests/org.eclipse.etrice.core.genmodel.tests.launch
+++ b/tests/org.eclipse.etrice.core.genmodel.tests/org.eclipse.etrice.core.genmodel.tests.launch
@@ -33,8 +33,8 @@
-
-
+
+
diff --git a/tests/org.eclipse.etrice.core.room.tests/models/bug505406.room b/tests/org.eclipse.etrice.core.room.tests/models/bug505406.room
new file mode 100644
index 000000000..46391f9c7
--- /dev/null
+++ b/tests/org.eclipse.etrice.core.room.tests/models/bug505406.room
@@ -0,0 +1,31 @@
+RoomModel bug505406 {
+
+ ActorClass Bug505406Base {
+ Behavior {
+ StateMachine {
+ State state0 {
+ subgraph {
+ State state0
+ EntryPoint tr0
+ Transition tr1: my tr0 -> state0
+ }
+ }
+ Transition init0: initial -> tr0 of state0
+ }
+ }
+ }
+
+ ActorClass Bug505406Derived extends Bug505406Base {
+
+ Behavior {
+ StateMachine {
+ RefinedState state0 {
+ subgraph {
+ State state1
+ Transition tr2: my tr0 -> state1 // <<< second transition from entry point tr0 (first is inherited tr1)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/tests/org.eclipse.etrice.core.room.tests/org.eclipse.etrice.core.room.tests.launch b/tests/org.eclipse.etrice.core.room.tests/org.eclipse.etrice.core.room.tests.launch
index 409b61ae2..3fabf9600 100644
--- a/tests/org.eclipse.etrice.core.room.tests/org.eclipse.etrice.core.room.tests.launch
+++ b/tests/org.eclipse.etrice.core.room.tests/org.eclipse.etrice.core.room.tests.launch
@@ -27,7 +27,7 @@
-
+
@@ -36,7 +36,7 @@
-
+
diff --git a/tests/org.eclipse.etrice.core.room.tests/src/org/eclipse/etrice/core/TestBug505406.java b/tests/org.eclipse.etrice.core.room.tests/src/org/eclipse/etrice/core/TestBug505406.java
new file mode 100644
index 000000000..f0044dd58
--- /dev/null
+++ b/tests/org.eclipse.etrice.core.room.tests/src/org/eclipse/etrice/core/TestBug505406.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2013 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * CONTRIBUTORS:
+ * Henrik Rentz-Reichert (initial contribution)
+ *
+ *******************************************************************************/
+
+package org.eclipse.etrice.core;
+
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author Henrik Rentz-Reichert
+ *
+ */
+public class TestBug505406 extends TestBase {
+ private Resource res = null;
+
+ @Before
+ public void SetUp() {
+ prepare();
+ res = getResource("bug505406.room");
+ }
+
+ @Test
+ public void testEntryPointAlreadyConnected() {
+ EObject obj = res.getEObject("ContinuationTransition:Bug505406Derived$state0$tr2");
+ Diagnostic diag = getDiag(obj);
+ assertTrue(diag.getChildren().size() == 1);
+ assertTrue(diag.getChildren().get(0).getMessage().contains("source transition point already is connected"));
+ }
+
+}
diff --git a/tests/org.eclipse.etrice.etunit.converter.tests/org.eclipse.etrice.etunit.converter.tests.launch b/tests/org.eclipse.etrice.etunit.converter.tests/org.eclipse.etrice.etunit.converter.tests.launch
index fbad29a28..cd546f2fd 100644
--- a/tests/org.eclipse.etrice.etunit.converter.tests/org.eclipse.etrice.etunit.converter.tests.launch
+++ b/tests/org.eclipse.etrice.etunit.converter.tests/org.eclipse.etrice.etunit.converter.tests.launch
@@ -24,16 +24,16 @@
-
+
-
+
-
+
diff --git a/tests/org.eclipse.etrice.generator.tests/org.eclipse.etrice.generator.tests.launch b/tests/org.eclipse.etrice.generator.tests/org.eclipse.etrice.generator.tests.launch
index 0cdfac997..a79d3791a 100644
--- a/tests/org.eclipse.etrice.generator.tests/org.eclipse.etrice.generator.tests.launch
+++ b/tests/org.eclipse.etrice.generator.tests/org.eclipse.etrice.generator.tests.launch
@@ -24,16 +24,16 @@
-
+
-
+
-
+
diff --git a/tests/org.eclipse.etrice.ui.behavior.tests/org.eclipse.etrice.ui.behavior.tests.launch b/tests/org.eclipse.etrice.ui.behavior.tests/org.eclipse.etrice.ui.behavior.tests.launch
index b43c18d3d..637fadb1f 100644
--- a/tests/org.eclipse.etrice.ui.behavior.tests/org.eclipse.etrice.ui.behavior.tests.launch
+++ b/tests/org.eclipse.etrice.ui.behavior.tests/org.eclipse.etrice.ui.behavior.tests.launch
@@ -28,7 +28,7 @@
-
+
diff --git a/tests/org.eclipse.etrice.ui.structure.tests/org.eclipse.etrice.ui.structure.tests.launch b/tests/org.eclipse.etrice.ui.structure.tests/org.eclipse.etrice.ui.structure.tests.launch
index 9291857cb..0550a9654 100644
--- a/tests/org.eclipse.etrice.ui.structure.tests/org.eclipse.etrice.ui.structure.tests.launch
+++ b/tests/org.eclipse.etrice.ui.structure.tests/org.eclipse.etrice.ui.structure.tests.launch
@@ -27,7 +27,7 @@
-
+
--
cgit v1.2.3