/******************************************************************************* * 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.model; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.eclipse.wst.sse.sieditor.ui.v2.dt.DataTypesContentProvider; import org.eclipse.wst.sse.sieditor.ui.v2.dt.DataTypesFormPageController; import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.IDataTypesTreeNode; import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.NamespaceNode; import org.eclipse.wst.sse.sieditor.ui.v2.dt.nodes.impl.SimpleTypeNode; import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode; import org.eclipse.wst.sse.sieditor.ui.v2.providers.WSDLContentProvider; import org.eclipse.wst.sse.sieditor.ui.v2.wsdl.controller.SIFormPageController; 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.ServiceInterfaceNode; import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest; 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.xsd.api.ISchema; import org.eclipse.wst.sse.sieditor.model.xsd.api.ISimpleType; import org.eclipse.wst.sse.sieditor.model.xsd.api.IStructureType; public class ActionsSelectionTest extends SIEditorBaseTest { private static final String FILE_NAME = "pub/simple/CommonEntities.wsdl"; private static final String PROJECT_NAME = "actions_sel_test"; @Test public void testSIActions() throws Exception { final IWsdlModelRoot modelRoot = getWSDLModelRoot(FILE_NAME, "CommonEntities.wsdl"); Assert.assertNotNull(modelRoot); final SIFormPageController controller = new SIFormPageController(modelRoot, false, false); final WSDLContentProvider contentProvider = new WSDLContentProvider(controller); final Object[] elements = contentProvider.getElements(modelRoot); testWSDLSelection(elements, contentProvider, controller); } private void testWSDLSelection(final Object[] elements, final WSDLContentProvider contentProvider, final SIFormPageController controller) { if (elements != null) { for (final Object object : elements) { if (object instanceof ITreeNode) { final ITreeNode node = (ITreeNode) object; // actual testing start // interface - always Assert.assertTrue(controller.isAddNewServiceInterfaceEnabled(node)); controller.addNewServiceInterface(); // operation - always Assert.assertTrue(controller.isAddNewOperationEnabled(node)); controller.addNewOperation(node); // in, out, fault - always, except for service interface if (!(node instanceof ServiceInterfaceNode)) { Assert.assertTrue(controller.isAddNewInParameterEnabled(node)); controller.addNewParameter(node, OperationCategory.INPUT); Assert.assertTrue(controller.isAddNewOutParameterEnabled(node)); controller.addNewParameter(node, OperationCategory.OUTPUT); Assert.assertTrue(controller.isAddNewFaultEnabled(node)); controller.addNewFault(node); } // delete - if not OperationCategory if (!(node instanceof OperationCategoryNode)) { Assert.assertTrue(controller.isDeleteItemEnabled(node)); } // actual testing end final Object[] children = contentProvider.getChildren(node); testWSDLSelection(children, contentProvider, controller); } } } } @Test public void testDTActions() throws Exception { final IWsdlModelRoot modelRoot = getWSDLModelRoot(FILE_NAME, "CommonEntities.wsdl"); Assert.assertNotNull(modelRoot); final DataTypesFormPageController controller = new DataTypesFormPageController(modelRoot, false); final DataTypesContentProvider contentProvider = new DataTypesContentProvider(controller); final Object[] elements = contentProvider.getElements(modelRoot); testXSDSelection(elements, contentProvider, controller); } private void testXSDSelection(final Object[] elements, final DataTypesContentProvider contentProvider, final DataTypesFormPageController controller) { if (elements != null) { for (final Object object : elements) { if (object instanceof IDataTypesTreeNode) { final IDataTypesTreeNode node = (IDataTypesTreeNode) object; final IModelObject modelObject = node.getModelObject(); if (!(modelObject instanceof ISchema || modelObject instanceof ISimpleType)) { if (modelObject instanceof IStructureType) { final IStructureType structure = (IStructureType) modelObject; if (structure.getType() instanceof ISimpleType) { Assert.assertFalse(controller.isAddElementEnabled(node)); continue; } } // add element if (node.isReadOnly() && ((node.getCategories() & ITreeNode.CATEGORY_REFERENCE) == ITreeNode.CATEGORY_REFERENCE) && node.getParent().isReadOnly()) { Assert.assertFalse(controller.isAddElementEnabled(node)); } else { Assert.assertTrue(controller.isAddElementEnabled(node)); } controller.handleAddElementAction(node); } // Simple Type if (node.isReadOnly() && ((node.getCategories() & ITreeNode.CATEGORY_REFERENCE) != ITreeNode.CATEGORY_REFERENCE)) { Assert.assertFalse(controller.isAddSimpleTypeEnabled(node)); } else { Assert.assertTrue(controller.isAddSimpleTypeEnabled(node)); } controller.handleAddSimpleTypeAction(node); // Structure Type if (node.isReadOnly() && ((node.getCategories() & ITreeNode.CATEGORY_REFERENCE) != ITreeNode.CATEGORY_REFERENCE)) { Assert.assertFalse(controller.isAddStructureEnabled(node)); } else { Assert.assertTrue(controller.isAddStructureEnabled(node)); } controller.handleAddStructureTypeAction(node); // if not namespace, simple type or simple type element - // also Attribute should be possible boolean executeAttributeCheck = true; if ((node instanceof SimpleTypeNode) || (node instanceof NamespaceNode)) { executeAttributeCheck = false; } if (modelObject instanceof IStructureType) { final IStructureType structure = (IStructureType) modelObject; // global element if (structure.isElement() && !(structure.getType() instanceof IStructureType && structure.getType().isAnonymous())) { executeAttributeCheck = false; } } if (executeAttributeCheck) { if (node.isReadOnly() && ((node.getCategories() & ITreeNode.CATEGORY_REFERENCE) == ITreeNode.CATEGORY_REFERENCE) && node.getParent().isReadOnly()) { Assert.assertFalse(controller.isAddAttributeEnabled(node)); } else { Assert.assertTrue(controller.isAddAttributeEnabled(node)); } controller.handleAddAttributeAction(node); } // delete - always final List<IDataTypesTreeNode> nodes = new ArrayList<IDataTypesTreeNode>(); nodes.add(node); controller.isRemoveItemsEnabled(nodes); // actual testing end final Object[] children = contentProvider.getChildren(node); testXSDSelection(children, contentProvider, controller); } } } } @Override protected String getProjectName() { return PROJECT_NAME; } }