blob: 91da39d44f7ac9131a89f701e9ac75506bcd7131 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2017 THALES GLOBAL SERVICES.
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.tests.swtbot;
import org.eclipse.core.internal.runtime.InternalPlatform;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.AbstractDEdgeNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeBeginNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeEndNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeEditPart;
import org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase;
import org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession;
import org.eclipse.sirius.tests.swtbot.support.api.business.UIResource;
import org.eclipse.sirius.tests.swtbot.support.api.condition.CheckEdgeLabelVisibility;
import org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor;
import org.eclipse.swt.SWTException;
import org.eclipse.swtbot.eclipse.finder.waits.Conditions;
import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefConnectionEditPart;
import org.eclipse.swtbot.eclipse.gef.finder.widgets.SWTBotGefEditPart;
import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
import org.junit.Assert;
import junit.framework.AssertionFailedError;
/**
* Tests for edges with multiple labels.
*
* @author smonnier
*/
@SuppressWarnings("restriction")
public class EdgeWithMultipleLabelsTest extends AbstractSiriusSwtBotGefTestCase {
private static final String MODEL_FILE = "doremi_1551.ecore";
private static final String SESSION_FILE = "doremi_1551.aird";
private static final String VSM_FILE = "doremi_1551.odesign";
private static final String DATA_UNIT_DIR = "data/unit/edgeWithMultipleLabels/";
private static final String REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME = "doremi_1551 Relation Based Straight";
private static final String REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME = "doremi_1551 Element Based Straight";
private static final String REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME = "doremi_1551 Relation Based Manhattan";
private static final String REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME = "doremi_1551 Element Based Manhattan";
private static final String REPRESENTATION_DESC_1551_RB_TREE_NAME = "doremi_1551 Relation Based Tree";
private static final String REPRESENTATION_DESC_1551_EB_TREE_NAME = "doremi_1551 Element Based Tree";
private static final String EDGE_RB_CREATION_TOOL_NAME = "Create EReference RB";
private static final String EDGE_EB_CREATION_TOOL_NAME = "Create EReference EB";
private SWTBotSiriusDiagramEditor editor;
private UIResource sessionAirdResource;
private UILocalSession localSession;
private ILogListener listener;
@Override
protected void onSetUpBeforeClosingWelcomePage() throws Exception {
copyFileToTestProject(Activator.PLUGIN_ID, DATA_UNIT_DIR, MODEL_FILE, SESSION_FILE, VSM_FILE);
}
@Override
protected void onSetUpAfterOpeningDesignerPerspective() throws Exception {
sessionAirdResource = new UIResource(designerProject, SESSION_FILE);
localSession = designerPerspective.openSessionFromFile(sessionAirdResource, true);
}
private void openDiagram(String name) {
editor = (SWTBotSiriusDiagramEditor) openRepresentation(localSession.getOpenedSession(), name, name, DDiagram.class);
}
private boolean error;
private synchronized boolean doesASpecificErrorOccurs() {
return error;
}
private synchronized void errorOccurs() {
error = true;
}
/**
*
* Test to create a relation based edge and validated that there are
* multiple labels.
*
*/
public void testCreateRelationBasedEdgeStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateCreateRelationBasedEdge();
}
/**
*
* Test to create a relation based edge and validated that there are
* multiple labels.
*
*/
public void testCreateRelationBasedEdgeManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateCreateRelationBasedEdge();
}
/**
*
* Test to create a relation based edge and validated that there are
* multiple labels.
*
*/
public void testCreateRelationBasedEdgeTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateCreateRelationBasedEdge();
}
private void validateCreateRelationBasedEdge() {
addWarningListener();
// Creates the edge
createReference("EC2", DNodeEditPart.class, "EC4", DNodeEditPart.class, EDGE_RB_CREATION_TOOL_NAME);
getSingleDEdgeTo("EC4");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("EC2 begin"));
Assert.assertNotNull(editor.getEditPart("EC2 center"));
Assert.assertNotNull(editor.getEditPart("EC2 end"));
// Validates undo
undo(EDGE_RB_CREATION_TOOL_NAME);
try {
getSingleDEdgeTo("EC4");
fail("The edge creation should have been undone");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
redo(EDGE_RB_CREATION_TOOL_NAME);
getSingleDEdgeTo("EC4");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("EC2 begin"));
Assert.assertNotNull(editor.getEditPart("EC2 center"));
Assert.assertNotNull(editor.getEditPart("EC2 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to create an element based edge and validated that there are
* multiple labels.
*
*/
public void testCreateElementBasedEdgeStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateCreateElementBasedEdge();
}
/**
*
* Test to create an element based edge and validated that there are
* multiple labels.
*
*/
public void testCreateElementBasedEdgeManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateCreateElementBasedEdge();
}
/**
*
* Test to create an element based edge and validated that there are
* multiple labels.
*
*/
public void testCreateElementBasedEdgeTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateCreateElementBasedEdge();
}
private void validateCreateElementBasedEdge() {
addWarningListener();
// Create the edge
createReference("EC1", DNodeEditPart.class, "EC3", DNodeEditPart.class, EDGE_EB_CREATION_TOOL_NAME);
getSingleDEdgeTo("EC3");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("newEReference2 begin"));
Assert.assertNotNull(editor.getEditPart("newEReference2 center"));
Assert.assertNotNull(editor.getEditPart("newEReference2 end"));
// Validates undo
undo(EDGE_EB_CREATION_TOOL_NAME);
try {
getSingleDEdgeTo("EC3");
fail("The edge creation should have been undone");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
redo(EDGE_EB_CREATION_TOOL_NAME);
getSingleDEdgeTo("EC3");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("newEReference2 begin"));
Assert.assertNotNull(editor.getEditPart("newEReference2 center"));
Assert.assertNotNull(editor.getEditPart("newEReference2 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to delete a relation based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteRelationBasedEdgeStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateDeleteRelationBasedEdge();
}
/**
*
* Test to delete a relation based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteRelationBasedEdgeManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateDeleteRelationBasedEdge();
}
/**
*
* Test to delete a relation based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteRelationBasedEdgeTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateDeleteRelationBasedEdge();
}
private void validateDeleteRelationBasedEdge() {
addWarningListener();
editor.select(getSingleDEdgeFrom("EC1"));
deleteSelectedElement();
try {
getSingleDEdgeFrom("EC1");
fail("No edge should be found after beeing deleted");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
// Validates undo
undo("Delete");
getSingleDEdgeFrom("EC1");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("EC1 begin"));
Assert.assertNotNull(editor.getEditPart("EC1 center"));
Assert.assertNotNull(editor.getEditPart("EC1 end"));
redo("Delete");
try {
getSingleDEdgeFrom("EC1");
fail("No edge should be found after beeing deleted");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to delete an element based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteElementBasedEdgeStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateDeleteElementBasedEdge();
}
/**
*
* Test to delete an element based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteElementBasedEdgeManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateDeleteElementBasedEdge();
}
/**
*
* Test to delete an element based edge and validated that there are
* multiple labels.
*
*/
public void testDeleteElementBasedEdgeTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateDeleteElementBasedEdge();
}
private void validateDeleteElementBasedEdge() {
addWarningListener();
editor.select(getSingleDEdgeFrom("EC1"));
deleteSelectedElement();
try {
getSingleDEdgeFrom("EC1");
fail("No edge should be found after beeing deleted");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
// Validates undo
undo("Delete");
getSingleDEdgeFrom("EC1");
// Checks multiple label existence
Assert.assertNotNull(editor.getEditPart("ec2 begin"));
Assert.assertNotNull(editor.getEditPart("ec2 center"));
Assert.assertNotNull(editor.getEditPart("ec2 end"));
redo("Delete");
try {
getSingleDEdgeFrom("EC1");
fail("No edge should be found after beeing deleted");
} catch (AssertionFailedError e) {
// Nothing, it has to fail in the try block
}
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void testShowHideRelationBasedEdgeLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateShowHideRelationBasedEdgeLabel();
}
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void testShowHideRelationBasedEdgeLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateShowHideRelationBasedEdgeLabel();
}
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void testShowHideRelationBasedEdgeLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateShowHideRelationBasedEdgeLabel();
}
private void validateShowHideRelationBasedEdgeLabel() {
addWarningListener();
// Hide the label
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("EC1 -> EC3").getNode("label").select().toggleCheck();
bot.button("OK").click();
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 begin"));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 center", false));
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 end"));
// Show the label
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("EC1 -> EC3").getNode("label").select().toggleCheck();
bot.button("OK").click();
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 begin"));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 center", true));
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void testShowHideElementBasedEdgeLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateShowHideElementBasedEdgeLabel();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void testShowHideElementBasedEdgeLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateShowHideElementBasedEdgeLabel();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void testShowHideElementBasedEdgeLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateShowHideElementBasedEdgeLabel();
}
private void validateShowHideElementBasedEdgeLabel() {
addWarningListener();
// Hide the label
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("ec2 : EC2").getNode("label").select().toggleCheck();
bot.button("OK").click();
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 begin"));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 center", false));
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 end"));
// Show the label
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("ec2 : EC2").getNode("label").select().toggleCheck();
bot.button("OK").click();
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 begin"));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 center", true));
// bot.waitUntil(new CheckEdgeLabelIsHidden(editor, "EC1 end"));
removeWarningListenerAndCheckWarning();
}
// ////////////////////////////////////////////////////////////////////////////
// Version where the 3 labels are displayed in the Show/Hide dialog allowing
// to hide label individually
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void _testShowHideRelationBasedEdge3LabelsStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateShowHideRelationBasedEdge3Labels();
}
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void _testShowHideRelationBasedEdge3LabelsManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateShowHideRelationBasedEdge3Labels();
}
/**
*
* Test to hide and show a relation based edge labels.
*
*/
public void _testShowHideRelationBasedEdge3LabelsTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateShowHideRelationBasedEdge3Labels();
}
private void validateShowHideRelationBasedEdge3Labels() {
addWarningListener();
// Hide the label begin and center
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 begin label").select().toggleCheck();
bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 center label").select().toggleCheck();
// bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 end
// label").select().toggleCheck();
bot.button("OK").click();
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 begin", false));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 center", false));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 end", true));
// Toggle visibility of all labels
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 begin label").select().toggleCheck();
bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 center label").select().toggleCheck();
bot.tree().getTreeItem("EC1 -> EC3").getNode("EC1 end label").select().toggleCheck();
bot.button("OK").click();
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 begin", true));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 center", true));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "EC1 end", false));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void _testShowHideElementBasedEdge3LabelsStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateShowHideElementBasedEdge3Labels();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void _testShowHideElementBasedEdge3LabelsManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateShowHideElementBasedEdge3Labels();
}
/**
*
* Test to hide and show an element based edge labels.
*
*/
public void _testShowHideElementBasedEdge3LabelsTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateShowHideElementBasedEdge3Labels();
}
private void validateShowHideElementBasedEdge3Labels() {
addWarningListener();
// Hide the label begin and center
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 begin label").select().toggleCheck();
bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 center label").select().toggleCheck();
// bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 end
// label").select().toggleCheck();
bot.button("OK").click();
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 begin", false));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 center", false));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 end", true));
// Toggle visibility of all labels
editor.bot().toolbarButtonWithTooltip("Show/Hide").click();
bot.waitUntilWidgetAppears(Conditions.shellIsActive("Diagram elements visibility"));
bot.text().setText("*label");
bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 begin label").select().toggleCheck();
bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 center label").select().toggleCheck();
bot.tree().getTreeItem("ec2 : EC2").getNode("ec2 end label").select().toggleCheck();
bot.button("OK").click();
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 begin", true));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 center", true));
bot.waitUntil(new CheckEdgeLabelVisibility(editor, "ec2 end", false));
removeWarningListenerAndCheckWarning();
}
// ////////////////////////////////////////////////////////////////////////////
/**
*
* Test to select a relation based edge begin label.
*
*/
public void testSelectRelationBasedEdgeBeginLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateSelectRelationBasedEdgeBeginLabel();
}
/**
*
* Test to select a relation based edge begin label.
*
*/
public void testSelectRelationBasedEdgeBeginLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateSelectRelationBasedEdgeBeginLabel();
}
/**
*
* Test to select a relation based edge begin label.
*
*/
public void testSelectRelationBasedEdgeBeginLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateSelectRelationBasedEdgeBeginLabel();
}
private void validateSelectRelationBasedEdgeBeginLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 begin"));
validateSelectedLabel("EC1 begin", DEdgeBeginNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to select a relation based edge center label.
*
*/
public void testSelectRelationBasedEdgeCenterLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateSelectRelationBasedEdgeCenterLabel();
}
/**
*
* Test to select a relation based edge center label.
*
*/
public void testSelectRelationBasedEdgeCenterLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateSelectRelationBasedEdgeCenterLabel();
}
/**
*
* Test to select a relation based edge center label.
*
*/
public void testSelectRelationBasedEdgeCenterLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateSelectRelationBasedEdgeCenterLabel();
}
private void validateSelectRelationBasedEdgeCenterLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 center"));
validateSelectedLabel("EC1 center", DEdgeNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to select a relation based edge end label.
*
*/
public void testSelectRelationBasedEdgeEndLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateSelectRelationBasedEdgeEndLabel();
}
/**
*
* Test to select a relation based edge end label.
*
*/
public void testSelectRelationBasedEdgeEndLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateSelectRelationBasedEdgeEndLabel();
}
/**
*
* Test to select a relation based edge end label.
*
*/
public void testSelectRelationBasedEdgeEndLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateSelectRelationBasedEdgeEndLabel();
}
private void validateSelectRelationBasedEdgeEndLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 end"));
validateSelectedLabel("EC1 end", DEdgeEndNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to select an element based edge begin label.
*
*/
public void testSelectElementBasedEdgeBeginLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateSelectElementBasedEdgeBeginLabel();
}
/**
*
* Test to select an element based edge begin label.
*
*/
public void testSelectElementBasedEdgeBeginLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateSelectElementBasedEdgeBeginLabel();
}
/**
*
* Test to select an element based edge begin label.
*
*/
public void testSelectElementBasedEdgeBeginLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateSelectElementBasedEdgeBeginLabel();
}
private void validateSelectElementBasedEdgeBeginLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 begin"));
validateSelectedLabel("ec2 begin", DEdgeBeginNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to select an element based edge center label.
*
*/
public void testSelectElementBasedEdgeCenterLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateSelectElementBasedEdgeCenterLabel();
}
/**
*
* Test to select an element based edge center label.
*
*/
public void testSelectElementBasedEdgeCenterLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateSelectElementBasedEdgeCenterLabel();
}
/**
*
* Test to select an element based edge center label.
*
*/
public void testSelectElementBasedEdgeCenterLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateSelectElementBasedEdgeCenterLabel();
}
private void validateSelectElementBasedEdgeCenterLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 center"));
validateSelectedLabel("ec2 center", DEdgeNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test to select an element based edge end label.
*
*/
public void testSelectElementBasedEdgeEndLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateSelectElementBasedEdgeEndLabel();
}
/**
*
* Test to select an element based edge end label.
*
*/
public void testSelectElementBasedEdgeEndLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateSelectElementBasedEdgeEndLabel();
}
/**
*
* Test to select an element based edge end label.
*
*/
public void testSelectElementBasedEdgeEndLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateSelectElementBasedEdgeEndLabel();
}
private void validateSelectElementBasedEdgeEndLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 end"));
validateSelectedLabel("ec2 end", DEdgeEndNameEditPart.class);
editor.select(editor.getSelectableEditPart("EC2"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeBeginLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeBeginLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeBeginLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
/**
* The direct edit on begin label is not allowed, so check that it fails.
* The default SWTBot timeOut is reduced to consume less time.
*/
private void validateDirectEditRelationBasedEdgeBeginLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 begin"));
boolean directEdit = true;
final long oldTimeout = SWTBotPreferences.TIMEOUT;
try {
SWTBotPreferences.TIMEOUT = 1000;
directEdit = editor.directEdgeEditTypeBeginLabel("EC1", "EC3", "EClass1");
} catch (SWTException e) {
directEdit = false;
} finally {
SWTBotPreferences.TIMEOUT = oldTimeout;
Assert.assertFalse("The direct edit is only available on center label.", directEdit);
}
validateSelectedLabel("EC1 begin", DEdgeBeginNameEditPart.class);
Assert.assertNotNull(editor.getEditPart("EC1 center"));
Assert.assertNotNull(editor.getEditPart("EC1 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeCenterLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
validateDirectEditRelationBasedEdgeCenterLabel();
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeCenterLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
validateDirectEditRelationBasedEdgeCenterLabel();
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeCenterLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
validateDirectEditRelationBasedEdgeCenterLabel();
}
private void validateDirectEditRelationBasedEdgeCenterLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 center"));
editor.directEdgeEditTypeCenterLabel("EC1", "EC3", "EClass1");
Assert.assertNotNull(editor.getEditPart("EClass1 begin"));
validateSelectedLabel("EClass1 center", DEdgeNameEditPart.class);
Assert.assertNotNull(editor.getEditPart("EClass1 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeEndLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_RB_STRAIGHT_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeEndLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeEndLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_RB_MANHATTAN_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeEndLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on a relation based edge begin label.
*
*/
public void testDirectEditRelationBasedEdgeEndLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_RB_TREE_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditRelationBasedEdgeEndLabel();
setErrorCatchActive(true);
}
private void validateDirectEditRelationBasedEdgeEndLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("EC1 end"));
boolean directEdit = true;
try {
directEdit = editor.directEdgeEditTypeEndLabel("EC1", "EC3", "EClass1");
} catch (SWTException e) {
directEdit = false;
} finally {
Assert.assertFalse("The direct edit is only available on center label.", directEdit);
}
Assert.assertNotNull(editor.getEditPart("EC1 begin"));
Assert.assertNotNull(editor.getEditPart("EC1 center"));
validateSelectedLabel("EC1 end", DEdgeEndNameEditPart.class);
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on an element based edge begin label.
*
*/
public void testDirectEditElementBasedEdgeBeginLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on an element based edge begin label.
*
*/
public void testDirectEditElementBasedEdgeBeginLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on an element based edge begin label.
*
*/
public void testDirectEditElementBasedEdgeBeginLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeBeginLabel();
setErrorCatchActive(true);
}
private void validateDirectEditElementBasedEdgeBeginLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 begin"));
boolean directEdit = true;
try {
directEdit = editor.directEdgeEditTypeBeginLabel("EC1", "EC2", "eclass2");
} catch (SWTException e) {
directEdit = false;
} finally {
Assert.assertFalse("The direct edit is only available on center label.", directEdit);
}
validateSelectedLabel("ec2 begin", DEdgeBeginNameEditPart.class);
Assert.assertNotNull(editor.getEditPart("ec2 center"));
Assert.assertNotNull(editor.getEditPart("ec2 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on an element based edge center label.
*
*/
public void testDirectEditElementBasedEdgeCenterLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
validateDirectEditElementBasedEdgeCenterLabel();
}
/**
*
* Test direct edit on an element based edge center label.
*
*/
public void testDirectEditElementBasedEdgeCenterLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
validateDirectEditElementBasedEdgeCenterLabel();
}
/**
*
* Test direct edit on an element based edge center label.
*
*/
public void testDirectEditElementBasedEdgeCenterLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
validateDirectEditElementBasedEdgeCenterLabel();
}
private void validateDirectEditElementBasedEdgeCenterLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 center"));
editor.directEdgeEditTypeCenterLabel("EC1", "EC2", "eclass2");
Assert.assertNotNull(editor.getEditPart("eclass2 begin"));
validateSelectedLabel("eclass2 center", DEdgeNameEditPart.class);
Assert.assertNotNull(editor.getEditPart("eclass2 end"));
removeWarningListenerAndCheckWarning();
}
/**
*
* Test direct edit on an element based edge end label.
*
*/
public void testDirectEditElementBasedEdgeEndLabelStraight() {
openDiagram(REPRESENTATION_DESC_1551_EB_STRAIGHT_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeEndLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on an element based edge end label.
*
*/
public void testDirectEditElementBasedEdgeEndLabelManhattan() {
openDiagram(REPRESENTATION_DESC_1551_EB_MANHATTAN_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeEndLabel();
setErrorCatchActive(true);
}
/**
*
* Test direct edit on an element based edge end label.
*
*/
public void testDirectEditElementBasedEdgeEndLabelTree() {
openDiagram(REPRESENTATION_DESC_1551_EB_TREE_NAME);
// Disables the "Error Log" view because if the test is ok we have an
// error
setErrorCatchActive(false);
validateDirectEditElementBasedEdgeEndLabel();
setErrorCatchActive(true);
}
/**
* The direct edit on end label is not allowed, so check that it fails. The
* default SWTBot timeOut is reduced to consume less time.
*/
private void validateDirectEditElementBasedEdgeEndLabel() {
addWarningListener();
// Select the begin label and focus something else
editor.select(editor.getEditPart("ec2 end"));
boolean directEdit = true;
final long oldTimeout = SWTBotPreferences.TIMEOUT;
try {
SWTBotPreferences.TIMEOUT = 1000;
directEdit = editor.directEdgeEditTypeEndLabel("EC1", "EC2", "eclass2");
} catch (SWTException e) {
directEdit = false;
} finally {
SWTBotPreferences.TIMEOUT = oldTimeout;
Assert.assertFalse("The direct edit is only available on center label.", directEdit);
}
Assert.assertNotNull(editor.getEditPart("ec2 begin"));
Assert.assertNotNull(editor.getEditPart("ec2 center"));
validateSelectedLabel("ec2 end", DEdgeEndNameEditPart.class);
removeWarningListenerAndCheckWarning();
}
private void validateSelectedLabel(String label, Class<? extends EditPart> labelClass) {
StructuredSelection selection = (StructuredSelection) editor.getSelection();
Assert.assertEquals(1, selection.size());
Assert.assertTrue(labelClass.isInstance(selection.getFirstElement()));
Assert.assertEquals(label, ((AbstractDEdgeNameEditPart) selection.getFirstElement()).getEditText());
}
private void removeWarningListenerAndCheckWarning() {
// Remove the log listener
InternalPlatform.getDefault().removeLogListener(listener);
// Check if there is no warning message
if (doesASpecificErrorOccurs())
fail("A warning concerning the MapModeUtil was log during this test.");
}
private void addWarningListener() {
listener = new ILogListener() {
@Override
public void logging(IStatus status, String plugin) {
if (status.getSeverity() == IStatus.WARNING && status.getMessage().indexOf("MapModeUtil") != -1)
errorOccurs();
}
};
// Add a log listener to catch an eventual warning message during the
// edge creation
InternalPlatform.getDefault().addLogListener(listener);
}
private void createReference(String sourceName, Class<? extends EditPart> expectedSourceClass, String targetName, Class<? extends EditPart> expectedTargetClass, String edgeCreationToolName) {
SWTBotGefEditPart source = editor.getEditPart(sourceName, expectedSourceClass);
SWTBotGefEditPart target = editor.getEditPart(targetName, expectedTargetClass);
Rectangle sourceBounds = editor.getBounds(source);
Rectangle targetBounds = editor.getBounds(target);
createReference((IGraphicalEditPart) source.part(), sourceBounds.getCenter(), (IGraphicalEditPart) target.part(), targetBounds.getCenter(), edgeCreationToolName);
}
private void createReference(IGraphicalEditPart source, Point sourcePosition, IGraphicalEditPart target, Point targetPosition, String edgeCreationToolName) {
editor.activateTool(edgeCreationToolName);
editor.click(sourcePosition);
editor.click(targetPosition);
}
private SWTBotGefConnectionEditPart getSingleDEdgeFrom(String sourceName) {
SWTBotGefEditPart sourcePart = editor.getEditPart(sourceName).parent();
assertEquals("Bad number of edge", 1, sourcePart.sourceConnections().size());
SWTBotGefConnectionEditPart edge = sourcePart.sourceConnections().get(0);
return edge;
}
private DEdgeEditPart getSingleDEdgeTo(String targetName) {
SWTBotGefEditPart targetPart = editor.getEditPart(targetName).parent();
assertEquals("Bad number of edge", 1, targetPart.targetConnections().size());
SWTBotGefConnectionEditPart edge = targetPart.targetConnections().get(0);
assertTrue(edge.part() instanceof DEdgeEditPart);
return (DEdgeEditPart) edge.part();
}
/**
* Delete the selected element if possible.
*/
@Override
protected void deleteSelectedElement() {
SWTBotMenu deleteMenu = bot.menu("Edit").menu("Delete");
if (deleteMenu.isEnabled()) {
deleteMenu.click();
}
}
}