blob: 38054bd0e6ec2b8bb769770a6e62f3d42fbcc57d [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2012, 2019 SAP SE
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* SAP SE - initial API, implementation and documentation
* mlypik - Bug 401792 - Disable starting reconnection
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.graphiti.ui.tests;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import org.easymock.EasyMock;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IAddFeature;
import org.eclipse.graphiti.features.ICreateConnectionFeature;
import org.eclipse.graphiti.features.ICreateFeature;
import org.eclipse.graphiti.features.IFeature;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.IReconnectionFeature;
import org.eclipse.graphiti.features.context.IAddContext;
import org.eclipse.graphiti.features.context.IContext;
import org.eclipse.graphiti.features.context.ICreateConnectionContext;
import org.eclipse.graphiti.features.context.ICreateContext;
import org.eclipse.graphiti.features.context.IReconnectionContext;
import org.eclipse.graphiti.mm.pictograms.Anchor;
import org.eclipse.graphiti.mm.pictograms.Connection;
import org.eclipse.graphiti.mm.pictograms.ContainerShape;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
import org.eclipse.graphiti.tests.reuse.GFAbstractTestCase;
import org.eclipse.graphiti.ui.internal.command.AddModelObjectCommand;
import org.eclipse.graphiti.ui.internal.command.CreateConnectionCommand;
import org.eclipse.graphiti.ui.internal.command.CreateModelObjectCommand;
import org.eclipse.graphiti.ui.internal.command.ReconnectCommand;
import org.eclipse.graphiti.ui.internal.config.IConfigurationProviderInternal;
import org.eclipse.graphiti.ui.platform.IConfigurationProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.junit.Test;
public class CommandTest extends GFAbstractTestCase {
@Test
public void testAddModelObjectCommand_canUndo_callsFeature() throws Exception {
final boolean[] undoWasCalled = { false };
IAddFeature addFeature = new IAddFeature() {
@Override
public IFeatureProvider getFeatureProvider() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public String getName() {
return null;
}
@Override
public boolean isAvailable(IContext context) {
return false;
}
@Override
public boolean hasDoneChanges() {
return false;
}
@Override
public void execute(IContext context) {
}
@Override
public boolean canUndo(IContext context) {
undoWasCalled[0] = true;
return true;
}
@Override
public boolean canExecute(IContext context) {
return false;
}
@Override
public boolean canAdd(IAddContext context) {
return true;
}
@Override
public PictogramElement add(IAddContext context) {
return null;
}
};
IFeatureProvider featureProviderMock = createNiceMock(IFeatureProvider.class);
expect(featureProviderMock.getAddFeature((IAddContext) EasyMock.anyObject())).andReturn(addFeature);
replay(featureProviderMock);
IDiagramTypeProvider diagramTypeProviderMock = createNiceMock(IDiagramTypeProvider.class);
expect(diagramTypeProviderMock.getFeatureProvider()).andReturn(featureProviderMock).anyTimes();
replay(diagramTypeProviderMock);
IConfigurationProviderInternal configurationProviderMock = createNiceMock(IConfigurationProviderInternal.class);
expect(configurationProviderMock.getDiagramTypeProvider()).andReturn(diagramTypeProviderMock).anyTimes();
replay(configurationProviderMock);
ContainerShape containerShapeMock = createNiceMock(ContainerShape.class);
replay(containerShapeMock);
IAdaptable adaptableMock = createNiceMock(IAdaptable.class);
expect(adaptableMock.getAdapter(EObject.class)).andReturn(containerShapeMock).anyTimes();
replay(adaptableMock);
ISelection selection = new StructuredSelection(new Object[] { adaptableMock });
Rectangle rectangle = new Rectangle();
AddModelObjectCommand myAddModelObjectCommand = new AddModelObjectCommand(configurationProviderMock,
containerShapeMock, selection, rectangle);
assertTrue(myAddModelObjectCommand.canUndo());
assertTrue(undoWasCalled[0]);
}
@Test
public void testCreateConnectionCommand_canUndo_callsFeature() throws Exception {
final boolean[] undoWasCalled = { false };
ICreateConnectionFeature[] createConnectionFeatures = { new ICreateConnectionFeature() {
@Override
public boolean canUndo(IContext context) {
undoWasCalled[0] = true;
return true;
}
@Override
public boolean canCreate(ICreateConnectionContext context) {
return false;
}
@Override
public Connection create(ICreateConnectionContext context) {
return null;
}
@Override
public boolean canStartConnection(ICreateConnectionContext context) {
return false;
}
@Override
public void startConnecting() {
}
@Override
public void endConnecting() {
}
@Override
public void attachedToSource(ICreateConnectionContext context) {
}
@Override
public void canceledAttaching(ICreateConnectionContext context) {
}
@Override
public String getCreateName() {
return null;
}
@Override
public String getCreateDescription() {
return null;
}
@Override
public String getCreateImageId() {
return null;
}
@Override
public String getCreateLargeImageId() {
return null;
}
@Override
public boolean isAvailable(IContext context) {
return false;
}
@Override
public boolean canExecute(IContext context) {
return false;
}
@Override
public void execute(IContext context) {
}
@Override
public boolean hasDoneChanges() {
return false;
}
@Override
public String getName() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public IFeatureProvider getFeatureProvider() {
return null;
}
}};
IFeatureProvider featureProviderMock = createNiceMock(IFeatureProvider.class);
expect(featureProviderMock.getCreateConnectionFeatures()).andReturn(
(ICreateConnectionFeature[]) createConnectionFeatures);
replay(featureProviderMock);
IDiagramTypeProvider diagramTypeProviderMock = createNiceMock(IDiagramTypeProvider.class);
expect(diagramTypeProviderMock.getFeatureProvider()).andReturn(featureProviderMock).anyTimes();
replay(diagramTypeProviderMock);
IConfigurationProvider configurationProviderMock = createNiceMock(IConfigurationProvider.class);
expect(configurationProviderMock.getDiagramTypeProvider()).andReturn(diagramTypeProviderMock).anyTimes();
replay(configurationProviderMock);
@SuppressWarnings("unchecked")
EList<Anchor> anchorList = createNiceMock(EList.class);
expect(anchorList.iterator()).andReturn(new ArrayList().iterator());
replay(anchorList);
ContainerShape containerShapeMock = createNiceMock(ContainerShape.class);
expect(containerShapeMock.getAnchors()).andReturn(anchorList);
replay(containerShapeMock);
IFeature[] features = createConnectionFeatures;
CreateConnectionCommand myCreateConnectionCommand = new CreateConnectionCommand(configurationProviderMock,
containerShapeMock, Arrays.asList(features));
assertTrue(myCreateConnectionCommand.canUndo());
assertTrue(undoWasCalled[0]);
}
@Test
public void testCreateodelObjectCommand_canUndo_callsFeature() throws Exception {
final boolean[] undoWasCalled = { false };
ICreateFeature[] createFeatures = { new ICreateFeature() {
@Override
public boolean canUndo(IContext context) {
undoWasCalled[0] = true;
return true;
}
@Override
public boolean canCreate(ICreateContext context) {
return false;
}
@Override
public Object[] create(ICreateContext context) {
return null;
}
@Override
public String getCreateName() {
return null;
}
@Override
public String getCreateDescription() {
return null;
}
@Override
public String getCreateImageId() {
return null;
}
@Override
public String getCreateLargeImageId() {
return null;
}
@Override
public boolean isAvailable(IContext context) {
return false;
}
@Override
public boolean canExecute(IContext context) {
return false;
}
@Override
public void execute(IContext context) {
}
@Override
public boolean hasDoneChanges() {
return false;
}
@Override
public String getName() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public IFeatureProvider getFeatureProvider() {
return null;
}
} };
IFeatureProvider featureProviderMock = createNiceMock(IFeatureProvider.class);
expect(featureProviderMock.getCreateFeatures()).andReturn(createFeatures);
replay(featureProviderMock);
IDiagramTypeProvider diagramTypeProviderMock = createNiceMock(IDiagramTypeProvider.class);
expect(diagramTypeProviderMock.getFeatureProvider()).andReturn(featureProviderMock).anyTimes();
replay(diagramTypeProviderMock);
IConfigurationProviderInternal configurationProviderMock = createNiceMock(IConfigurationProviderInternal.class);
expect(configurationProviderMock.getDiagramTypeProvider()).andReturn(diagramTypeProviderMock).anyTimes();
replay(configurationProviderMock);
CreateModelObjectCommand myCreateModelObjectCommand = new CreateModelObjectCommand(configurationProviderMock,
createFeatures[0], null);
assertTrue(myCreateModelObjectCommand.canUndo());
assertTrue(undoWasCalled[0]);
}
@Test
public void testReconnectCommand_canUndo_callsFeature() throws Exception {
final boolean[] undoWasCalled = { false };
IReconnectionFeature reconnectFeature = new IReconnectionFeature() {
@Override
public IFeatureProvider getFeatureProvider() {
return null;
}
@Override
public String getDescription() {
return null;
}
@Override
public String getName() {
return null;
}
@Override
public boolean isAvailable(IContext context) {
return false;
}
@Override
public boolean hasDoneChanges() {
return false;
}
@Override
public void execute(IContext context) {
}
@Override
public boolean canUndo(IContext context) {
undoWasCalled[0] = true;
return true;
}
@Override
public boolean canExecute(IContext context) {
return false;
}
@Override
public void reconnect(IReconnectionContext context) {
}
@Override
public void preReconnect(IReconnectionContext context) {
}
@Override
public void postReconnect(IReconnectionContext context) {
}
@Override
public void canceledReconnect(IReconnectionContext context) {
}
@Override
public boolean canReconnect(IReconnectionContext context) {
return false;
}
@Override
public boolean canStartReconnect(IReconnectionContext context) {
return false;
}
};
IFeatureProvider featureProviderMock = createNiceMock(IFeatureProvider.class);
expect(featureProviderMock.getReconnectionFeature((IReconnectionContext) EasyMock.anyObject())).andReturn(
reconnectFeature);
replay(featureProviderMock);
IDiagramTypeProvider diagramTypeProviderMock = createNiceMock(IDiagramTypeProvider.class);
expect(diagramTypeProviderMock.getFeatureProvider()).andReturn(featureProviderMock).anyTimes();
replay(diagramTypeProviderMock);
IConfigurationProviderInternal configurationProviderMock = createNiceMock(IConfigurationProviderInternal.class);
expect(configurationProviderMock.getDiagramTypeProvider()).andReturn(diagramTypeProviderMock).anyTimes();
replay(configurationProviderMock);
ReconnectCommand myReconnectCommand = new ReconnectCommand(configurationProviderMock, null, null, null, null,
null, null);
assertTrue(myReconnectCommand.canUndo());
assertTrue(undoWasCalled[0]);
}
}