Pārlūkot izejas kodu

JUnit test for 'group states into composite' refactoring.

tomqc86@googlemail.com 12 gadi atpakaļ
vecāks
revīzija
3f7d2ed739

+ 35 - 20
plugins/org.yakindu.sct.refactoring/src/org/yakindu/sct/refactoring/refactor/impl/GroupStatesIntoCompositeRefactoring.java

@@ -54,14 +54,19 @@ import com.google.common.collect.Lists;
 public class GroupStatesIntoCompositeRefactoring extends
 		AbstractRefactoring<GraphicalEditPart> {
 
-	private View parentRegion;
+	private View parentRegionView;
 	private PreferencesHint preferencesHint = DiagramActivator.DIAGRAM_PREFERENCES_HINT;
 
 	private final int PADDING = 55;
+	private State compositeState;
+	private Region innerRegion;
+	
+	protected List<State> contextStates;
 
 	@Override
 	protected void internalExecute() {
-		groupSelectedStatesIntoNewCompositeState();
+		doSemanticalRefactoring();
+		doGraphicalRefactoring();
 	}
 
 	@Override
@@ -69,18 +74,19 @@ public class GroupStatesIntoCompositeRefactoring extends
 		return super.isExecutable() && allStatesHaveSameParentRegion();
 	}
 
-	protected void groupSelectedStatesIntoNewCompositeState() {
-
-		State compositeState = createCompositeState();
+	protected void doSemanticalRefactoring() {
+		compositeState = createCompositeState();
 		
-		Region innerRegion = SGraphFactory.eINSTANCE.createRegion();
+		innerRegion = SGraphFactory.eINSTANCE.createRegion();
 		innerRegion.setName("inner region"); // TODO check for uniqueness?
 		compositeState.getRegions().add(innerRegion);
 		
-		for (State state : getSelectedStates()) {
+		for (State state : contextStates) {
 			innerRegion.getVertices().add(state);
 		}
-		
+	}
+
+	protected void doGraphicalRefactoring() {
 		Node compositeStateView = createNodeForCompositeState(compositeState);
 		Node innerRegionNode = ViewService.createNode(
 				getStateFigureCompartmentView(compositeStateView), innerRegion,
@@ -93,25 +99,30 @@ public class GroupStatesIntoCompositeRefactoring extends
 	protected State createCompositeState() {
 		State compositeState = SGraphFactory.eINSTANCE.createState();
 		compositeState.setName(getNameForCompositeState());
-		((Region)parentRegion.getElement()).getVertices().add(compositeState);
+		getParentRegion().getVertices().add(compositeState);
 		return compositeState;
 	}
 
 	protected Node createNodeForCompositeState(State compositeState) {
-		Node compositeStateNode = ViewService.createNode(parentRegion,
+		Node compositeStateNode = ViewService.createNode(parentRegionView,
 				compositeState, SemanticHints.STATE, preferencesHint);
 		setCompositeStateLayoutConstraint(compositeStateNode);
 		return compositeStateNode;
 	}
 
-	protected List<State> getSelectedStates() {
+	protected void setContextStates() {
+		contextStates = Lists.newArrayList();
 		List<GraphicalEditPart> contextObjects = getContextObjects();
-		List<State> result = Lists.newArrayList();
 		for (GraphicalEditPart editPart : contextObjects) {
 			EObject element = editPart.resolveSemanticElement();
-			result.add((State) element);
+			contextStates.add((State) element);
 		}
-		return result;
+	}
+	
+	@Override
+	public void setContextObjects(List<GraphicalEditPart> contextObject) {
+		super.setContextObjects(contextObject);
+		setContextStates();
 	}
 	
 	protected void moveSelectedStateNodesTo(View containerView, Bounds compositeBounds) {
@@ -163,7 +174,7 @@ public class GroupStatesIntoCompositeRefactoring extends
 
 	protected String getNameForCompositeState() {
 		StringBuilder nameBuilder = new StringBuilder("Composite");
-		for (State state : getSelectedStates()) {
+		for (State state : contextStates) {
 			nameBuilder.append("_");
 			nameBuilder.append(state.getName());
 		}
@@ -174,7 +185,7 @@ public class GroupStatesIntoCompositeRefactoring extends
 	protected void makeNameUnique(StringBuilder nameBuilder) {
 		int index = 2;
 		List<String> existingStateNames = Lists.newArrayList();
-		EList<Vertex> vertices = ((Region) parentRegion.getElement()).getVertices();
+		EList<Vertex> vertices = getParentRegion().getVertices();
 		for (Vertex vertex : vertices) {
 			existingStateNames.add(vertex.getName());
 		}
@@ -183,14 +194,18 @@ public class GroupStatesIntoCompositeRefactoring extends
 		}
 	}
 
+	protected Region getParentRegion() {
+		return contextStates.get(0).getParentRegion();
+	}
+
 	protected boolean allStatesHaveSameParentRegion() {
-		parentRegion = null;
+		parentRegionView = null;
 		for (IGraphicalEditPart editPart : getContextObjects()) {
-			if (parentRegion == null) {
-				parentRegion = (Node) ((Node)editPart.getNotationView()).eContainer();
+			if (parentRegionView == null) {
+				parentRegionView = (Node) ((Node)editPart.getNotationView()).eContainer();
 			} else {
 				Node nextParentRegion = (Node) ((Node)editPart.getNotationView()).eContainer();
-				if (!nextParentRegion.equals(parentRegion)) {
+				if (!nextParentRegion.equals(parentRegionView)) {
 					return false;
 				}
 			}

+ 3 - 1
test-plugins/org.yakindu.sct.refactoring.tests/src/org/yakindu/sct/refactoring/refactor/AllTests.java

@@ -15,6 +15,7 @@ import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
 import org.yakindu.sct.refactoring.refactor.impl.FoldIncomingActionsRefactoringTest;
 import org.yakindu.sct.refactoring.refactor.impl.FoldOutgoingActionsRefactoringTest;
+import org.yakindu.sct.refactoring.refactor.impl.GroupStatesIntoCompositeRefactoringTest;
 import org.yakindu.sct.refactoring.refactor.impl.RenameRefactoringTest;
 import org.yakindu.sct.refactoring.refactor.impl.UnfoldEntryActionsRefactoringTest;
 import org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoringTest;
@@ -28,7 +29,8 @@ import org.yakindu.sct.refactoring.refactor.impl.UnfoldExitActionsRefactoringTes
 @SuiteClasses({ FoldIncomingActionsRefactoringTest.class,
 		FoldOutgoingActionsRefactoringTest.class, RenameRefactoringTest.class,
 		UnfoldEntryActionsRefactoringTest.class,
-		UnfoldExitActionsRefactoringTest.class })
+		UnfoldExitActionsRefactoringTest.class,
+		GroupStatesIntoCompositeRefactoringTest.class})
 public class AllTests {
 
 }

+ 60 - 0
test-plugins/org.yakindu.sct.refactoring.tests/src/org/yakindu/sct/refactoring/refactor/impl/GroupStatesIntoCompositeRefactoringTest.java

@@ -0,0 +1,60 @@
+package org.yakindu.sct.refactoring.refactor.impl;
+
+import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.EXPECTED_STATECHART;
+import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.GROUPING_STATES;
+import static org.yakindu.sct.refactoring.test.models.RefactoringTestModels.INITIAL_STATECHART;
+
+import java.util.List;
+
+import org.eclipse.xtext.EcoreUtil2;
+import org.eclipse.xtext.junit4.InjectWith;
+import org.eclipse.xtext.junit4.XtextRunner;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.yakindu.sct.model.sgraph.State;
+import org.yakindu.sct.model.sgraph.Statechart;
+import org.yakindu.sct.model.sgraph.resource.AbstractSCTResource;
+import org.yakindu.sct.refactoring.refactor.RefactoringTest;
+import org.yakindu.sct.test.models.TestModelInjectorProvider;
+
+import com.google.common.collect.Lists;
+
+@RunWith(XtextRunner.class)
+@InjectWith(TestModelInjectorProvider.class)
+public class GroupStatesIntoCompositeRefactoringTest extends RefactoringTest {
+
+	@Test
+	public void testSemanticalRefactoring() {
+		Statechart initial = models
+				.loadStatechartFromResource(GROUPING_STATES + INITIAL_STATECHART);
+
+		List<State> states = getStatesByName(initial, Lists.newArrayList("B", "C", "D"));
+
+		GroupStatesIntoCompositeRefactoring refactoring = new GroupStatesIntoCompositeRefactoring();
+		refactoring.contextStates = Lists.newArrayList(states);
+		
+		AbstractSCTResource initialRes = (AbstractSCTResource) initial.eResource();
+		initialRes.setSerializerEnabled(true);
+		refactoring.doSemanticalRefactoring();
+		initialRes.setSerializerEnabled(false);
+		initialRes.linkSpecificationElements();
+
+		Statechart expected = models
+				.loadStatechartFromResource(GROUPING_STATES + EXPECTED_STATECHART);
+		
+		compareStatecharts(initial, expected);
+	}
+	
+	
+	protected List<State> getStatesByName(Statechart statechart, List<String> names) {
+		List<State> allStates = EcoreUtil2.getAllContentsOfType(statechart, State.class);
+		List<State> result = Lists.newArrayList();
+		for (State state : allStates) {
+			if (names.contains(state.getName())) {
+				result.add(state);
+			}
+		}
+		return result;
+	}
+	
+}

+ 59 - 59
test-plugins/org.yakindu.sct.refactoring.tests/testmodels/refactoring/grouping_states/after.sct

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
-  <sgraph:Statechart xmi:id="_NEjmkMdmEeGOoP2Ze98WBQ" specification="interface :&#xA;in event event1&#xA;in event event2&#xA;in event event3" name="after_grouping">
+  <sgraph:Statechart xmi:id="_NEjmkMdmEeGOoP2Ze98WBQ" specification="interface :&#xA;in event event1&#xA;in event event2&#xA;in event event3&#xA;" name="group_states">
     <regions xmi:id="_NEjmk8dmEeGOoP2Ze98WBQ" name="main region">
       <vertices xsi:type="sgraph:Entry" xmi:id="_NEkNpsdmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_NEmC08dmEeGOoP2Ze98WBQ" target="_NEk0t8dmEeGOoP2Ze98WBQ"/>
@@ -9,17 +9,17 @@
         <outgoingTransitions xmi:id="_QTY6EMdmEeGOoP2Ze98WBQ" specification="event1" target="_OTYKIMdmEeGOoP2Ze98WBQ"/>
       </vertices>
       <vertices xsi:type="sgraph:State" xmi:id="_XzbkEMdmEeGOoP2Ze98WBQ" name="E" incomingTransitions="_YboMgMdmEeGOoP2Ze98WBQ"/>
-      <vertices xsi:type="sgraph:State" xmi:id="_wr22MMdmEeGOoP2Ze98WBQ" name="Composite">
-        <regions xmi:id="_ABNPkMdnEeGOoP2Ze98WBQ" name="Inner">
-          <vertices xsi:type="sgraph:State" xmi:id="_Tmj7AMdmEeGOoP2Ze98WBQ" name="D" incomingTransitions="_UaJ7IMdmEeGOoP2Ze98WBQ _U8B5IMdmEeGOoP2Ze98WBQ">
-            <outgoingTransitions xmi:id="_YboMgMdmEeGOoP2Ze98WBQ" specification="event3" target="_XzbkEMdmEeGOoP2Ze98WBQ"/>
+      <vertices xsi:type="sgraph:State" xmi:id="_LcFnMINTEeKkh9Axpu9oaQ" specification="" name="Composite_B_C_D">
+        <regions xmi:id="_LcKfsINTEeKkh9Axpu9oaQ" name="inner region">
+          <vertices xsi:type="sgraph:State" xmi:id="_OTYKIMdmEeGOoP2Ze98WBQ" specification="" name="B" incomingTransitions="_QTY6EMdmEeGOoP2Ze98WBQ">
+            <outgoingTransitions xmi:id="_SJMlIMdmEeGOoP2Ze98WBQ" specification="event2" target="_Rr0soMdmEeGOoP2Ze98WBQ"/>
+            <outgoingTransitions xmi:id="_U8B5IMdmEeGOoP2Ze98WBQ" specification="" target="_Tmj7AMdmEeGOoP2Ze98WBQ"/>
           </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_Rr0soMdmEeGOoP2Ze98WBQ" name="C" incomingTransitions="_SJMlIMdmEeGOoP2Ze98WBQ">
+          <vertices xsi:type="sgraph:State" xmi:id="_Rr0soMdmEeGOoP2Ze98WBQ" specification="" name="C" incomingTransitions="_SJMlIMdmEeGOoP2Ze98WBQ">
             <outgoingTransitions xmi:id="_UaJ7IMdmEeGOoP2Ze98WBQ" specification="" target="_Tmj7AMdmEeGOoP2Ze98WBQ"/>
           </vertices>
-          <vertices xsi:type="sgraph:State" xmi:id="_OTYKIMdmEeGOoP2Ze98WBQ" name="B" incomingTransitions="_QTY6EMdmEeGOoP2Ze98WBQ">
-            <outgoingTransitions xmi:id="_SJMlIMdmEeGOoP2Ze98WBQ" specification="event2" target="_Rr0soMdmEeGOoP2Ze98WBQ"/>
-            <outgoingTransitions xmi:id="_U8B5IMdmEeGOoP2Ze98WBQ" specification="" target="_Tmj7AMdmEeGOoP2Ze98WBQ"/>
+          <vertices xsi:type="sgraph:State" xmi:id="_Tmj7AMdmEeGOoP2Ze98WBQ" specification="" name="D" incomingTransitions="_UaJ7IMdmEeGOoP2Ze98WBQ _U8B5IMdmEeGOoP2Ze98WBQ">
+            <outgoingTransitions xmi:id="_YboMgMdmEeGOoP2Ze98WBQ" specification="event3" target="_XzbkEMdmEeGOoP2Ze98WBQ"/>
           </vertices>
         </regions>
       </vertices>
@@ -58,7 +58,7 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_NElbwsdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_NElbw8dmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_NEmC0cdmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEmC0sdmEeGOoP2Ze98WBQ" x="40" y="91"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEmC0sdmEeGOoP2Ze98WBQ" x="40" y="80"/>
         </children>
         <children xmi:id="_XzhqsMdmEeGOoP2Ze98WBQ" type="State" element="_XzbkEMdmEeGOoP2Ze98WBQ">
           <children xsi:type="notation:DecorationNode" xmi:id="_XziRw8dmEeGOoP2Ze98WBQ" type="StateName">
@@ -74,40 +74,40 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_XziRwMdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_XziRwcdmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Xzi408dmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_XziRwsdmEeGOoP2Ze98WBQ" x="561" y="167"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_XziRwsdmEeGOoP2Ze98WBQ" x="480" y="155"/>
         </children>
-        <children xmi:id="_5l-RgMdmEeGOoP2Ze98WBQ" type="SubmachineState" element="_wr22MMdmEeGOoP2Ze98WBQ">
-          <children xsi:type="notation:DecorationNode" xmi:id="_5l-RhMdmEeGOoP2Ze98WBQ" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_5l-RhcdmEeGOoP2Ze98WBQ"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_5l-4kMdmEeGOoP2Ze98WBQ"/>
+        <children xmi:id="_LcSbgINTEeKkh9Axpu9oaQ" type="State" element="_LcFnMINTEeKkh9Axpu9oaQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_LcTCkINTEeKkh9Axpu9oaQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_LcTCkYNTEeKkh9Axpu9oaQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_LcTCkoNTEeKkh9Axpu9oaQ"/>
           </children>
-          <children xsi:type="notation:Compartment" xmi:id="_5l-4kcdmEeGOoP2Ze98WBQ" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_5l-4ksdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_5l-4k8dmEeGOoP2Ze98WBQ"/>
+          <children xsi:type="notation:Compartment" xmi:id="_LcTCk4NTEeKkh9Axpu9oaQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_LcTClINTEeKkh9Axpu9oaQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcTClYNTEeKkh9Axpu9oaQ"/>
             </children>
           </children>
-          <children xsi:type="notation:Compartment" xmi:id="_5l-4lMdmEeGOoP2Ze98WBQ" type="StateFigureCompartment">
-            <children xmi:id="_ABSvIMdnEeGOoP2Ze98WBQ" type="Region" element="_ABNPkMdnEeGOoP2Ze98WBQ">
-              <children xsi:type="notation:DecorationNode" xmi:id="_ABTWMMdnEeGOoP2Ze98WBQ" type="RegionName">
-                <styles xsi:type="notation:ShapeStyle" xmi:id="_ABTWMcdnEeGOoP2Ze98WBQ"/>
-                <layoutConstraint xsi:type="notation:Location" xmi:id="_ABTWMsdnEeGOoP2Ze98WBQ"/>
+          <children xsi:type="notation:Compartment" xmi:id="_LcTCloNTEeKkh9Axpu9oaQ" type="StateFigureCompartment">
+            <children xmi:id="_LcTpooNTEeKkh9Axpu9oaQ" type="Region" element="_LcKfsINTEeKkh9Axpu9oaQ">
+              <children xsi:type="notation:DecorationNode" xmi:id="_LcUQsINTEeKkh9Axpu9oaQ" type="RegionName">
+                <styles xsi:type="notation:ShapeStyle" xmi:id="_LcUQsYNTEeKkh9Axpu9oaQ"/>
+                <layoutConstraint xsi:type="notation:Location" xmi:id="_LcUQsoNTEeKkh9Axpu9oaQ"/>
               </children>
-              <children xsi:type="notation:Shape" xmi:id="_ABTWM8dnEeGOoP2Ze98WBQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
-                <children xmi:id="_TmozgMdmEeGOoP2Ze98WBQ" type="State" element="_Tmj7AMdmEeGOoP2Ze98WBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_TmozhMdmEeGOoP2Ze98WBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_TmozhcdmEeGOoP2Ze98WBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_TmozhsdmEeGOoP2Ze98WBQ"/>
+              <children xsi:type="notation:Shape" xmi:id="_LcUQs4NTEeKkh9Axpu9oaQ" type="RegionCompartment" fontName="Verdana" lineColor="4210752">
+                <children xmi:id="_OTjwUMdmEeGOoP2Ze98WBQ" type="State" element="_OTYKIMdmEeGOoP2Ze98WBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_OTjwVMdmEeGOoP2Ze98WBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_OTjwVcdmEeGOoP2Ze98WBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_OTkXYMdmEeGOoP2Ze98WBQ"/>
                   </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_Tmozh8dmEeGOoP2Ze98WBQ" type="StateTextCompartment">
-                    <children xsi:type="notation:Shape" xmi:id="_TmpakMdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_TmpakcdmEeGOoP2Ze98WBQ"/>
+                  <children xsi:type="notation:Compartment" xmi:id="_OTkXYcdmEeGOoP2Ze98WBQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_OTkXYsdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_OTkXY8dmEeGOoP2Ze98WBQ"/>
                     </children>
                   </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_TmpaksdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_TmozgcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_TmozgsdmEeGOoP2Ze98WBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Tmpak8dmEeGOoP2Ze98WBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Tmozg8dmEeGOoP2Ze98WBQ" x="138" y="49"/>
+                  <children xsi:type="notation:Compartment" xmi:id="_OTkXZMdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_OTjwUcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_OTjwUsdmEeGOoP2Ze98WBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_OTkXZcdmEeGOoP2Ze98WBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcU3wINTEeKkh9Axpu9oaQ" x="48" y="21"/>
                 </children>
                 <children xmi:id="_Rr-doMdmEeGOoP2Ze98WBQ" type="State" element="_Rr0soMdmEeGOoP2Ze98WBQ">
                   <children xsi:type="notation:DecorationNode" xmi:id="_Rr_EsMdmEeGOoP2Ze98WBQ" type="StateName">
@@ -123,39 +123,39 @@
                   <styles xsi:type="notation:ShapeStyle" xmi:id="_Rr-docdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
                   <styles xsi:type="notation:FontStyle" xmi:id="_Rr-dosdmEeGOoP2Ze98WBQ"/>
                   <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Rr_Et8dmEeGOoP2Ze98WBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Rr-do8dmEeGOoP2Ze98WBQ" x="30" y="109"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcU3wYNTEeKkh9Axpu9oaQ" x="53" y="148"/>
                 </children>
-                <children xmi:id="_OTjwUMdmEeGOoP2Ze98WBQ" type="State" element="_OTYKIMdmEeGOoP2Ze98WBQ">
-                  <children xsi:type="notation:DecorationNode" xmi:id="_OTjwVMdmEeGOoP2Ze98WBQ" type="StateName">
-                    <styles xsi:type="notation:ShapeStyle" xmi:id="_OTjwVcdmEeGOoP2Ze98WBQ"/>
-                    <layoutConstraint xsi:type="notation:Location" xmi:id="_OTkXYMdmEeGOoP2Ze98WBQ"/>
+                <children xmi:id="_TmozgMdmEeGOoP2Ze98WBQ" type="State" element="_Tmj7AMdmEeGOoP2Ze98WBQ">
+                  <children xsi:type="notation:DecorationNode" xmi:id="_TmozhMdmEeGOoP2Ze98WBQ" type="StateName">
+                    <styles xsi:type="notation:ShapeStyle" xmi:id="_TmozhcdmEeGOoP2Ze98WBQ"/>
+                    <layoutConstraint xsi:type="notation:Location" xmi:id="_TmozhsdmEeGOoP2Ze98WBQ"/>
                   </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_OTkXYcdmEeGOoP2Ze98WBQ" type="StateTextCompartment">
-                    <children xsi:type="notation:Shape" xmi:id="_OTkXYsdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_OTkXY8dmEeGOoP2Ze98WBQ"/>
+                  <children xsi:type="notation:Compartment" xmi:id="_Tmozh8dmEeGOoP2Ze98WBQ" type="StateTextCompartment">
+                    <children xsi:type="notation:Shape" xmi:id="_TmpakMdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+                      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_TmpakcdmEeGOoP2Ze98WBQ"/>
                     </children>
                   </children>
-                  <children xsi:type="notation:Compartment" xmi:id="_OTkXZMdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
-                  <styles xsi:type="notation:ShapeStyle" xmi:id="_OTjwUcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-                  <styles xsi:type="notation:FontStyle" xmi:id="_OTjwUsdmEeGOoP2Ze98WBQ"/>
-                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_OTkXZcdmEeGOoP2Ze98WBQ"/>
-                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_OTjwU8dmEeGOoP2Ze98WBQ" x="25" y="-18"/>
+                  <children xsi:type="notation:Compartment" xmi:id="_TmpaksdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
+                  <styles xsi:type="notation:ShapeStyle" xmi:id="_TmozgcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+                  <styles xsi:type="notation:FontStyle" xmi:id="_TmozgsdmEeGOoP2Ze98WBQ"/>
+                  <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Tmpak8dmEeGOoP2Ze98WBQ"/>
+                  <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcVe0INTEeKkh9Axpu9oaQ" x="161" y="88"/>
                 </children>
-                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_ABTWNMdnEeGOoP2Ze98WBQ"/>
+                <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcUQtINTEeKkh9Axpu9oaQ"/>
               </children>
-              <styles xsi:type="notation:ShapeStyle" xmi:id="_ABSvIcdnEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_ABSvIsdnEeGOoP2Ze98WBQ"/>
+              <styles xsi:type="notation:ShapeStyle" xmi:id="_LcTpo4NTEeKkh9Axpu9oaQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcTppINTEeKkh9Axpu9oaQ"/>
             </children>
           </children>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_5l-RgcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_5l-RgsdmEeGOoP2Ze98WBQ"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_5l-4lcdmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_5l-Rg8dmEeGOoP2Ze98WBQ" x="177" y="37" width="277" height="288"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_LcSbgYNTEeKkh9Axpu9oaQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_LcSbgoNTEeKkh9Axpu9oaQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_LcTpoINTEeKkh9Axpu9oaQ" name="isHorizontal" booleanValue="true"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcTpoYNTEeKkh9Axpu9oaQ" x="178" y="32" width="263" height="295"/>
         </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpMdmEeGOoP2Ze98WBQ"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_NEjmlcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpcdmEeGOoP2Ze98WBQ" x="220" y="10" width="701" height="400"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpcdmEeGOoP2Ze98WBQ" x="220" y="10" width="561" height="400"/>
     </children>
     <children xsi:type="notation:Shape" xmi:id="_NEmp48dmEeGOoP2Ze98WBQ" type="StatechartText" fontName="Verdana" lineColor="4210752">
       <children xsi:type="notation:DecorationNode" xmi:id="_NEmp5cdmEeGOoP2Ze98WBQ" type="StatechartName">
@@ -180,7 +180,7 @@
     <edges xmi:id="_QTbWUMdmEeGOoP2Ze98WBQ" type="Transition" element="_QTY6EMdmEeGOoP2Ze98WBQ" source="_NElbwcdmEeGOoP2Ze98WBQ" target="_OTjwUMdmEeGOoP2Ze98WBQ">
       <children xsi:type="notation:DecorationNode" xmi:id="_QTbWVMdmEeGOoP2Ze98WBQ" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_QTbWVcdmEeGOoP2Ze98WBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_QTbWVsdmEeGOoP2Ze98WBQ" x="-22" y="10"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_QTbWVsdmEeGOoP2Ze98WBQ" y="10"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_QTbWUcdmEeGOoP2Ze98WBQ" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_QTbWU8dmEeGOoP2Ze98WBQ" fontName="Verdana"/>
@@ -219,7 +219,7 @@
     <edges xmi:id="_Ybr24MdmEeGOoP2Ze98WBQ" type="Transition" element="_YboMgMdmEeGOoP2Ze98WBQ" source="_TmozgMdmEeGOoP2Ze98WBQ" target="_XzhqsMdmEeGOoP2Ze98WBQ">
       <children xsi:type="notation:DecorationNode" xmi:id="_Ybr25MdmEeGOoP2Ze98WBQ" type="TransitionExpression">
         <styles xsi:type="notation:ShapeStyle" xmi:id="_Ybr25cdmEeGOoP2Ze98WBQ"/>
-        <layoutConstraint xsi:type="notation:Location" xmi:id="_Ybr25sdmEeGOoP2Ze98WBQ" x="13" y="7"/>
+        <layoutConstraint xsi:type="notation:Location" xmi:id="_Ybr25sdmEeGOoP2Ze98WBQ" y="10"/>
       </children>
       <styles xsi:type="notation:ConnectorStyle" xmi:id="_Ybr24cdmEeGOoP2Ze98WBQ" lineColor="4210752"/>
       <styles xsi:type="notation:FontStyle" xmi:id="_Ybr248dmEeGOoP2Ze98WBQ" fontName="Verdana"/>

+ 26 - 26
test-plugins/org.yakindu.sct.refactoring.tests/testmodels/refactoring/grouping_states/before.sct

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:sgraph="http://www.yakindu.org/sct/sgraph/2.0.0">
-  <sgraph:Statechart xmi:id="_NEjmkMdmEeGOoP2Ze98WBQ" specification="interface :&#xA;in event event1&#xA;in event event2&#xA;in event event3" name="before_grouping">
+  <sgraph:Statechart xmi:id="_NEjmkMdmEeGOoP2Ze98WBQ" specification="interface :&#xA;in event event1&#xA;in event event2&#xA;in event event3&#xA;" name="group_states">
     <regions xmi:id="_NEjmk8dmEeGOoP2Ze98WBQ" name="main region">
       <vertices xsi:type="sgraph:Entry" xmi:id="_NEkNpsdmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_NEmC08dmEeGOoP2Ze98WBQ" target="_NEk0t8dmEeGOoP2Ze98WBQ"/>
@@ -8,17 +8,17 @@
       <vertices xsi:type="sgraph:State" xmi:id="_NEk0t8dmEeGOoP2Ze98WBQ" name="A" incomingTransitions="_NEmC08dmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_QTY6EMdmEeGOoP2Ze98WBQ" specification="event1" target="_OTYKIMdmEeGOoP2Ze98WBQ"/>
       </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_OTYKIMdmEeGOoP2Ze98WBQ" name="B" incomingTransitions="_QTY6EMdmEeGOoP2Ze98WBQ">
+      <vertices xsi:type="sgraph:State" xmi:id="_XzbkEMdmEeGOoP2Ze98WBQ" name="E" incomingTransitions="_YboMgMdmEeGOoP2Ze98WBQ"/>
+      <vertices xsi:type="sgraph:State" xmi:id="_OTYKIMdmEeGOoP2Ze98WBQ" specification="" name="B" incomingTransitions="_QTY6EMdmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_SJMlIMdmEeGOoP2Ze98WBQ" specification="event2" target="_Rr0soMdmEeGOoP2Ze98WBQ"/>
         <outgoingTransitions xmi:id="_U8B5IMdmEeGOoP2Ze98WBQ" specification="" target="_Tmj7AMdmEeGOoP2Ze98WBQ"/>
       </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_Rr0soMdmEeGOoP2Ze98WBQ" name="C" incomingTransitions="_SJMlIMdmEeGOoP2Ze98WBQ">
+      <vertices xsi:type="sgraph:State" xmi:id="_Rr0soMdmEeGOoP2Ze98WBQ" specification="" name="C" incomingTransitions="_SJMlIMdmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_UaJ7IMdmEeGOoP2Ze98WBQ" specification="" target="_Tmj7AMdmEeGOoP2Ze98WBQ"/>
       </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_Tmj7AMdmEeGOoP2Ze98WBQ" name="D" incomingTransitions="_UaJ7IMdmEeGOoP2Ze98WBQ _U8B5IMdmEeGOoP2Ze98WBQ">
+      <vertices xsi:type="sgraph:State" xmi:id="_Tmj7AMdmEeGOoP2Ze98WBQ" specification="" name="D" incomingTransitions="_UaJ7IMdmEeGOoP2Ze98WBQ _U8B5IMdmEeGOoP2Ze98WBQ">
         <outgoingTransitions xmi:id="_YboMgMdmEeGOoP2Ze98WBQ" specification="event3" target="_XzbkEMdmEeGOoP2Ze98WBQ"/>
       </vertices>
-      <vertices xsi:type="sgraph:State" xmi:id="_XzbkEMdmEeGOoP2Ze98WBQ" name="E" incomingTransitions="_YboMgMdmEeGOoP2Ze98WBQ"/>
     </regions>
   </sgraph:Statechart>
   <notation:Diagram xmi:id="_NEjmkcdmEeGOoP2Ze98WBQ" type="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor" element="_NEjmkMdmEeGOoP2Ze98WBQ" measurementUnit="Pixel">
@@ -54,7 +54,23 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_NElbwsdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_NElbw8dmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_NEmC0cdmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEmC0sdmEeGOoP2Ze98WBQ" x="40" y="80"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEmC0sdmEeGOoP2Ze98WBQ" x="40" y="105"/>
+        </children>
+        <children xmi:id="_XzhqsMdmEeGOoP2Ze98WBQ" type="State" element="_XzbkEMdmEeGOoP2Ze98WBQ">
+          <children xsi:type="notation:DecorationNode" xmi:id="_XziRw8dmEeGOoP2Ze98WBQ" type="StateName">
+            <styles xsi:type="notation:ShapeStyle" xmi:id="_XziRxMdmEeGOoP2Ze98WBQ"/>
+            <layoutConstraint xsi:type="notation:Location" xmi:id="_XziRxcdmEeGOoP2Ze98WBQ"/>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_XziRxsdmEeGOoP2Ze98WBQ" type="StateTextCompartment">
+            <children xsi:type="notation:Shape" xmi:id="_Xzi40MdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
+              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Xzi40cdmEeGOoP2Ze98WBQ"/>
+            </children>
+          </children>
+          <children xsi:type="notation:Compartment" xmi:id="_Xzi40sdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
+          <styles xsi:type="notation:ShapeStyle" xmi:id="_XziRwMdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
+          <styles xsi:type="notation:FontStyle" xmi:id="_XziRwcdmEeGOoP2Ze98WBQ"/>
+          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Xzi408dmEeGOoP2Ze98WBQ"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_XziRwsdmEeGOoP2Ze98WBQ" x="493" y="169" width="40" height="58"/>
         </children>
         <children xmi:id="_OTjwUMdmEeGOoP2Ze98WBQ" type="State" element="_OTYKIMdmEeGOoP2Ze98WBQ">
           <children xsi:type="notation:DecorationNode" xmi:id="_OTjwVMdmEeGOoP2Ze98WBQ" type="StateName">
@@ -70,7 +86,7 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_OTjwUcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_OTjwUsdmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_OTkXZcdmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_OTjwU8dmEeGOoP2Ze98WBQ" x="233" y="87"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcU3wINTEeKkh9Axpu9oaQ" x="223" y="103"/>
         </children>
         <children xmi:id="_Rr-doMdmEeGOoP2Ze98WBQ" type="State" element="_Rr0soMdmEeGOoP2Ze98WBQ">
           <children xsi:type="notation:DecorationNode" xmi:id="_Rr_EsMdmEeGOoP2Ze98WBQ" type="StateName">
@@ -86,7 +102,7 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_Rr-docdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_Rr-dosdmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Rr_Et8dmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Rr-do8dmEeGOoP2Ze98WBQ" x="238" y="214"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcU3wYNTEeKkh9Axpu9oaQ" x="229" y="239"/>
         </children>
         <children xmi:id="_TmozgMdmEeGOoP2Ze98WBQ" type="State" element="_Tmj7AMdmEeGOoP2Ze98WBQ">
           <children xsi:type="notation:DecorationNode" xmi:id="_TmozhMdmEeGOoP2Ze98WBQ" type="StateName">
@@ -102,28 +118,12 @@
           <styles xsi:type="notation:ShapeStyle" xmi:id="_TmozgcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
           <styles xsi:type="notation:FontStyle" xmi:id="_TmozgsdmEeGOoP2Ze98WBQ"/>
           <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Tmpak8dmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Tmozg8dmEeGOoP2Ze98WBQ" x="346" y="154"/>
-        </children>
-        <children xmi:id="_XzhqsMdmEeGOoP2Ze98WBQ" type="State" element="_XzbkEMdmEeGOoP2Ze98WBQ">
-          <children xsi:type="notation:DecorationNode" xmi:id="_XziRw8dmEeGOoP2Ze98WBQ" type="StateName">
-            <styles xsi:type="notation:ShapeStyle" xmi:id="_XziRxMdmEeGOoP2Ze98WBQ"/>
-            <layoutConstraint xsi:type="notation:Location" xmi:id="_XziRxcdmEeGOoP2Ze98WBQ"/>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_XziRxsdmEeGOoP2Ze98WBQ" type="StateTextCompartment">
-            <children xsi:type="notation:Shape" xmi:id="_Xzi40MdmEeGOoP2Ze98WBQ" type="StateTextCompartmentExpression" fontName="Verdana" lineColor="4210752">
-              <layoutConstraint xsi:type="notation:Bounds" xmi:id="_Xzi40cdmEeGOoP2Ze98WBQ"/>
-            </children>
-          </children>
-          <children xsi:type="notation:Compartment" xmi:id="_Xzi40sdmEeGOoP2Ze98WBQ" type="StateFigureCompartment"/>
-          <styles xsi:type="notation:ShapeStyle" xmi:id="_XziRwMdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15981773" lineColor="12632256"/>
-          <styles xsi:type="notation:FontStyle" xmi:id="_XziRwcdmEeGOoP2Ze98WBQ"/>
-          <styles xsi:type="notation:BooleanValueStyle" xmi:id="_Xzi408dmEeGOoP2Ze98WBQ"/>
-          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_XziRwsdmEeGOoP2Ze98WBQ" x="480" y="155"/>
+          <layoutConstraint xsi:type="notation:Bounds" xmi:id="_LcVe0INTEeKkh9Axpu9oaQ" x="337" y="167"/>
         </children>
         <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpMdmEeGOoP2Ze98WBQ"/>
       </children>
       <styles xsi:type="notation:ShapeStyle" xmi:id="_NEjmlcdmEeGOoP2Ze98WBQ" fontName="Verdana" fillColor="15790320" lineColor="12632256"/>
-      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpcdmEeGOoP2Ze98WBQ" x="220" y="10" width="561" height="400"/>
+      <layoutConstraint xsi:type="notation:Bounds" xmi:id="_NEkNpcdmEeGOoP2Ze98WBQ" x="220" y="10" width="584" height="400"/>
     </children>
     <children xsi:type="notation:Shape" xmi:id="_NEmp48dmEeGOoP2Ze98WBQ" type="StatechartText" fontName="Verdana" lineColor="4210752">
       <children xsi:type="notation:DecorationNode" xmi:id="_NEmp5cdmEeGOoP2Ze98WBQ" type="StatechartName">