blob: f0dbe7f21d90e8dae124ce92ce2b90787824aecd [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.utils.tests.internal.annotations;
import java.lang.annotation.ElementType;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.ITypeParameter;
import org.eclipse.jst.ws.jaxws.testutils.jmock.Mock;
import org.eclipse.jst.ws.jaxws.testutils.jmock.MockObjectTestCase;
import org.eclipse.jst.ws.jaxws.utils.annotations.IAnnotation;
import org.eclipse.jst.ws.jaxws.utils.internal.annotations.impl.AnnotationProperty;
import org.eclipse.jst.ws.jaxws.utils.internal.annotations.impl.AnnotationPropertyContainer;
import org.eclipse.jst.ws.jaxws.utils.internal.annotations.impl.AttributeTypeEnum;
public class AnnotationPropertyContainerTest extends MockObjectTestCase
{
private Mock<IType> type = mock(IType.class);
private Mock<IMethod> method = mock(IMethod.class);
private Mock<ITypeParameter> typeParameter = mock(ITypeParameter.class);
public void testBase() throws Exception
{
AnnotationPropertyContainer container = new AnnotationPropertyContainer();
try
{
container.addAnnotationProperty(null, null);
fail("NullPointerException was not thrown!");
}
catch (NullPointerException e)
{
assertTrue(true);
}
try
{
AnnotationProperty annotationProperty = new AnnotationProperty("annotationName", "attributeName", "value", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, null);
fail("NullPointerException was not thrown!");
}
catch (NullPointerException e)
{
assertTrue(true);
}
try
{
AnnotationProperty annotationProperty = new AnnotationProperty("annotationName", "attributeName", "value", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.PACKAGE);
fail("IllegalArgumentException was not thrown!");
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
}
public void testTypeLevel() throws Exception
{
AnnotationPropertyContainer container = new AnnotationPropertyContainer();
AnnotationProperty annotationProperty = new AnnotationProperty("annotationName", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 1);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 0);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 0);
Set<IAnnotation<IType>> typeAnnotations = container.getTypeAnnotations(type.proxy());
for (IAnnotation<IType> annotation : typeAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("annotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
container = new AnnotationPropertyContainer();
annotationProperty = new AnnotationProperty("annotationName1", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName2", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName3", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("annotationName4", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 4);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 0);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 0);
typeAnnotations = container.getTypeAnnotations(type.proxy());
Set<String> names = new HashSet<String>();
names.clear();
names.add("annotationName1");
names.add("annotationName2");
names.add("annotationName3");
names.add("annotationName4");
for (IAnnotation<IType> annotation : typeAnnotations)
{
assertTrue(names.contains(annotation.getAnnotationName()));
names.remove(annotation.getAnnotationName());
if(annotation.getAnnotationName().equals("annotationName1"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
}
if(annotation.getAnnotationName().equals("annotationName2"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
}
if(annotation.getAnnotationName().equals("annotationName3"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
}
if(annotation.getAnnotationName().equals("annotationName4"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
}
}
public void testMethodLevel() throws Exception
{
AnnotationPropertyContainer container = new AnnotationPropertyContainer();
AnnotationProperty annotationProperty = new AnnotationProperty("annotationName", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 0);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 0);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 1);
Set<IAnnotation<IMethod>> methodAnnotations = container.getMethodAnnotations(method.proxy());
for (IAnnotation<IMethod> annotation : methodAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("annotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
container = new AnnotationPropertyContainer();
annotationProperty = new AnnotationProperty("annotationName1", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName2", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName3", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("annotationName4", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 0);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 0);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 4);
methodAnnotations = container.getMethodAnnotations(method.proxy());
Set<String> names = new HashSet<String>();
names.clear();
names.add("annotationName1");
names.add("annotationName2");
names.add("annotationName3");
names.add("annotationName4");
for (IAnnotation<IMethod> annotation : methodAnnotations)
{
assertTrue(names.contains(annotation.getAnnotationName()));
names.remove(annotation.getAnnotationName());
if(annotation.getAnnotationName().equals("annotationName1"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
}
if(annotation.getAnnotationName().equals("annotationName2"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
}
if(annotation.getAnnotationName().equals("annotationName3"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
}
if(annotation.getAnnotationName().equals("annotationName4"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
}
}
public void testParameterLevel() throws Exception
{
AnnotationPropertyContainer container = new AnnotationPropertyContainer();
AnnotationProperty annotationProperty = new AnnotationProperty("annotationName", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 0);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 1);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 0);
Set<IAnnotation<ITypeParameter>> parameterAnnotations = container.getParameterAnnotations(typeParameter.proxy());
for (IAnnotation<ITypeParameter> annotation : parameterAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("annotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
container = new AnnotationPropertyContainer();
annotationProperty = new AnnotationProperty("annotationName1", "attributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName2", "attributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName3", "attributeNameQualified", "org.eclipse.testEnumeration.VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("annotationName4", "attributeNameString", "valueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 0);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 4);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 0);
parameterAnnotations = container.getParameterAnnotations(typeParameter.proxy());
Set<String> names = new HashSet<String>();
names.clear();
names.add("annotationName1");
names.add("annotationName2");
names.add("annotationName3");
names.add("annotationName4");
for (IAnnotation<ITypeParameter> annotation : parameterAnnotations)
{
assertTrue(names.contains(annotation.getAnnotationName()));
names.remove(annotation.getAnnotationName());
if(annotation.getAnnotationName().equals("annotationName1"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameBoolean").equals("true"));
}
if(annotation.getAnnotationName().equals("annotationName2"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameInteger").equals("100"));
}
if(annotation.getAnnotationName().equals("annotationName3"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameQualified").equals("org.eclipse.testEnumeration.VALUE"));
}
if(annotation.getAnnotationName().equals("annotationName4"))
{
assertTrue(annotation.getParamValuePairs().size() == 1);
assertTrue(annotation.getPropertyValue("attributeNameString").equals("valueString"));
}
}
}
public void testCombined() throws Exception
{
AnnotationPropertyContainer container = new AnnotationPropertyContainer();
AnnotationProperty annotationProperty = new AnnotationProperty("paramAnnotationName", "paramAttributeNameBoolean", "true", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("paramAnnotationName", "paramAttributeNameInteger", "100", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("paramAnnotationName", "paramAttributeNameQualified", "org.eclipse.testEnumeration.PARAM_VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("paramAnnotationName", "paramAttributeNameString", "paramValueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.PARAMETER);
annotationProperty = new AnnotationProperty("methodAnnotationName", "methodAttributeNameBoolean", "false", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("methodAnnotationName", "methodAttributeNameInteger", "101", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("methodAnnotationName", "methodAttributeNameQualified", "org.eclipse.testEnumeration.METHOD_VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("methodAnnotationName", "methodAttributeNameString", "methodValueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.METHOD);
annotationProperty = new AnnotationProperty("typeAnnotationName", "typeAttributeNameBoolean", "false", AttributeTypeEnum.BOOLEAN);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("typeAnnotationName", "typeAttributeNameInteger", "1", AttributeTypeEnum.INTEGER);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("typeAnnotationName", "typeAttributeNameQualified", "org.eclipse.testEnumeration.TYPE_VALUE", AttributeTypeEnum.QUALIFIED_NAME);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
annotationProperty = new AnnotationProperty("typeAnnotationName", "typeAttributeNameString", "typeValueString", AttributeTypeEnum.STRING);
container.addAnnotationProperty(annotationProperty, ElementType.TYPE);
assertTrue(container.getTypeAnnotations(type.proxy()).size() == 1);
assertTrue(container.getParameterAnnotations(typeParameter.proxy()).size() == 1);
assertTrue(container.getMethodAnnotations(method.proxy()).size() == 1);
Set<IAnnotation<ITypeParameter>> parameterAnnotations = container.getParameterAnnotations(typeParameter.proxy());
for (IAnnotation<ITypeParameter> annotation : parameterAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("paramAnnotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("paramAttributeNameBoolean").equals("true"));
assertTrue(annotation.getPropertyValue("paramAttributeNameInteger").equals("100"));
assertTrue(annotation.getPropertyValue("paramAttributeNameQualified").equals("org.eclipse.testEnumeration.PARAM_VALUE"));
assertTrue(annotation.getPropertyValue("paramAttributeNameString").equals("paramValueString"));
}
Set<IAnnotation<IMethod>> methodAnnotations = container.getMethodAnnotations(method.proxy());
for (IAnnotation<IMethod> annotation : methodAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("methodAnnotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("methodAttributeNameBoolean").equals("false"));
assertTrue(annotation.getPropertyValue("methodAttributeNameInteger").equals("101"));
assertTrue(annotation.getPropertyValue("methodAttributeNameQualified").equals("org.eclipse.testEnumeration.METHOD_VALUE"));
assertTrue(annotation.getPropertyValue("methodAttributeNameString").equals("methodValueString"));
}
Set<IAnnotation<IType>> typeAnnotations = container.getTypeAnnotations(type.proxy());
for (IAnnotation<IType> annotation : typeAnnotations)
{
assertTrue(annotation.getAnnotationName().equals("typeAnnotationName"));
assertTrue(annotation.getParamValuePairs().size() == 4);
assertTrue(annotation.getPropertyValue("typeAttributeNameBoolean").equals("false"));
assertTrue(annotation.getPropertyValue("typeAttributeNameInteger").equals("1"));
assertTrue(annotation.getPropertyValue("typeAttributeNameQualified").equals("org.eclipse.testEnumeration.TYPE_VALUE"));
assertTrue(annotation.getPropertyValue("typeAttributeNameString").equals("typeValueString"));
}
}
}