/******************************************************************************* * 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.readonly; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import java.io.IOException; import java.util.ArrayList; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.CoreException; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode; 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.OperationNode; import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.ParameterNode; import org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.ServiceInterfaceNode; import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.eclipse.wst.sse.sieditor.model.api.IModelObject; import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot; import org.eclipse.wst.sse.sieditor.model.utils.StatusUtils; import org.eclipse.wst.sse.sieditor.model.wsdl.api.IParameter; import org.eclipse.wst.sse.sieditor.model.wsdl.api.IServiceInterface; import org.eclipse.wst.sse.sieditor.model.wsdl.api.OperationType; import org.eclipse.wst.sse.sieditor.model.xsd.api.IType; /** * * */ public class SIFormPageControllerReadOnlyTest extends SIEditorBaseTest { /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { } /** * @throws java.lang.Exception */ @AfterClass public static void tearDownAfterClass() throws Exception { } /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { super.setUp(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { super.tearDown(); } private static class TestSIFormPageController extends SIFormPageController { public TestSIFormPageController(IWsdlModelRoot model, boolean readOnly) { super(model, readOnly,false); } public Boolean isEditAllowed; @Override protected boolean isEditAllowed(Object editedObject) { return isEditAllowed != null ? isEditAllowed.booleanValue() : super.isEditAllowed(editedObject); } public Boolean isDeleteAllowed; @Override protected boolean isDeleteAllowed(Object editedObject) { return isDeleteAllowed != null ? isDeleteAllowed.booleanValue() : super.isDeleteAllowed(editedObject); } } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#canEdit(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode)} * . */ @Test public final void testCanEdit() { TestSIFormPageController sifpc = new TestSIFormPageController(createMock(IWsdlModelRoot.class), true); sifpc.isEditAllowed = Boolean.valueOf(true); assertFalse(sifpc.canEdit(null)); ITreeNode treeNodeMock = createMock(ITreeNode.class); expect(treeNodeMock.getModelObject()).andReturn(null); expect(treeNodeMock.isReadOnly()).andReturn(false).anyTimes(); IModelObject modelObjectMock = createMock(IModelObject.class); expect(treeNodeMock.getModelObject()).andReturn(modelObjectMock).atLeastOnce(); replay(treeNodeMock); assertFalse(sifpc.canEdit(treeNodeMock)); sifpc.isEditAllowed = Boolean.valueOf(false); assertFalse(sifpc.canEdit(treeNodeMock)); sifpc.isEditAllowed = Boolean.valueOf(true); assertTrue(sifpc.canEdit(treeNodeMock)); verify(treeNodeMock); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#addNewServiceInterface()} * . * * @throws ExecutionException * @throws CoreException * @throws IOException */ @Test public final void testAddNewServiceInterface() throws ExecutionException, IOException, CoreException { // just any wsdl IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ //$NON-NLS-2$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(true); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); int siCount = wsdlRoot.getDescription().getAllInterfaces().size(); sifpc.addNewServiceInterface(); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(siCount + 1, wsdlRoot.getDescription().getAllInterfaces().size()); // with a readOnly controller sifpc.isEditAllowed = Boolean.valueOf(false); statusCalls = StatusUtils.getShowStatusDialog_calls(); siCount = wsdlRoot.getDescription().getAllInterfaces().size(); sifpc.addNewServiceInterface(); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(siCount, wsdlRoot.getDescription().getAllInterfaces().size()); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#addNewOperation(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode)} * . * * @throws CoreException * @throws IOException */ @Test public final void testAddNewOperation() throws IOException, CoreException { // just any wsdl IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(true); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode siNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); sifpc.getTreeNodeMapper().addToNodeMap(serviceInterface, siNode); int operationsCount = serviceInterface.getAllOperations().size(); sifpc.addNewOperation(siNode); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(operationsCount + 1, serviceInterface.getAllOperations().size()); // with a readOnly controller sifpc.isEditAllowed = Boolean.valueOf(false); statusCalls = StatusUtils.getShowStatusDialog_calls(); operationsCount = serviceInterface.getAllOperations().size(); sifpc.addNewOperation(siNode); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(operationsCount, serviceInterface.getAllOperations().size()); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#addNewFault(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode)} * . * * @throws CoreException * @throws IOException */ @Test public final void testAddNewFault() throws IOException, CoreException { // just any wsdl IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(true); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode siNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); sifpc.getTreeNodeMapper().addToNodeMap(serviceInterface, siNode); OperationNode operationNode = (OperationNode) siNode.getChildren()[0]; int faultsCount = operationNode.getModelObject().getAllFaults().size(); sifpc.addNewFault(operationNode); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(faultsCount + 1, operationNode.getModelObject().getAllFaults().size()); // with a readOnly controller sifpc.isEditAllowed = Boolean.valueOf(false); statusCalls = StatusUtils.getShowStatusDialog_calls(); faultsCount = operationNode.getModelObject().getAllFaults().size(); sifpc.addNewFault(operationNode); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(faultsCount, operationNode.getModelObject().getAllFaults().size()); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#addNewParameter(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode, org.eclipse.wst.sse.sieditor.ui.v2.wsdltree.nodes.OperationCategory)} * . * * @throws CoreException * @throws IOException */ @Test public final void testAddNewParameter() throws IOException, CoreException { // just any wsdl IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(true); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode siNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); sifpc.getTreeNodeMapper().addToNodeMap(serviceInterface, siNode); OperationNode operationNode = (OperationNode) siNode.getChildren()[0]; int paramCount = operationNode.getModelObject().getAllInputParameters().size(); sifpc.addNewParameter(operationNode, OperationCategory.INPUT); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(paramCount + 1, operationNode.getModelObject().getAllInputParameters().size()); // with a readOnly controller sifpc.isEditAllowed = Boolean.valueOf(false); statusCalls = StatusUtils.getShowStatusDialog_calls(); paramCount = operationNode.getModelObject().getAllInputParameters().size(); sifpc.addNewParameter(operationNode, OperationCategory.INPUT); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); assertEquals(paramCount, operationNode.getModelObject().getAllInputParameters().size()); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#deleteItemTriggered(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode)} * . * * @throws CoreException * @throws IOException */ @Test public final void testDeleteItemTriggered() throws IOException, CoreException { IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(true); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode serviceInterfaceNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); sifpc.getTreeNodeMapper().addToNodeMap(serviceInterface, serviceInterfaceNode); OperationNode operationNode = (OperationNode) serviceInterfaceNode.getChildren()[0]; ParameterNode inputParameterNode = (ParameterNode) operationNode.getChildren()[0]; FaultNode faultNode = (FaultNode) operationNode.getChildren()[2]; sifpc.isEditAllowed = Boolean.valueOf(false); ArrayList<ITreeNode> nodes = new ArrayList<ITreeNode>(); nodes.add(faultNode); nodes.add(inputParameterNode); nodes.add(operationNode); nodes.add(serviceInterfaceNode); sifpc.deleteItemsTriggered(nodes); assertEquals(serviceInterface, wsdlRoot.getDescription().getAllInterfaces().iterator().next()); assertEquals(operationNode, serviceInterfaceNode.getChildren()[0]); assertEquals(inputParameterNode, operationNode.getChildren()[0]); assertEquals(faultNode, operationNode.getChildren()[2]); sifpc.isEditAllowed = Boolean.valueOf(true); sifpc.deleteItemsTriggered(nodes); assertEquals(0, wsdlRoot.getDescription().getAllInterfaces().size()); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#editDescriptionNamespaceTriggered(java.lang.String)} * . * * @throws CoreException * @throws IOException */ @Test public final void testEditDescriptionNamespaceTriggered() throws IOException, CoreException { IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ //$NON-NLS-2$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(false); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); String namespace = wsdlRoot.getDescription().getNamespace(); String newNamespace = "http://someThing.com"; //$NON-NLS-1$ assertNotSame(newNamespace, namespace); sifpc.editDescriptionNamespaceTriggered(newNamespace); assertEquals(namespace, wsdlRoot.getDescription().getNamespace()); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); sifpc.isEditAllowed = Boolean.valueOf(true); sifpc.editDescriptionNamespaceTriggered(newNamespace); assertEquals(newNamespace, wsdlRoot.getDescription().getNamespace()); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#editParameterTypeTriggered(ITreeNode, IType)} * . * * @throws CoreException * @throws IOException */ @Test public final void testEditParameterTypeTriggered() throws IOException, CoreException { IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ //$NON-NLS-2$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(false); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IType newType = wsdlRoot.getDescription().getContainedSchemas().get(0).getAllContainedTypes().iterator().next(); IServiceInterface service = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode serviceInterfaceNode = new ServiceInterfaceNode(null, service, sifpc); ParameterNode parameterNode = (ParameterNode) ((ITreeNode) serviceInterfaceNode.getChildren()[0]).getChildren()[0]; IParameter parameterToChange = (IParameter) parameterNode.getModelObject(); IType oldType = parameterToChange.getType(); sifpc.editParameterTypeTriggered(parameterNode, newType); assertEquals(oldType, parameterToChange.getType()); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); sifpc.isEditAllowed = Boolean.valueOf(true); statusCalls = StatusUtils.getShowStatusDialog_calls(); sifpc.editParameterTypeTriggered(parameterNode, newType); assertEquals(newType, parameterToChange.getType()); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#editItemNameTriggered(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode, java.lang.String)} * . * * @throws CoreException * @throws IOException */ @Test public final void testEditItemNameTriggered() throws IOException, CoreException { IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ //$NON-NLS-2$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(false); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode siNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); String oldName = siNode.getDisplayName(); String newName = "NewServiceInterfaceName"; //$NON-NLS-1$ sifpc.editItemNameTriggered(siNode, newName); assertEquals(oldName, siNode.getDisplayName()); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); sifpc.isEditAllowed = Boolean.valueOf(true); statusCalls = StatusUtils.getShowStatusDialog_calls(); sifpc.editItemNameTriggered(siNode, newName); assertEquals(newName, siNode.getDisplayName()); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); } /** * Test method for * {@link org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController#editOperationTypeTriggered(org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode, org.eclipse.wst.sse.sieditor.model.wsdl.api.OperationType)} * . * * @throws CoreException * @throws IOException */ @Test public final void testEditOperationTypeTriggered() throws IOException, CoreException { IWsdlModelRoot wsdlRoot = getWSDLModelRoot(org.eclipse.wst.sse.sieditor.test.model.Constants.DATA_PUBLIC_SELF_KESHAV + "Documentation.wsdl", "Documentation.wsdl"); //$NON-NLS-1$ //$NON-NLS-2$ TestSIFormPageController sifpc = new TestSIFormPageController(wsdlRoot, false); sifpc.isEditAllowed = Boolean.valueOf(false); StatusUtils.isUnderJunitExecution = true; long statusCalls = StatusUtils.getShowStatusDialog_calls(); IServiceInterface serviceInterface = wsdlRoot.getDescription().getAllInterfaces().iterator().next(); ServiceInterfaceNode siNode = new ServiceInterfaceNode(null, serviceInterface, sifpc); OperationNode operationNodeToEdit = (OperationNode) siNode.getChildren()[0]; OperationType oldType = operationNodeToEdit.getModelObject().getOperationStyle(); OperationType newType = OperationType.ASYNCHRONOUS; assertNotSame(newType, oldType); sifpc.editOperationTypeTriggered(operationNodeToEdit, newType); assertEquals(oldType, operationNodeToEdit.getModelObject().getOperationStyle()); assertEquals(1, StatusUtils.getShowStatusDialog_calls() - statusCalls); sifpc.isEditAllowed = Boolean.valueOf(true); statusCalls = StatusUtils.getShowStatusDialog_calls(); sifpc.editOperationTypeTriggered(operationNodeToEdit, newType); assertEquals(newType, operationNodeToEdit.getModelObject().getOperationStyle()); assertEquals(0, StatusUtils.getShowStatusDialog_calls() - statusCalls); } }