/******************************************************************************* * 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.validation.constraints.webservice.interoperability; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.HAS_AT_MOST_ONE_PART_LISTED_IN_PARTS_ATTRIBUTE; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.MISSING_NAMESPACE_ATTRIBUTE_IN_SOAP_BODY; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.NAMESPACE_ATTRIBUTE_ISNOT_ALLOWED_IN_SOAPBIND_ELEMENTS_WHEN_DOCUMENT_STYLE_IS_SPECIFIED; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.OPERATION_DOESNOT_HAVE_SIMILAR_BINDING_OPERATION; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.THE_PART_DOESNOT_HAVE_ELEMENT_ATTRIBUTE_IN_SOME_INPUT_MESSAGE; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.THE_PART_DOESNOT_HAVE_ELEMENT_ATTRIBUTE_IN_SOME_OUTPUT_MESSAGE; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.THE_PART_DOESNOT_HAVE_TYPE_ATTRIBUTE_IN_SOME_INPUT_MESSAGE; import static org.eclipse.wst.sse.sieditor.model.validation.constraints.webservice.interoperability.WSIConstants.THE_VALUE_OF_USE_ATTRIBUTE_IN_SOAP_BODY_IS_NOT_LITERAL; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.wst.sse.sieditor.model.validation.IValidationService; import org.eclipse.wst.sse.sieditor.model.validation.IValidationStatus; import org.eclipse.wst.sse.sieditor.model.validation.IValidationStatusProvider; import org.eclipse.wst.sse.sieditor.test.util.SIEditorBaseTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot; import org.eclipse.wst.sse.sieditor.model.wsdl.api.IDescription; 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.model.wsdl.api.IServiceInterface; import org.eclipse.wst.sse.sieditor.ui.ServiceInterfaceEditor; public class TestWSIOperationCompliant extends SIEditorBaseTest { private IDescription modelDescription; private IValidationService validationService; private IValidationStatusProvider provider; @Override @Before public void setUp() throws Exception { super.setUp(); final IWsdlModelRoot modelRoot = (IWsdlModelRoot) getModelRoot("validation/WSDLWithRPCandDOcumentStyleBindings.wsdl", //$NON-NLS-1$ "WSDLWithRPCandDOcumentStyleBindings.wsdl", ServiceInterfaceEditor.EDITOR_ID); //$NON-NLS-1$ modelDescription = modelRoot.getDescription(); validationService = editor.getValidationService(); modelRoot.getEnv().getEditingDomain().getCommandStack().execute( new RecordingCommand(modelRoot.getEnv().getEditingDomain()) { @Override protected void doExecute() { // validationService.validate(definition); } }); provider = validationService.getValidationStatusProvider(); } @Test public void testToManyParatsInTheMessageWhenDocumentStyleIsSpecified() throws Exception { final IOperation documentStyleBindingOperation = modelDescription.getInterface("PortTypeWithManyParameters").get(0) //$NON-NLS-1$ .getOperation("documentStyleBindingOperation").get(0); //$NON-NLS-1$ final List<IValidationStatus> documentStyleBindingOperationStatus = provider.getStatus(documentStyleBindingOperation); assertEquals(2, documentStyleBindingOperationStatus.size()); final IValidationStatus moreThanOneInputParameterStatus = documentStyleBindingOperationStatus.get(0); assertEquals(IStatus.WARNING, moreThanOneInputParameterStatus.getSeverity()); // assertEquals(WSIUtils.THE_OPERATION_HAS_MORE_THAN_ONE_INPUT_PARAMETER, // moreThanOneInputParameterStatus.getMessage()); final IValidationStatus moreThanOneOutputParameterStatus = documentStyleBindingOperationStatus.get(1); assertEquals(IStatus.WARNING, moreThanOneOutputParameterStatus.getSeverity()); // assertEquals(WSIUtils.THE_OPERATION_HAS_MORE_THAN_ONE_OUTPUT_PARAMETER, // moreThanOneOutputParameterStatus.getMessage()); final IParameter inputParameterWithWarning = ((List<IParameter>) documentStyleBindingOperation.getAllInputParameters()) .get(1); final List<IValidationStatus> inputParameterWithWarningStatus = provider.getStatus(inputParameterWithWarning); assertEquals(1, inputParameterWithWarningStatus.size()); final IValidationStatus inputPartDoesNotHaveElementAttribute = inputParameterWithWarningStatus.get(0); assertEquals(IStatus.WARNING, inputPartDoesNotHaveElementAttribute.getSeverity()); assertEquals(THE_PART_DOESNOT_HAVE_ELEMENT_ATTRIBUTE_IN_SOME_INPUT_MESSAGE, inputPartDoesNotHaveElementAttribute .getMessage()); final IParameter outputParameterWithWarning = ((List<IParameter>) documentStyleBindingOperation.getAllOutputParameters()) .get(1); final List<IValidationStatus> outputParameterWithWarningStatus = provider.getStatus(outputParameterWithWarning); assertEquals(1, outputParameterWithWarningStatus.size()); final IValidationStatus outputPartDoesNotHaveElementAttribute = outputParameterWithWarningStatus.get(0); assertEquals(IStatus.WARNING, outputPartDoesNotHaveElementAttribute.getSeverity()); assertEquals(THE_PART_DOESNOT_HAVE_ELEMENT_ATTRIBUTE_IN_SOME_OUTPUT_MESSAGE, outputPartDoesNotHaveElementAttribute .getMessage()); } @Test public void testDoesNotHaveTypeAttributeInMessageWhenRPCStyleIsSpecified() throws Exception { final IOperation newOperationOne = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation1").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationOneStatus = provider.getStatus(newOperationOne); assertEquals(0, newOperationOneStatus.size()); final IParameter inputParameterWithWarning = ((List<IParameter>) newOperationOne.getAllInputParameters()).get(2); final List<IValidationStatus> inputParameterWithWarningStatus = provider.getStatus(inputParameterWithWarning); int numberOfWarnings = 0; int indexOfTheWarning = -1; for (final IValidationStatus status : inputParameterWithWarningStatus) { if (status.getSeverity() == IStatus.WARNING) { numberOfWarnings++; } indexOfTheWarning++; } assertEquals("There are more or less warnings", numberOfWarnings, 1); assertEquals(THE_PART_DOESNOT_HAVE_TYPE_ATTRIBUTE_IN_SOME_INPUT_MESSAGE, inputParameterWithWarningStatus.get( indexOfTheWarning).getMessage()); final IParameter outputParameterWithWarning = ((List<IParameter>) newOperationOne.getAllOutputParameters()).get(1); final List<IValidationStatus> outputParameterWithWarningStatus = provider.getStatus(outputParameterWithWarning); assertEquals(1, outputParameterWithWarningStatus.size()); assertEquals(IStatus.WARNING, outputParameterWithWarningStatus.get(0).getSeverity()); } @Test public void testMissingNamespaceAttributeInSoapBodyWhenRPCStyleIsSpecified() throws Exception { final IOperation newOperationTwo = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation2").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationTwoStatus = provider.getStatus(newOperationTwo); assertEquals(1, newOperationTwoStatus.size()); assertEquals(IStatus.WARNING, newOperationTwoStatus.get(0).getSeverity()); assertEquals(MISSING_NAMESPACE_ATTRIBUTE_IN_SOAP_BODY, newOperationTwoStatus.get(0).getMessage()); } @Test public void testThatNamespaceAttributeIsNotAllowedWhenDocumentStyleIsSpecified() throws Exception { final IOperation newOperationThree = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation3").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationThreeStatus = provider.getStatus(newOperationThree); assertEquals(1, newOperationThreeStatus.size()); assertEquals(IStatus.WARNING, newOperationThreeStatus.get(0).getSeverity()); assertEquals(NAMESPACE_ATTRIBUTE_ISNOT_ALLOWED_IN_SOAPBIND_ELEMENTS_WHEN_DOCUMENT_STYLE_IS_SPECIFIED, newOperationThreeStatus.get(0).getMessage()); } @Test public void testThatMissingBindingForANewOperation4() throws Exception { final IOperation newOperationFour = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation4").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationFourStatus = provider.getStatus(newOperationFour); assertEquals(1, newOperationFourStatus.size()); assertEquals(IStatus.WARNING, newOperationFourStatus.get(0).getSeverity()); assertEquals(OPERATION_DOESNOT_HAVE_SIMILAR_BINDING_OPERATION, newOperationFourStatus.get(0).getMessage()); } @Test public void testNotLiteralValueForSomeUseAttributeCaseOne() throws Exception { final IOperation newOperationFive = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation5").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationFiveStatus = provider.getStatus(newOperationFive); assertEquals(1, newOperationFiveStatus.size()); assertEquals(IStatus.WARNING, newOperationFiveStatus.get(0).getSeverity()); assertEquals(THE_VALUE_OF_USE_ATTRIBUTE_IN_SOAP_BODY_IS_NOT_LITERAL, newOperationFiveStatus.get(0).getMessage()); } @Test public void testNotLiteralValueForSomeUseAttributeCaseTwo() throws Exception { final IOperation newOperationSix = modelDescription.getInterface("Service").get(0) //$NON-NLS-1$ .getOperation("NewOperation5").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationSixStatus = provider.getStatus(newOperationSix); assertEquals(1, newOperationSixStatus.size()); assertEquals(IStatus.WARNING, newOperationSixStatus.get(0).getSeverity()); assertEquals(THE_VALUE_OF_USE_ATTRIBUTE_IN_SOAP_BODY_IS_NOT_LITERAL, newOperationSixStatus.get(0).getMessage()); } @Test public void testNotAllWSDLPartsRefferedByPartAndPartsAttributeWhenDocumentStyleIsSpecified() throws Exception { final IOperation setUserSettingsOperation = modelDescription.getInterface("FINAL").get(0) //$NON-NLS-1$ .getOperation("SetUserOofSettings").get(0); //$NON-NLS-1$ final List<IValidationStatus> newOperationSixStatus = provider.getStatus(setUserSettingsOperation); assertEquals(1, newOperationSixStatus.size()); assertEquals(IStatus.WARNING, newOperationSixStatus.get(0).getSeverity()); assertEquals(HAS_AT_MOST_ONE_PART_LISTED_IN_PARTS_ATTRIBUTE, newOperationSixStatus.get(0).getMessage()); } @Test public void testPortTypeForMissingTransportAttributeAndInappropriateValueForTransportAttribute() throws Exception { final IServiceInterface portType = modelDescription.getInterface("Service").get(0); //$NON-NLS-1$ final IValidationStatusProvider provider = validationService.getValidationStatusProvider(); final List<IValidationStatus> status = provider.getStatus(portType); assertEquals(7, status.size()); final IValidationStatus missingTransportAttributeStatus = status.get(0); assertEquals(IStatus.WARNING, missingTransportAttributeStatus.getSeverity()); // the assertion messages change their position in status list, because // when the messages were being created, they are added in Set which is // tree based collection and the positions can be different any time // assertEquals(TRANSPORT_ATTRIBUTE_MISSING, // missingTransportAttributeStatus.getMessage()); final IValidationStatus badTransportAttributeValue = status.get(1); assertEquals(IStatus.WARNING, badTransportAttributeValue.getSeverity()); // assertEquals(INAPPROPRIATE_TRANSPORT_ATTRIBUTE_IN_SOME_SOAP_BINDING, // badTransportAttributeValue.getMessage()); } @Override @After public void tearDown() throws Exception { disposeModel(); super.tearDown(); } }