blob: c199052ceb76f9294e4f48b24fe130d3295b0cc0 [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
* for its Fraunhofer Institute and Computer Architecture and Software
* Technology (FIRST), Berlin, Germany and Technical University Berlin,
* Germany.
*
* 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
* $Id: CalloutMappingTest.java 23494 2010-02-05 23:06:44Z stephan $
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Fraunhofer FIRST - Initial API and implementation
* Technical University Berlin - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otdt.tests.otmodel;
import junit.framework.Test;
import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.SourceType;
import org.eclipse.objectteams.otdt.core.ICalloutMapping;
import org.eclipse.objectteams.otdt.core.ICalloutToFieldMapping;
import org.eclipse.objectteams.otdt.core.IMethodMapping;
import org.eclipse.objectteams.otdt.core.IOTType;
import org.eclipse.objectteams.otdt.core.IRoleType;
import org.eclipse.objectteams.otdt.core.OTModelManager;
/**
* $Id: CalloutMappingTest.java 23494 2010-02-05 23:06:44Z stephan $
*
* testcase:
* a team class with a bound role class and various callout binding declarations
*/
public class CalloutMappingTest extends FileBasedModelTest
{
private IType _teamJavaElem;
private IType _roleJavaElem;
public CalloutMappingTest(String name)
{
super(name);
}
static boolean ALL_TESTS=true;
public static Test suite()
{
if (ALL_TESTS) return new Suite(CalloutMappingTest.class);
junit.framework.TestSuite suite = new Suite(CalloutMappingTest.class.getName());
return suite;
}
public void setUpSuite() throws Exception
{
setTestProjectDir("CalloutMapping");
super.setUpSuite();
}
public void setUp() throws Exception
{
super.setUp();
try
{
ICompilationUnit teamUnit = getCompilationUnit(
"CalloutMapping",
"src",
"teampkg",
"SampleTeam" + ".java");
_teamJavaElem = teamUnit.getType("SampleTeam");
_roleJavaElem = _teamJavaElem.getType("SampleRole");
}
catch (JavaModelException ex)
{
ex.printStackTrace();
}
}
private IRoleType getRoleOTElem()
{
if ((_roleJavaElem != null) && (_roleJavaElem.exists()))
{
IOTType roleOTElem = OTModelManager.getOTElement(_roleJavaElem);
if ((roleOTElem != null) && (roleOTElem instanceof IRoleType))
{
return ((IRoleType) roleOTElem);
}
}
return null;
}
public void testExistenceOfMappings() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] allMethodMappings = roleOTElem.getMethodMappings();
assertEquals(4, allMethodMappings.length);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
assertEquals(4, calloutMethodMappings.length);
IMethodMapping[] callinMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLINS);
assertEquals(0, callinMethodMappings.length);
}
public void testMapping1FromMemento() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[0];
assertNotNull(mapping);
String token = mapping.getHandleIdentifier();
SourceType sourceType = (SourceType)roleOTElem.getCorrespondingJavaElement();
IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());
assertEquals("Elements should be equal", mapping, fromMemento);
assertTrue("Element should exist", fromMemento.exists());
assertTrue("Mapping should have signature", ((IMethodMapping)fromMemento).hasSignature());
}
public void testMapping2FromMemento() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[1];
assertNotNull(mapping);
String token = mapping.getHandleIdentifier();
SourceType sourceType = (SourceType)roleOTElem.getCorrespondingJavaElement();
IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());
assertEquals("Elements should be equal", mapping, fromMemento);
assertTrue("Element should exist", fromMemento.exists());
assertFalse("Mapping should not have signature", ((IMethodMapping)fromMemento).hasSignature());
}
public void testMapping3FromMemento() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[2];
assertNotNull(mapping);
String token = mapping.getHandleIdentifier();
SourceType sourceType = (SourceType)roleOTElem.getCorrespondingJavaElement();
IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());
assertEquals("Elements should be equal", mapping, fromMemento);
assertTrue("Element should exist", fromMemento.exists());
ICalloutMapping mappingFromMemento = (ICalloutMapping)fromMemento;
assertTrue("Mapping should have signature", mappingFromMemento.hasSignature());
assertTrue("Expecting 1 role parameter", mappingFromMemento.getRoleMethodHandle().getArgumentTypes().length == 1);
assertTrue("Expecting 2 base parameters", mappingFromMemento.getBaseMethodHandle().getArgumentTypes().length == 2);
}
public void testMapping4FromMemento() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[3];
assertNotNull(mapping);
String token = mapping.getHandleIdentifier();
SourceType sourceType = (SourceType)roleOTElem.getCorrespondingJavaElement();
IJavaElement fromMemento = JavaCore.create(token, sourceType.getCompilationUnit().getOwner());
assertEquals("Elements should be equal", mapping, fromMemento);
assertTrue("Element should exist", fromMemento.exists());
assertTrue("Expecting callout to field", fromMemento instanceof ICalloutToFieldMapping);
ICalloutToFieldMapping mappingFromMemento = (ICalloutToFieldMapping)fromMemento;
assertTrue("Mapping should have signature", mappingFromMemento.hasSignature());
assertFalse("Expecting no setter", mappingFromMemento.getBaseFieldHandle().isSetter());
}
public void testCtfWithAnnotation() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[3];
assertNotNull(mapping);
IAnnotation[] annotations = mapping.getAnnotations();
assertTrue("Annotations should not be null", annotations != null);
assertEquals("Wrong number of annotations", 1, annotations.length);
assertEquals("Wrong annotation type", "SuppressWarnings", annotations[0].getElementName());
IMemberValuePair[] memberValuePairs = annotations[0].getMemberValuePairs();
assertTrue("Pairs should not be null", memberValuePairs != null);
assertEquals("Wrong number of pairs", 1, memberValuePairs.length);
assertEquals("Wrong value", "decapsulation", memberValuePairs[0].getValue());
}
public void testCtfExceptions() throws JavaModelException
{
IRoleType roleOTElem = getRoleOTElem();
assertNotNull(roleOTElem);
IMethodMapping[] calloutMethodMappings = roleOTElem.getMethodMappings(IRoleType.CALLOUTS);
IMethodMapping mapping = calloutMethodMappings[3];
assertNotNull(mapping);
assertEquals("Wrong number of declared exceptions", 0, ((IMethod)mapping).getExceptionTypes().length); // and don't NPE
}
}