/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.ext.java.client.core.model;
import org.eclipse.che.ide.ext.java.jdt.internal.core.SelectionResult;
import org.junit.Test;
import static org.eclipse.che.ide.ext.java.jdt.internal.core.SelectionResult.Type;
import static org.fest.assertions.Assertions.assertThat;
/**
* @author Evgen Vidolob
*/
public class ResolveTest extends AbstractJavaModelTests {
@Test
public void testArgumentName1() throws Exception {
StringBuilder builder = new StringBuilder();
builder.append("public class ResolveArgumentName {\n");
builder.append("\tpublic void foo(Object var1, int var2){\n");
builder.append("\t\n");
builder.append("\t}\n");
builder.append("}");
SelectionResult result = codeSelect(builder.toString(), "ResolveArgumentName", "var1", "var1");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.isSource()).isTrue();
assertThat(result.getOffset()).isEqualTo(builder.indexOf("var1"));
}
@Test
public void testArrayLength() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveArrayLength.java");
SelectionResult result = codeSelect(cu, "ResolveArrayLength", "length", "length");
assertThat(result).isNull();
}
@Test
public void testClass1() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass1.java");
SelectionResult result = codeSelect(cu, "ResolveClass1", "AtomicBoolean", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testClass2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass2.java");
SelectionResult result = codeSelect(cu, "ResolveClass2", "AtomicBoolean", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testClass3() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass3.java");
SelectionResult result = codeSelect(cu, "ResolveClass3", "AtomicBoolean[]{", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testClass4() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass4.java");
SelectionResult result = codeSelect(cu, "ResolveClass4", "AtomicBoolean", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testClass5() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass5.java");
SelectionResult result = codeSelect(cu, "ResolveClass5", "AtomicBoolean", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testClass6() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveClass6.java");
SelectionResult result = codeSelect(cu, "ResolveClass6", "AtomicBoolean", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testResolveConstructor() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveConstructor.java");
SelectionResult result =
codeSelect(cu, "ResolveConstructor", "ResolveConstructor(\"", "ResolveConstructor");
assertThat(result).isNotNull();
assertThat(result.isSource()).isTrue();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(81);
assertThat(result.getFqn()).isEqualTo("ResolveConstructor");
assertThat(result.getKey()).isEqualTo("LResolveConstructor;.ResolveConstructor(Ljava/lang/String;)V");
}
@Test
public void testUnknownConstructor() throws Exception {
String cu = "public class Type {\n" +
" void foo() {\n" +
" new AClass(unknown) {};\n" +
" }\n" +
"}\n" +
"class AClass {\n" +
"}\n";
SelectionResult result =
codeSelect(cu, "Type", "AClass(unknown)", "AClass");
assertThat(result).isNotNull();
assertThat(result.isSource()).isTrue();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("AClass "));
assertThat(result.getFqn()).isEqualTo("AClass");
}
@Test
public void testConstructorUnknownParameter() throws Exception {
String cu = "package test.p1;" +
"public class Type {\n" +
" void foo() {\n" +
" new AClass(unknown) {};\n" +
" }\n" +
"}\n" +
"class AClass {\n" +
" public AClass(Object o) {}\n" +
"}\n";
SelectionResult result =
codeSelect(cu, "Type", "AClass(unknown)", "AClass");
assertThat(result).isNotNull();
assertThat(result.isSource()).isTrue();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("AClass(Object o)"));
assertThat(result.getFqn()).isEqualTo("test.p1.AClass");
}
@Test
public void testEmptyCU() throws Exception {
String cu = "//this CU must contain only an unknown type name" +
"Unknown\n" +
"\n";
SelectionResult result =
codeSelect(cu, "Type", "Unknown", "Unknown");
assertThat(result).isNull();
}
@Test
public void testEmptySelection1() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveTypeEmptySelection.java");
SelectionResult result = codeSelect(cu, "ResolveTypeEmptySelection", "ject", "");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.isSource()).isFalse();
assertThat(result.getFqn()).isEqualTo("java.lang.Object");
}
@Test
public void testEmptySelection2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveTypeEmptySelection2.java");
SelectionResult result = codeSelect(cu, "ResolveTypeEmptySelection2", "Obj", "");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.isSource()).isFalse();
assertThat(result.getKey()).isEqualTo("Ljava/lang/Object;");
}
@Test
public void testExplicitSuperConstructorCall() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveExplicitSuperConstructorCall.java");
SelectionResult result = codeSelect(cu, "ResolveExplicitSuperConstructorCall", "super(", "super");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.isSource()).isFalse();
assertThat(result.getKey()).isEqualTo("Ljava/math/BigDecimal;.BigDecimal(I)V");
}
@Test
public void testExplicitThisConstructorCall() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveExplicitThisConstructorCall.java");
SelectionResult result = codeSelect(cu, "ResolveExplicitThisConstructorCall", "this(", "this");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("ResolveExplicitThisConstructorCall()"));
assertThat(result.isSource()).isTrue();
assertThat(result.getKey()).isEqualTo("LResolveExplicitThisConstructorCall;.ResolveExplicitThisConstructorCall()V");
}
@Test
public void testField() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveField.java");
SelectionResult result = codeSelect(cu, "ResolveField", "foo =", "foo");
assertThat(result).isNotNull();
assertThat(result.getFqn()).isEqualTo("ResolveField");
assertThat(result.getOffset()).isEqualTo(40);
assertThat(result.getType()).isEqualTo(Type.FIELD);
}
@Test
public void testInnerClassAsParamater() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveInnerClassAsParamater.java");
SelectionResult result = codeSelect(cu, "ResolveInnerClassAsParamater", "foo(i)", "foo");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("foo(Inner i)"));
assertThat(result.getType()).isEqualTo(Type.METHOD);
}
@Test
public void testInterface() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveInterface.java");
SelectionResult result = codeSelect(cu, "ResolveInterface", "RandomAccess", "RandomAccess");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.getKey()).isEqualTo("Ljava/util/RandomAccess;");
}
@Test
public void testLocalClass1() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass1.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass1", "Y[]", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
assertThat(result.getFqn()).isEqualTo("Y");
}
@Test
public void testLocalClass2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass2.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass2", "Y y", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalClass3() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass3.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass3", "Y[]{", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalClass4() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass4.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass4", "Y bar()", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalClass5() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass5.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass5", "Y y", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalClass6() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass6.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass6", "Y { // superclass", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalClass7() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalClass7.java");
SelectionResult result = codeSelect(cu, "ResolveLocalClass7", "X var", "X");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("X {"));
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isSource()).isTrue();
}
@Test
public void testResolveLocalConstructor() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalConstructor.java");
SelectionResult result = codeSelect(cu, "ResolveLocalConstructor", "Y(\"", "Y");
assertThat(result).isNotNull();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("Y(String s)"));
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isSource()).isTrue();
}
@Test
public void testLocalField() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalField.java");
SelectionResult result = codeSelect(cu, "ResolveLocalField", "fred =", "fred");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.FIELD);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("fred;"));
}
@Test
public void testLocalField2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalField2.java");
SelectionResult result = codeSelect(cu, "ResolveLocalField2", "var =", "var");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.FIELD);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var;"));
}
@Test
public void testLocalFieldDeclaration() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalFieldDeclaration.java");
SelectionResult result = codeSelect(cu, "ResolveLocalFieldDeclaration", "fred", "fred");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.FIELD);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("fred;"));
}
@Test
public void testLocalMethod() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalMethod.java");
SelectionResult result = codeSelect(cu, "ResolveLocalMethod", "foo(\"", "foo");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.isSource()).isTrue();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("foo(String"));
}
@Test
public void testLocalMethod2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalMethod2.java");
SelectionResult result = codeSelect(cu, "ResolveLocalMethod2", "bar();", "bar");
assertThat(result).isNotNull();
assertThat(result.isSource()).isTrue();
assertThat(result.getType()).isEqualTo(Type.METHOD);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("bar() {"));
}
@Test
public void testLocalName1() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var1 = new Object();", "var1");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var1 = new Object();"));
}
@Test
public void testLocalName2() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var2 = 1;", "var2");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.isDeclaration()).isFalse();
}
@Test
public void testLocalName3() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var1.toString();", "var1");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var1 = new Object();"));
}
@Test
public void testLocalName4() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var2++;", "var2");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var2 = 1;"));
assertThat(result.getFqn()).isNull();
}
@Test
public void testLocalName5() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var3.hashCode();", "var3");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var3 = var1;"));
}
@Test
public void testLocalName6() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var3.toString();", "var3");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var3 = new Object();"));
}
@Test
public void testLocalName7() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveLocalName.java");
SelectionResult result = codeSelect(cu, "ResolveLocalName", "var4;", "var4");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("var4 = 1;"));
}
@Test
public void testMessageSendOnBaseType() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveMessageSendOnBaseType.java");
SelectionResult result = codeSelect(cu, "ResolveMessageSendOnBaseType", "hello", "hello");
assertThat(result).isNull();
}
@Test
public void testPartiallyQualifiedType() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolvePartiallyQualifiedType.java");
SelectionResult result = codeSelect(cu, "ResolvePartiallyQualifiedType", "lang.Object", "lang.Object");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.getKey()).isEqualTo("Ljava/lang/Object;");
}
@Test
public void testQualifiedType() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveQualifiedType.java");
SelectionResult result = codeSelect(cu, "ResolveQualifiedType", "java.lang.Object", "java.lang.Object");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.getOffset()).isEqualTo(-1);
assertThat(result.getKey()).isEqualTo("Ljava/lang/Object;");
}
@Test
public void testTypeInComment() throws Exception {
String cu = getCompilationUnit("/workspace/resolve/src/ResolveTypeInComment.java");
SelectionResult result = codeSelect(cu, "ResolveTypeInComment", "AtomicBoolean */", "AtomicBoolean");
assertAtomicClass(result);
}
@Test
public void testDuplicateLocals1() throws Exception {
String cu ="package test;"+
"public class Test {\n" +
" void foo() {\n" +
" int x = 0;\n" +
" String x = null;\n" +
" x.indexOf;\n" +
" }\n" +
"}";
SelectionResult result = codeSelect(cu, "Test", "x.", "x");
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.VARIABLE);
assertThat(result.getOffset()).isEqualTo(cu.indexOf("x = null;"));
}
private void assertAtomicClass(SelectionResult result) {
assertThat(result).isNotNull();
assertThat(result.getType()).isEqualTo(Type.CLASS);
assertThat(result.isDeclaration()).isFalse();
assertThat(result.isSource()).isFalse();
assertThat(result.getFqn()).isEqualTo("java.util.concurrent.atomic.AtomicBoolean");
assertThat(result.getKey()).isEqualTo("Ljava/util/concurrent/atomic/AtomicBoolean;");
assertThat(result.getOffset()).isEqualTo(-1);
}
}