Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tests/org.eclipse.etrice.ui.behavior.tests/src/org/eclipse/etrice/ui/behavior/commands/TestStateMachineBase.java')
-rw-r--r--tests/org.eclipse.etrice.ui.behavior.tests/src/org/eclipse/etrice/ui/behavior/commands/TestStateMachineBase.java151
1 files changed, 151 insertions, 0 deletions
diff --git a/tests/org.eclipse.etrice.ui.behavior.tests/src/org/eclipse/etrice/ui/behavior/commands/TestStateMachineBase.java b/tests/org.eclipse.etrice.ui.behavior.tests/src/org/eclipse/etrice/ui/behavior/commands/TestStateMachineBase.java
new file mode 100644
index 000000000..88e473fb5
--- /dev/null
+++ b/tests/org.eclipse.etrice.ui.behavior.tests/src/org/eclipse/etrice/ui/behavior/commands/TestStateMachineBase.java
@@ -0,0 +1,151 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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
+ *******************************************************************************/
+
+package org.eclipse.etrice.ui.behavior.commands;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.etrice.core.room.ActorClass;
+import org.eclipse.etrice.core.room.ChoicePoint;
+import org.eclipse.etrice.core.room.InitialTransition;
+import org.eclipse.etrice.core.room.State;
+import org.eclipse.etrice.core.room.StateGraph;
+import org.eclipse.etrice.core.room.StateGraphItem;
+import org.eclipse.etrice.core.room.TrPoint;
+import org.eclipse.etrice.core.room.Transition;
+import org.eclipse.etrice.tests.base.TestBase;
+import org.eclipse.etrice.ui.behavior.support.StateSupport;
+import org.eclipse.etrice.ui.behavior.support.TrPointSupport;
+import org.eclipse.graphiti.mm.algorithms.Ellipse;
+import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
+import org.eclipse.graphiti.mm.algorithms.Rectangle;
+import org.eclipse.graphiti.mm.algorithms.RoundedRectangle;
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.mm.pictograms.Shape;
+import org.eclipse.graphiti.services.Graphiti;
+
+/**
+ * base class for state machine tests
+ *
+ * @author Henrik Rentz-Reichert - API and initial contribution
+ */
+public abstract class TestStateMachineBase extends TestBase {
+
+ /**
+ * test general conditions for state graphs
+ * @param diagram the diagram
+ * @param sg the state graph to test
+ */
+ protected void testStateGraph(Diagram diagram, StateGraph sg) {
+ EObject bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(diagram);
+ assertTrue("diagram bo is actor class", bo instanceof ActorClass);
+
+ ActorClass ac = (ActorClass) bo;
+
+ boolean hasInitialTransition = false;
+ for (Transition trans : sg.getTransitions()) {
+ if (trans instanceof InitialTransition) {
+ hasInitialTransition = true;
+ break;
+ }
+ }
+ List<PictogramElement> elements = Graphiti.getLinkService().getPictogramElements(diagram, sg);
+ assertEquals("PEs for our state graph: sg and initial point", hasInitialTransition? 2:1, elements.size());
+
+ for (State s : sg.getStates()) {
+ elements = Graphiti.getLinkService().getPictogramElements(diagram, s);
+ assertEquals("PEs for our state", 1, elements.size());
+ assertTrue("PE is shape", elements.get(0) instanceof Shape);
+ checkStateGAs(ac, s, (Shape) elements.get(0));
+ }
+
+ for (ChoicePoint cp : sg.getChPoints()) {
+ elements = Graphiti.getLinkService().getPictogramElements(diagram, cp);
+ assertEquals("PEs for our cp", 1, elements.size());
+ assertTrue("PE is shape", elements.get(0) instanceof Shape);
+ }
+
+ for (TrPoint tp : sg.getTrPoints()) {
+ elements = Graphiti.getLinkService().getPictogramElements(diagram, tp);
+ assertEquals("PEs for our tp", 1, elements.size());
+ assertTrue("PE is shape", elements.get(0) instanceof Shape);
+ checkTrpGAs(ac, tp, (Shape) elements.get(0));
+ }
+
+ for (Transition trans : sg.getTransitions()) {
+ elements = Graphiti.getLinkService().getPictogramElements(diagram, trans);
+ assertEquals("PEs for our transition", 1, elements.size());
+ }
+ }
+
+ /**
+ * test general conditions for states
+ *
+ * @param ac actor class
+ * @param s the state to test
+ * @param shape the state's shape
+ */
+ private void checkStateGAs(ActorClass ac, State s, Shape shape) {
+ assertNotNull("ga is there (invisible rectangle)", shape.getGraphicsAlgorithm());
+ assertTrue("ga is rounded rectangle", shape.getGraphicsAlgorithm() instanceof Rectangle);
+ assertFalse("ga is invisible", shape.getGraphicsAlgorithm().getFilled());
+ assertFalse("ga is invisible", shape.getGraphicsAlgorithm().getLineVisible());
+ assertEquals("border rect", 1, shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().size());
+ GraphicsAlgorithm borderRect = shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
+ assertTrue("border rect is rounded rectangle", borderRect instanceof RoundedRectangle);
+ if (isInherited(ac,s))
+ assertTrue("border rect background", isEqual(borderRect.getForeground(), StateSupport.INHERITED_COLOR));
+ else
+ assertTrue("border rect background", isEqual(borderRect.getForeground(), StateSupport.LINE_COLOR));
+ }
+
+ /**
+ * test general conditions for transition points
+ *
+ * @param ac actor class
+ * @param tp the transition point to test
+ * @param shape the state's shape
+ */
+ private void checkTrpGAs(ActorClass ac, TrPoint tp, Shape shape) {
+ assertNotNull("ga is there (invisible rectangle)", shape.getGraphicsAlgorithm());
+ assertTrue("ga is ellipse", shape.getGraphicsAlgorithm() instanceof Rectangle);
+ assertFalse("ga is invisible", shape.getGraphicsAlgorithm().getFilled());
+ assertFalse("ga is invisible", shape.getGraphicsAlgorithm().getLineVisible());
+ assertEquals("border rect", 1, shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().size());
+ GraphicsAlgorithm borderRect = shape.getGraphicsAlgorithm().getGraphicsAlgorithmChildren().get(0);
+ assertTrue("border rect is rounded rectangle", borderRect instanceof Ellipse);
+ if (isInherited(ac,tp))
+ assertTrue("border rect background", isEqual(borderRect.getForeground(), TrPointSupport.INHERITED_COLOR));
+ else
+ assertTrue("border rect background", isEqual(borderRect.getForeground(), TrPointSupport.DARK_COLOR));
+ }
+
+ /**
+ * compute inheritance
+ *
+ * @param ac actor class
+ * @param item state graph item
+ * @return true if state graph item is not owned by the given actor class
+ */
+ private boolean isInherited(ActorClass ac, StateGraphItem item) {
+ EObject owner = item.eContainer();
+ while (owner!=null) {
+ if (owner instanceof ActorClass)
+ break;
+ owner = owner.eContainer();
+ }
+ return ac!=owner;
+ }
+}

Back to the top