blob: 90d779f02fd1eeabc5f064136570f7f812481824 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 by SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.validation;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.validation.IValidationContext;
import org.eclipse.emf.validation.model.ConstraintSeverity;
import org.eclipse.emf.validation.service.IConstraintDescriptor;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.DomFactory;
import org.eclipse.jst.ws.jaxws.dom.runtime.api.IWebService;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.WSAnnotationFeatures;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.annotation.AnnotationAdapterFactory;
import org.eclipse.jst.ws.jaxws.dom.runtime.persistence.annotation.IAnnotationAdapter;
import org.eclipse.jst.ws.jaxws.dom.runtime.tests.dom.persistence.annotation.impl.AbstractLocatorsTest;
import org.eclipse.jst.ws.jaxws.dom.runtime.validation.AbstractValidationConstraint;
import org.eclipse.jst.ws.jaxws.dom.runtime.validation.IConstraintStatusExtended;
import org.eclipse.jst.ws.jaxws.dom.runtime.validation.IProblemLocation;
import org.eclipse.jst.ws.jaxws.testutils.jmock.Mock;
import org.eclipse.jst.ws.jaxws.utils.annotations.ILocator;
public class AbstractValidationConstraintTest extends AbstractLocatorsTest
{
private MyAbstractValidationConstraint constraint;
private Mock<IResource> resource;
@Override
public void setUp()
{
super.setUp();
resource = mock(IResource.class);
Mock<IConstraintDescriptor> descriptor = mock(IConstraintDescriptor.class);
descriptor.stubs().method("getPluginId").will(returnValue("plugin.id"));
descriptor.stubs().method("getSeverity").will(returnValue(ConstraintSeverity.ERROR));
descriptor.stubs().method("getStatusCode").will(returnValue(-1));
constraint = new MyAbstractValidationConstraint(descriptor.proxy());
}
public void testCreateOkStatus() throws JavaModelException
{
IWebService ws = DomFactory.eINSTANCE.createIWebService();
IConstraintStatusExtended cs = constraint.createOkStatus(ws);
assertNotNull("Constraint status is null", cs);
assertTrue(cs.isOK());
assertEquals(0, cs.getResultLocus().size());
assertEquals(0, cs.getProblemLocations().size());
}
public void testCreateErrorStatus() throws JavaModelException
{
IWebService ws = DomFactory.eINSTANCE.createIWebService();
IConstraintStatusExtended cs = constraint.createStatus(ws, "error message", null, null);
assertNotNull(cs);
assertFalse(cs.isOK());
IProblemLocation pl = cs.getProblemLocations().iterator().next();
assertEquals(resource.proxy(), pl.getResource());
assertNotNull(pl.getLocator());
assertEquals(0, pl.getLocator().getStartPosition());
assertEquals(0, pl.getLocator().getLength());
}
public void testGetLocatorNoAnnotations() throws JavaModelException
{
IWebService ws = DomFactory.eINSTANCE.createIWebService();
IProblemLocation pl = constraint.getLocator(ws, null, null);
assertEquals(resource.proxy(), pl.getResource());
}
public void testGetLocatorForAnnotation() throws JavaModelException
{
IWebService ws = DomFactory.eINSTANCE.createIWebService();
Mock<IJavaElement> javaElement = mock(IJavaElement.class);
javaElement.stubs().method("getResource").will(returnValue(resource.proxy()));
annotation.stubs().method("getAppliedElement").will(returnValue(javaElement.proxy()));
final IAnnotationAdapter adapter = (IAnnotationAdapter)AnnotationAdapterFactory.INSTANCE.adapt(ws, IAnnotationAdapter.class);
adapter.addAnnotation(WSAnnotationFeatures.WS_ANNOTATION, annotation.proxy());
IProblemLocation pl = constraint.getLocator(ws, WSAnnotationFeatures.WS_ANNOTATION, null);
assertEquals(resource.proxy(), pl.getResource());
assertEquals(annotation.proxy().getLocator(), pl.getLocator());
}
public void testGetLocatorForAttribute() throws JavaModelException
{
IWebService ws = DomFactory.eINSTANCE.createIWebService();
Mock<IJavaElement> javaElement = mock(IJavaElement.class);
javaElement.stubs().method("getResource").will(returnValue(resource.proxy()));
annotation.stubs().method("getAppliedElement").will(returnValue(javaElement.proxy()));
final IAnnotationAdapter adapter = (IAnnotationAdapter)AnnotationAdapterFactory.INSTANCE.adapt(ws, IAnnotationAdapter.class);
adapter.addAnnotation(WSAnnotationFeatures.WS_ANNOTATION, annotation.proxy());
IProblemLocation pl = constraint.getLocator(ws, WSAnnotationFeatures.WS_ANNOTATION, "param1");
assertEquals(resource.proxy(), pl.getResource());
assertEquals(param1.getValue().getLocator(), pl.getLocator());
}
protected class MyAbstractValidationConstraint extends AbstractValidationConstraint
{
public MyAbstractValidationConstraint(IConstraintDescriptor descriptor) {
super(descriptor);
}
public IStatus validate(IValidationContext ctx) {
return null;
}
@Override
public IConstraintStatusExtended createOkStatus(EObject object) throws JavaModelException {
return super.createOkStatus(object);
}
@Override
protected IConstraintStatusExtended createStatus(EObject object, String errorMessage, String annFQName, String attributeName) throws JavaModelException {
return super.createStatus(object, errorMessage, annFQName, attributeName);
}
@Override
protected IResource findResource(EObject eObject) throws JavaModelException {
return resource.proxy();
}
public IProblemLocation getLocator(EObject eObject, String annFQName, String attributeName) throws JavaModelException {
return super.getLocator(eObject, annFQName, attributeName);
}
@Override
protected ILocator getLocatorForImplementation(final EObject eObject) throws JavaModelException
{
return new ILocator() {
public int getLength() { return 0; }
public int getStartPosition() { return 0; }
public int getLineNumber() { return 0; }
};
}
@Override
protected IStatus doValidate(IValidationContext ctx) throws JavaModelException {
return null;
}
}
}