/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.test.ui.v2.wsdltree.nodes;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import junit.framework.Assert;
import org.easymock.EasyMock;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.wst.sse.sieditor.model.validation.IValidationStatusProvider;
import org.eclipse.wst.sse.sieditor.ui.v2.factory.TreeNodeMapper;
import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
import org.eclipse.wst.sse.sieditor.ui.v2.providers.WSDLLabelProvider;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.FaultNode;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.OperationCategory;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.OperationCategoryNode;
import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.ParameterNode;
import org.eclipse.wst.sse.sieditor.test.util.EasymockModelUtils;
import org.junit.Test;
import org.eclipse.wst.sse.sieditor.model.api.IModelObject;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IFault;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IOperation;
import org.eclipse.wst.sse.sieditor.model.wsdl.api.IParameter;
import org.eclipse.wst.sse.sieditor.ui.Activator;
import org.eclipse.wst.sse.sieditor.ui.i18n.Messages;
public class OperationCategoryNodeTest {
@Test
public void testGetFaultImage() {
assertOperationCategoryNodeImage(Activator.NODE_OPER_FAULTS, OperationCategory.FAULT);
}
@Test
public void testGetOutputImage() {
assertOperationCategoryNodeImage(Activator.NODE_OPER_OUTPUT, OperationCategory.OUTPUT);
}
@Test
public void testGetInputImage() {
assertOperationCategoryNodeImage(Activator.NODE_OPER_INPUT, OperationCategory.INPUT);
}
@Test
public void testGetFaultName() {
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.FAULT, null, null);
assertEquals(Messages.SI_FAULTS_XTND, node.getDisplayName());
}
@Test
public void testGetOutputName() {
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.OUTPUT, null, null);
assertEquals(Messages.SI_OUTPUT_XTND, node.getDisplayName());
}
@Test
public void testGetInputName() {
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.INPUT, null, null);
assertEquals(Messages.SI_INPUT_XTND, node.getDisplayName());
}
@Test
public void testHasChildrenForInputOperation() {
final IOperation mockOP = createNiceMock(IOperation.class);
final ArrayList<IParameter> inputParams = new ArrayList<IParameter>();
expect(mockOP.getAllInputParameters()).andReturn(inputParams);
replay(mockOP);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.INPUT, mockOP, null);
assertFalse(node.hasChildren());
verify(mockOP);
}
@Test
public void testHasChildrenForOutputOperation() {
final IOperation mockOP = createNiceMock(IOperation.class);
final ArrayList<IParameter> outputParams = new ArrayList<IParameter>();
expect(mockOP.getAllOutputParameters()).andReturn(outputParams);
replay(mockOP);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.OUTPUT, mockOP, null);
assertFalse(node.hasChildren());
verify(mockOP);
}
@Test
public void testHasChildrenForFaultOperation() {
final IOperation mockOP = createNiceMock(IOperation.class);
final ArrayList<IFault> faultParams = new ArrayList<IFault>();
expect(mockOP.getAllFaults()).andReturn(faultParams);
replay(mockOP);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.FAULT, mockOP, null);
assertFalse(node.hasChildren());
verify(mockOP);
}
@Test
public void testChildrenForInputOperationNoParams() {
final IOperation mockOP = createNiceMock(IOperation.class);
final ArrayList<IParameter> inputParams = new ArrayList<IParameter>();
expect(mockOP.getAllInputParameters()).andReturn(inputParams);
replay(mockOP);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.INPUT, mockOP, null);
node.getChildren();
verify(mockOP);
}
@Test
public void testChildrenForInputOperationWithExistingParams() {
final IParameter inputParameter = EasymockModelUtils.createIParameterTypeMockFromSameModel();
replay(inputParameter);
final ArrayList<IParameter> inputParams = new ArrayList<IParameter>();
inputParams.add(inputParameter);
final IOperation mockOP = createNiceMock(IOperation.class);
expect(mockOP.getAllInputParameters()).andReturn(inputParams);
replay(mockOP);
final SIFormPageController testPage = new SIFormPageController(null, false, false);
final OperationCategoryNode operationCategoryNode = new OperationCategoryNode(null, OperationCategory.INPUT, mockOP,
testPage);
final ParameterNode inParameterNode = new ParameterNode(operationCategoryNode, inputParameter, null);
testPage.getTreeNodeMapper().addToNodeMap(inputParameter, inParameterNode);
final Object[] children = operationCategoryNode.getChildren();
assertEquals(1, children.length);
assertSame(inParameterNode, children[0]);
verify(mockOP);
}
@Test
public void testChildrenForInputOperationNoExistingParams() {
final IParameter inputParameter = EasymockModelUtils.createIParameterTypeMockFromSameModel();
replay(inputParameter);
final ArrayList<IParameter> inputParams = new ArrayList<IParameter>();
inputParams.add(inputParameter);
final IOperation mockOP = createNiceMock(IOperation.class);
expect(mockOP.getAllInputParameters()).andReturn(inputParams);
replay(mockOP);
final boolean[] addToNodeMapCalled = { false };
final TreeNodeMapper testTreeNodeMapper = new TreeNodeMapper() {
@Override
public void addToNodeMap(final IModelObject modelObject, final ITreeNode treeNode) {
addToNodeMapCalled[0] = true;
}
@Override
public ITreeNode getTreeNode(final IModelObject modelObject) {
return null;
}
};
final SIFormPageController testPage = new SIFormPageController(null, false, false) {
@Override
public TreeNodeMapper getTreeNodeMapper() {
return testTreeNodeMapper;
}
};
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.INPUT, mockOP, testPage);
final Object[] children = node.getChildren();
assertEquals(1, children.length);
assertNotNull(children[0]);
assertTrue(addToNodeMapCalled[0]);
verify(mockOP);
}
@Test
public void testChildrenForOutputOperationNoParams() {
final IOperation mockOP = createNiceMock(IOperation.class);
final ArrayList<IParameter> outputParams = new ArrayList<IParameter>();
expect(mockOP.getAllOutputParameters()).andReturn(outputParams);
replay(mockOP);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.OUTPUT, mockOP, null);
node.getChildren();
verify(mockOP);
}
@Test
public void testChildrenForFaultOperationExistingFaultNode() {
final IFault fault = createNiceMock(IFault.class);
final ArrayList<IFault> faults = new ArrayList<IFault>();
faults.add(fault);
final IOperation mockOP = createNiceMock(IOperation.class);
expect(mockOP.getAllFaults()).andReturn(faults);
replay(mockOP);
final FaultNode faultNode = new FaultNode(null, null, null);
final TreeNodeMapper testTreeNodeMapper = new TreeNodeMapper() {
@Override
public ITreeNode getTreeNode(final IModelObject modelObject) {
return faultNode;
}
};
final SIFormPageController testPage = new SIFormPageController(null, false, false) {
@Override
public TreeNodeMapper getTreeNodeMapper() {
return testTreeNodeMapper;
}
};
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.FAULT, mockOP, testPage);
final Object[] children = node.getChildren();
assertEquals(1, children.length);
assertSame(faultNode, children[0]);
verify(mockOP);
}
@Test
public void testChildrenForFaultOperationNotExistingFaultNode() {
final IFault fault = createNiceMock(IFault.class);
final ArrayList<IFault> faults = new ArrayList<IFault>();
faults.add(fault);
final IOperation mockOP = createNiceMock(IOperation.class);
expect(mockOP.getAllFaults()).andReturn(faults);
replay(mockOP);
final TreeNodeMapper testTreeNodeMapper = new TreeNodeMapper() {
@Override
public ITreeNode getTreeNode(final IModelObject modelObject) {
return null;
}
};
final SIFormPageController testPage = new SIFormPageController(null, false, false) {
@Override
public TreeNodeMapper getTreeNodeMapper() {
return testTreeNodeMapper;
}
};
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.FAULT, mockOP, testPage);
final Object[] children = node.getChildren();
assertEquals(1, children.length);
assertNotNull(children[0]);
verify(mockOP);
}
private void assertOperationCategoryNodeImage(final String nodeOperation, final OperationCategory opCategory) {
final Display display = Display.getDefault();
final Image image = new Image(display, 10, 10);
final ITreeNode parentNode = createMock(ITreeNode.class);
expect(parentNode.isReadOnly()).andReturn(false).anyTimes();
expect(parentNode.getCategories()).andReturn(ITreeNode.CATEGORY_MAIN).anyTimes();
replay(parentNode);
final OperationCategoryNode node = new OperationCategoryNode(parentNode, opCategory, null, null) {
protected ImageRegistry getImageRegistry() {
final ImageRegistry registry = new ImageRegistry(display);
registry.put(nodeOperation, image);
return registry;
}
};
assertEquals(image, node.getImage());
}
/**
* Make sure that if the categories are hidden from the tree, then the
* correct tooltip text is shown
*/
@Test
public void testTooltip() {
final SIFormPageController controller = new SIFormPageController(null, false, false);
controller.setShowCategoryNodes(false);
final OperationCategoryNode node = new OperationCategoryNode(null, OperationCategory.INPUT, null, controller);
final ITreeNode someNode = createMock(ITreeNode.class);
expect(someNode.getDisplayName()).andReturn("displayName").once();
replay(someNode);
final String tooltipText = node.getTooltipTextFor(someNode);
Assert.assertEquals(org.eclipse.wst.sse.sieditor.ui.i18n.Messages.OperationCategoryNode_input_param_tooltip
+ "displayName", tooltipText);
verify(someNode);
}
/**
* Ensures that when the category nodes (Input/Output/Faults) are shown,
* they will be decorated if their children are invalid
*/
@Test
public void testCategoryNodeDecoration() {
final SIFormPageController controller = new SIFormPageController(null, false, false);
controller.setShowCategoryNodes(true);
final IOperation operationMock = createMock(IOperation.class);
final IParameter parameterMock = EasymockModelUtils.createIParameterTypeMockFromSameModel();
final ArrayList<IParameter> list = new ArrayList<IParameter>();
list.add(parameterMock);
expect(operationMock.getAllInputParameters()).andReturn(list).anyTimes();
final ITreeNode parentNode = createNiceMock(ITreeNode.class);
final IValidationStatusProvider validationService = createNiceMock(IValidationStatusProvider.class);
expect(validationService.getStatusMarker((IModelObject) EasyMock.anyObject())).andReturn(IStatus.ERROR);
replay(parentNode, validationService);
final OperationCategoryNode operationCategoryNode = new OperationCategoryNode(parentNode, OperationCategory.INPUT,
operationMock, controller);
final Image expectedImage = Activator.getDefault().getImage(operationCategoryNode.getImage(), IStatus.ERROR);
final WSDLLabelProvider labelProvider = new WSDLLabelProvider() {
@Override
protected IValidationStatusProvider getValidationStatusProvider(final Object modelObject) {
return validationService;
};
};
replay(operationMock, parameterMock);
final Image actualImage = labelProvider.getImage(operationCategoryNode);
Assert.assertSame(expectedImage, actualImage);
}
}