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