blob: 705857519129c13b199d7a33e964c455c3be3793 [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.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.selection.codeselect;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.WorkingCopyOwner;
import org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests;
/**
* @author brcan
*/
public class CodeSelectionTests extends AbstractJavaModelTests
{
public static Test suite()
{
if (false)
{
TestSuite suite = new Suite(CodeSelectionTests.class.getName());
suite.addTest(new CodeSelectionTests("testMethodReference1"));
return suite;
}
return new Suite(CodeSelectionTests.class);
}
public CodeSelectionTests(String name)
{
super(name);
}
public void setUpSuite() throws Exception
{
super.setUpSuite();
setUpJavaProject("CodeSelection");
}
public void tearDownSuite() throws Exception
{
deleteProject("CodeSelection");
super.tearDownSuite();
}
// public void testAbstractMethod() throws JavaModelException
// {
// ICompilationUnit cu = getCompilationUnit(
// "Resolve",
// "src",
// "",
// "ResolveAbstractMethod.java");
// IJavaElement[] elements = codeSelect(cu, "foo", "foo");
// assertElementsEqual(
// "Unexpected elements",
// "foo() [in SuperInterface [in SuperInterface.java [in <default> [in src [in Resolve]]]]]",
// elements);
// }
//testing bound base classes
public void testBaseclass1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T1.java");
IJavaElement[] elements = codeSelect(cu, "B1", "B1");
assertElementsEqual(
"Unexpected elements",
"B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]",
elements);
}
// testing base constructor invocation:
public void testBaseclass1b() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T1.java");
IJavaElement[] elements = codeSelect(cu, "base();", "base");
assertElementsEqual(
"Unexpected elements",
"B1() [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testBaseclass2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T2.java");
IJavaElement[] elements = codeSelect(cu, "basepkg.B1", "basepkg.B1");
assertElementsEqual(
"Unexpected elements",
"B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]",
elements);
}
public void testBaseclass3() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T3.java");
IJavaElement[] elements = codeSelect(cu, "T1", "T1");
assertElementsEqual(
"Unexpected elements",
"T1 [in T1.java [in teampkg1 [in src [in CodeSelection]]]]",
elements);
}
public void testBaseclass4() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T4.java");
IJavaElement[] elements = codeSelect(cu, "teampkg2.T0", "teampkg2.T0");
assertElementsEqual(
"Unexpected elements",
"T0 [in T0.java [in teampkg2 [in src [in CodeSelection]]]]",
elements);
}
public void testBaseclass5() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T5.java");
IJavaElement[] elements = codeSelect(cu, "t4.R1", "t4.R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in T4 [in T4.java [in teampkg1 [in src [in CodeSelection]]]]]",
elements);
}
public void testBaseclass6() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T6.java");
IJavaElement[] elements = codeSelect(cu, "base.R1", "base.R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in T5 [in T5.java [in teampkg1 [in src [in CodeSelection]]]]]",
elements);
}
public void testBaseclass6b() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T6.java");
IJavaElement[] elements = codeSelect(cu, "R1<@base>", "R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in T5 [in T5.java [in teampkg1 [in src [in CodeSelection]]]]]",
elements);
}
public void testBaseclass6c() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T6.java");
IJavaElement[] elements = codeSelect(cu, "R1<@TR6.base> {}", "R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in T5 [in T5.java [in teampkg1 [in src [in CodeSelection]]]]]",
elements);
}
// select the superclass ref from one rofi to another
public void testRoleSuperclass() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2.T2", "R2.java");
IJavaElement[] elements = codeSelect(cu, "R1", "R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in R1.java [in teampkg2.T2 [in src [in CodeSelection]]]]",
elements);
}
//testing type declarations
public void testTeamDeclaration() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T0.java");
IJavaElement[] elements = codeSelect(cu, "T0", "T0");
assertElementsEqual(
"Unexpected elements",
"T0 [in T0.java [in teampkg2 [in src [in CodeSelection]]]]",
elements);
}
public void testNestedTeamDeclaration() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "TR1", "TR1");
assertElementsEqual(
"Unexpected elements",
"TR1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]",
elements);
}
public void testInlinedRoleDeclaration() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "R1 {", "R1");
assertElementsEqual(
"Unexpected elements",
"R1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]",
elements);
}
//TODO(gbr) test role declaration in role file.
//testing method declarations
public void testMethodDeclaration1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "t1m1()", "t1m1");
assertElementsEqual(
"Unexpected elements",
"t1m1() [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]",
elements);
}
public void testMethodDeclaration2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "tr1m1()", "tr1m1");
assertElementsEqual(
"Unexpected elements",
"tr1m1() [in TR1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]]",
elements);
}
public void testMethodDeclaration3() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "r1m1(){/*roleMethod*/}", "r1m1");
assertElementsEqual(
"Unexpected elements",
"r1m1() [in R1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]]",
elements);
}
public void testMethodReference1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg1", "T7.java");
IJavaElement[] elements = codeSelect(cu, "collect(strings);", "collect");
assertElementsEqual(
"Unexpected elements",
"collect(Set<String>) [in R1 [in T7 [in T7.java [in teampkg1 [in src [in CodeSelection]]]]]]",
elements);
}
//testing field declarations
public void testFieldDeclaration1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "t1_f", "t1_f");
assertElementsEqual(
"Unexpected elements",
"t1_f [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]",
elements);
}
public void testFieldDeclaration2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "tr1_f", "tr1_f");
assertElementsEqual(
"Unexpected elements",
"tr1_f [in TR1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]]",
elements);
}
public void testFieldDeclaration3() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "teampkg2", "T1.java");
IJavaElement[] elements = codeSelect(cu, "r1_f;//roleField", "r1_f");
assertElementsEqual(
"Unexpected elements",
"r1_f [in R1 [in T1 [in T1.java [in teampkg2 [in src [in CodeSelection]]]]]]",
elements);
}
// actually a dup of https://bugs.eclipse.org/bugs/show_bug.cgi?id=204417
public void _testRegression1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "regression", "Client1.java");
IJavaElement[] elements = codeSelect(cu, "A(a.cs)", "A");
assertElementsEqual(
"Unexpected elements",
"A [in A.java [in regression [in src [in CodeSelection]]]]",
elements);
}
/**
* Select a callout mapping (role method spec)
*/
public void testCallout1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "rm2", "rm2");
assertElementsEqual(
"Unexpected elements",
"rm2(int) -> bm1(int) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]",
elements);
}
/**
* Select a callout mapping (role method spec)
*/
public void testCalloutToFieldShorthand() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "jon; // c-t-f shorthand", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
/**
* Select a callin replace mapping (role method spec)
*/
public void testCallin1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "rm1(int i, Collection c) <-", "rm1");
assertElementsEqual(
"Unexpected elements",
"rm1(int, Collection) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]",
elements);
}
/**
* Select argument name inside a callin parameter mapping.
*/
public void testParamMapping1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "i <- x,", "i");
assertElementsEqual(
"Unexpected elements",
"i [in rm1(int, Collection) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]]",
elements);
}
/**
* Select argument name inside a callout parameter mapping.
*/
public void testParamMapping2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "x,//callout mapping", "x");
assertElementsEqual(
"Unexpected elements",
"x [in rm2(int) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]]",
// codeSelect cannot handle children of OTJavaElement :(, uses corresponding SourceMethod as parent
// "x [in rm2(int)->bm1(int) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]]",
elements);
}
/**
* Select method call inside a callout parameter mapping.
*/
public void testParamMapping3() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "doubleIt(result)", "doubleIt");
assertElementsEqual(
"Unexpected elements",
"doubleIt(int) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]",
// codeSelect cannot handle children of OTJavaElement :(, uses corresponding SourceMethod as parent
// "x [in rm2(int)->bm1(int) [in R [in MappingsTeam1 [in MappingsTeam1.java [in mappings [in src [in CodeSelection]]]]]]]",
elements);
}
/**
* Select base field reference inside a callout-to-field parameter mapping.
*/
public void testParamMapping4() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "jon } // c-t-f", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
/**
* Select base field reference inside a callin parameter mapping.
*/
public void testParamMapping5() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "MappingsTeam1.java");
IJavaElement[] elements = codeSelect(cu, "jon } // callin", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testInferredCallout1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "InferredCallouts.java");
IJavaElement[] elements = codeSelect(cu, "bm1(4)", "bm1");
assertElementsEqual(
"Unexpected elements",
"bm1(int) [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testInferredCallout2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "InferredCallouts.java");
IJavaElement[] elements = codeSelect(cu, "jon = 3L; // qualified version", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testInferredCallout3() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "InferredCallouts.java");
IJavaElement[] elements = codeSelect(cu, "jon; // callout-to-field read", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testInferredCallout4() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "InferredCallouts.java");
IJavaElement[] elements = codeSelect(cu, "jon = 3L; // unqualified version", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testInferredCallout5() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "mappings", "InferredCallouts.java");
IJavaElement[] elements = codeSelect(cu, "jon; // unqualified: callout-to-field read", "jon");
assertElementsEqual(
"Unexpected elements",
"jon [in B1 [in B1.java [in basepkg [in src [in CodeSelection]]]]]",
elements);
}
public void testRoleCreation1() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "RoleCreation.java");
IJavaElement[] elements = codeSelect(cu, "R<@t>(\"1\");", "R");
assertElementsEqual(
"Unexpected elements",
"R(String) [in R [in RoleCreation [in RoleCreation.java [in statements [in src [in CodeSelection]]]]]]",
elements);
}
public void testRoleCreation2() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "RoleCreation.java");
IJavaElement[] elements = codeSelect(cu, "R(\"2\");", "R");
assertElementsEqual(
"Unexpected elements",
"R(String) [in R [in RoleCreation [in RoleCreation.java [in statements [in src [in CodeSelection]]]]]]",
elements);
}
// awaiting progress in Trac #192
public void _testRoleCreation3() throws JavaModelException
{
ProblemRequestor problemRequestor = new ProblemRequestor();
WorkingCopyOwner owner = newWorkingCopyOwner(problemRequestor);
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "RoleCreation.java");
cu.getWorkingCopy(owner, null);
IJavaElement[] elements = codeSelect(cu, "RProtected<@t>(\"3\");", "RProtected");
assertProblems("Unexpected problems",
"----------\n" +
"1. ERROR in /CodeSelection/src/statements/RoleCreation.java\n" +
"Illegal parameterized use of non-public role RProtected (OTJLD 1.2.3(b)).\n" +
"----------\n" +
"2. ERROR in /CodeSelection/src/statements/RoleCreation.java\n" +
"Illegal parameterized use of non-public role RProtected (OTJLD 1.2.3(b)).\n" +
"----------\n",
problemRequestor);
assertElementsEqual(
"Unexpected elements",
"RProtected(String) [in RProtected [in RoleCreation [in RoleCreation.java [in statements [in src [in CodeSelection]]]]]]",
elements);
}
public void testRoleCreation4() throws JavaModelException
{
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "RoleCreation.java");
IJavaElement[] elements = codeSelect(cu, "RProtected(\"4\");", "RProtected");
assertElementsEqual(
"Unexpected elements",
"RProtected(String) [in RProtected [in RoleCreation [in RoleCreation.java [in statements [in src [in CodeSelection]]]]]]",
elements);
}
public void testTSuperCall1() throws JavaModelException {
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "TSuper.java");
IJavaElement[] elements = codeSelect(cu, "m(1);", "m");
assertElementsEqual(
"Unexpected elements",
"m(int) [in R1 [in Inner2 [in Mid1 [in TSuper [in TSuper.java [in statements [in src [in CodeSelection]]]]]]]]",
elements);
}
public void testTSuperCall2() throws JavaModelException {
ICompilationUnit cu = getCompilationUnit("CodeSelection", "src", "statements", "TSuper.java");
IJavaElement[] elements = codeSelect(cu, "m(2);", "m");
assertElementsEqual(
"Unexpected elements",
"m(int) [in R1 [in Inner1 [in Mid2 [in TSuper [in TSuper.java [in statements [in src [in CodeSelection]]]]]]]]",
elements);
}
}