blob: c911e39a5d9cff8e9fbe1e94c75006ae0a13e458 [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
*
* 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.role.bound.torole;
import junit.framework.Test;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.objectteams.otdt.core.IOTJavaElement;
import org.eclipse.objectteams.otdt.core.IOTType;
import org.eclipse.objectteams.otdt.core.IRoleType;
import org.eclipse.objectteams.otdt.core.OTModelManager;
import org.eclipse.objectteams.otdt.tests.otmodel.RetargetableFileBasedModelTest;
/**
* @author stephan
*
* This class contains testing methods for a test setting with an empty role class
* where the role class is bound to a baseclass which is a role of a lower team class
*/
public class LayeredTeamsTests extends RetargetableFileBasedModelTest
{
private IOTType _roleOTElem;
public LayeredTeamsTests(String name)
{
super(name);
}
public static Test suite()
{
if (true)
{
return new Suite(LayeredTeamsTests.class);
}
junit.framework.TestSuite suite = new Suite(LayeredTeamsTests.class
.getName());
return suite;
}
public void setUpSuite() throws Exception
{
super.setUpSuite();
}
public void testFieldAnchor() throws Exception
{
getTestSetting().setTeamClass("Team_1");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getTestSetting().getRoleJavaElement());
}
/** Same as above but using old path syntax. */
public void testFieldAnchorPath() throws Exception
{
getTestSetting().setTeamClass("Team_1b");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getTestSetting().getRoleJavaElement());
}
public void testBaseAnchor() throws Exception
{
getTestSetting().setTeamClass("Team_2");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getAndTestInnerRole());
}
/** Same as above but using old path syntax. */
public void testBaseAnchorPath() throws Exception
{
getTestSetting().setTeamClass("Team_2b");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getAndTestInnerRole());
}
public void testQualifiedBaseAnchor() throws Exception
{
getTestSetting().setTeamClass("Team_3");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getAndTestInnerRole());
}
// no path variant of Team_3: path syntax "SampleRole.base.LowerRole" is illegal.
// witness for IllegalArgumentException in Signature.appendTypeSignature(char[], int, boolean, StringBuffer, boolean)
// requires capability to handle type anchors in char-encoded signatures
public void testAnchoredCalloutSignature() throws Exception
{
getTestSetting().setTeamClass("Team_4");
getTestSetting().setUp();
performTest("TeamB.java", "TeamB", getTestSetting().getRoleJavaElement());
for (IJavaElement member : _roleOTElem.getChildren()) {
if (member.getElementType() == IOTJavaElement.CALLOUT_MAPPING) {
assertEquals("Callout signature not as expected",
"isEqual(LowerRole<@teamB>) -> isEqual(LowerRole<@teamB>)",
member.getElementName());
}
}
}
private IType getAndTestInnerRole() throws JavaModelException {
IType roleMid= getTestSetting().getRoleJavaElement();
assertTrue(roleMid.exists());
IJavaElement[] inner= roleMid.getChildren();
assertTrue(inner != null && inner.length > 0);
assertTrue(inner[0] instanceof IType);
IType type = (IType)inner[0];
assertEquals(type.getElementName(), "InnerRole");
return type;
}
void performTest(String baseCU, String baseTeam, IType roleJavaElement)
throws JavaModelException
{
ICompilationUnit baseUnit = getCompilationUnit(
getTestProjectDir(),
"boundtorole",
"boundtorole.basepkg",
baseCU);
IType baseTeamJavaElem = baseUnit.getType(baseTeam);
assertTrue("base team should exist", baseTeamJavaElem.exists());
IJavaElement[] baseChildren= baseTeamJavaElem.getChildren();
assertTrue("team should have children",baseChildren != null && baseChildren.length>0);
assertTrue("first child should be the role (IType)", baseChildren[0] instanceof IType);
IType baseJavaElem= (IType) baseChildren[0];
assertNotNull(baseJavaElem);
assertTrue(baseJavaElem.exists());
assertEquals(baseJavaElem.getElementName(), "LowerRole");
assertNotNull(roleJavaElement);
assertTrue(roleJavaElement.exists());
_roleOTElem = OTModelManager.getOTElement(roleJavaElement);
assertNotNull(_roleOTElem);
assertTrue(_roleOTElem instanceof IRoleType);
IRoleType roleRoleOTElem = (IRoleType) _roleOTElem;
IType baseClassJavaElem = roleRoleOTElem.getBaseClass();
assertNotNull(baseClassJavaElem);
assertEquals("base class should be expected lower role", baseJavaElem, baseClassJavaElem);
IOTType baseClassOTElem = OTModelManager.getOTElement(baseClassJavaElem);
assertNotNull(baseClassOTElem);
assertTrue("base class should be role", baseClassOTElem.isRole());
}
}