blob: 2d38cd017c05db1ba4651d2bfd321b69bf21eff2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2009 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.model;
import org.eclipse.jdt.core.BindingKey;
import org.eclipse.jdt.core.Signature;
import junit.framework.Test;
public class BindingKeyTests extends AbstractJavaModelTests {
static {
// TESTS_PREFIX = "testInvalidCompilerOptions";
// TESTS_NAMES = new String[] { "test028"};
}
public BindingKeyTests(String name) {
super(name);
}
public static Test suite() {
return buildModelTestSuite(BindingKeyTests.class);
}
protected void assertBindingKeyEquals(String expected, String key) {
if (!(expected.equals(key)))
System.out.println(displayString(key, 3) + ",");
assertEquals(expected, key);
}
protected void assertBindingKeySignatureEquals(String expected, String key) {
BindingKey bindingKey = new BindingKey(key);
String signature = bindingKey.toSignature();
if (!(expected.equals(signature)))
System.out.println(displayString(signature, 3) + ",");
assertEquals(expected, signature);
}
protected void assertBindingKeyTypeArgumentsEqual(String expected, String key) {
BindingKey bindingKey = new BindingKey(key);
String[] typeArguments = bindingKey.getTypeArguments();
assertStringsEqual("Unexpected type arguments", expected, typeArguments);
}
/*
* Package.
*/
public void test001() {
assertBindingKeySignatureEquals(
"p",
"p"
);
}
/*
* Top level type in non default package.
*/
public void test002() {
assertBindingKeySignatureEquals(
"Lp.X;",
"Lp/X;"
);
}
/*
* Top level type in default package.
*/
public void test003() {
assertBindingKeySignatureEquals(
"LClazz;",
"LClazz;"
);
}
/*
* Member type
*/
public void test004() {
assertBindingKeySignatureEquals(
"Lp.X$Member;",
"Lp/X$Member;"
);
}
/*
* Member type (2 levels deep)
*/
public void test005() {
assertBindingKeySignatureEquals(
"Lp1.X$Member1$Member2;",
"Lp1/X$Member1$Member2;"
);
}
/*
* Anonymous type
*/
public void test006() {
assertBindingKeySignatureEquals(
"Lp1.X$1;",
"Lp1/X$1;"
);
}
/*
* Local type
*/
public void test007() {
assertBindingKeySignatureEquals(
"Lp1.X$1$Y;",
"Lp1/X$1$Y;"
);
}
/*
* Array type
*/
public void test008() {
assertBindingKeySignatureEquals(
"[Lp1.X;",
"[Lp1/X;"
);
}
/*
* Generic type
*/
public void test009() {
assertBindingKeySignatureEquals(
"<T:Ljava/lang/Object;>Lp1.X;",
"Lp1/X<TT;>;"
);
}
/*
* Generic type
*/
public void test010() {
assertBindingKeySignatureEquals(
"<T:Ljava/lang/Object;U:Ljava/lang/Object;>Lp1.X;",
"Lp1/X<TT;TU;>;"
);
}
/*
* Parameterized type
*/
public void test011() {
assertBindingKeySignatureEquals(
"Lp1.X<Ljava.lang.String;>;",
"Lp1/X<Ljava/lang/String;>;"
);
}
/*
* Secondary type
*/
public void test012() {
assertBindingKeySignatureEquals(
"Lp1.Secondary;",
"Lp1/X~Secondary;"
);
}
/*
* Anonymous in a secondary type
*/
public void test013() {
assertBindingKeySignatureEquals(
"Lp1.Secondary$1;",
"Lp1/X~Secondary$1;"
);
}
/*
* Method
* (regression test for bug 85811 BindingKey.toSignature should return method signature for methods)
*/
public void test014() {
assertBindingKeySignatureEquals(
"(Ljava.lang.String;I)Z",
"Lp1/X;.foo(Ljava/lang/String;I)Z"
);
}
/*
* Create a type binding key from a fully qualified name
*/
public void test015() {
String key = BindingKey.createTypeBindingKey("java.lang.Object");
assertBindingKeyEquals(
"Ljava/lang/Object;",
key);
}
/*
* Create a type binding key from a primitive type name
*/
public void test016() {
String key = BindingKey.createTypeBindingKey("int");
assertBindingKeyEquals(
"I",
key);
}
/*
* Create a type binding key from an array type name
*/
public void test017() {
String key = BindingKey.createTypeBindingKey("boolean[]");
assertBindingKeyEquals(
"[Z",
key);
}
/*
* Create a parameterized type binding key
*/
public void test018() {
String key = BindingKey.createParameterizedTypeBindingKey("Ljava/util/Map<TK;TV;>;", new String[] {"Ljava/lang/String;", "Ljava/lang/Object;"});
assertBindingKeyEquals(
"Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;",
key);
}
/*
* Create a raw type binding key
*/
public void test019() {
String key = BindingKey.createParameterizedTypeBindingKey("Ljava/util/List<TE:>;", new String[] {});
assertBindingKeyEquals(
"Ljava/util/List<>;",
key);
}
/*
* Create an array type binding key
*/
public void test020() {
String key = BindingKey.createArrayTypeBindingKey("Ljava/lang/Object;", 1);
assertBindingKeyEquals(
"[Ljava/lang/Object;",
key);
}
/*
* Create an array type binding key
*/
public void test021() {
String key = BindingKey.createArrayTypeBindingKey("I", 2);
assertBindingKeyEquals(
"[[I",
key);
}
/**
* @deprecated
*/
private String getWildcardBindingKey(String typeKey, char kind) {
return BindingKey.createWilcardTypeBindingKey(typeKey, kind);
}
/*
* Create a wildcard type binding key
*/
public void test022() {
String key = getWildcardBindingKey(null, Signature.C_STAR);
assertBindingKeyEquals(
"*",
key);
assertBindingKeyEquals(BindingKey.createWildcardTypeBindingKey(
BindingKey.createTypeBindingKey("java.util.ArrayList"), Signature.C_STAR, null, 0),
"Ljava/util/ArrayList;{0}*");
}
/*
* Create a wildcard type binding key
*/
public void test023() {
String key = getWildcardBindingKey("Ljava/util/List<TE;>;", Signature.C_SUPER);
assertBindingKeyEquals(
"-Ljava/util/List<TE;>;",
key);
assertBindingKeyEquals(BindingKey.createWildcardTypeBindingKey(
BindingKey.createTypeBindingKey("java.util.ArrayList"), Signature.C_SUPER,
BindingKey.createTypeBindingKey("java.lang.String"), 0),
"Ljava/util/ArrayList;{0}-Ljava/lang/String;"
);
}
/*
* Create a wildcard type binding key
*/
public void test024() {
String key = getWildcardBindingKey("Ljava/util/ArrayList;", Signature.C_EXTENDS);
assertBindingKeyEquals(
"+Ljava/util/ArrayList;",
key);
assertBindingKeyEquals(BindingKey.createWildcardTypeBindingKey(
BindingKey.createTypeBindingKey("java.util.ArrayList"), Signature.C_EXTENDS,
BindingKey.createTypeBindingKey("java.lang.String"), 0),
"Ljava/util/ArrayList;{0}+Ljava/lang/String;"
);
}
/*
* Create a type variable binding key
*/
public void test025() {
String key = BindingKey.createTypeVariableBindingKey("T", "Ljava/util/List<TE;>;");
assertBindingKeyEquals(
"Ljava/util/List<TE;>;:TT;",
key);
}
/*
* Create a type variable binding key
*/
public void test026() {
String key = BindingKey.createTypeVariableBindingKey("SomeTypeVariable", "Lp/X;.foo()V");
assertBindingKeyEquals(
"Lp/X;.foo()V:TSomeTypeVariable;",
key);
}
/*
* Parameterized member type
*/
public void test027() {
assertBindingKeySignatureEquals(
"Lp1.X<Ljava.lang.String;>.Member;",
"Lp1/X<Ljava/lang/String;>.Member;"
);
}
/*
* Wildcard binding (no bounds)
*/
public void test028() {
assertBindingKeySignatureEquals(
"*",
"Lp1/X;{0}*"
);
}
/*
* Wildcard binding (super bounds)
*/
public void test029() {
assertBindingKeySignatureEquals(
"-Ljava.util.List<TT;>;",
"Lp1/X;{0}-Ljava/util/List<Lp1/X;:TT;>"
);
}
/*
* Wildcard binding (extends bounds)
*/
public void test030() {
assertBindingKeySignatureEquals(
"+Ljava.util.ArrayList;",
"Lp1/X;{0}+Ljava/util/ArrayList;"
);
}
/*
* Capture binding (no bounds)
*/
public void test031() {
assertBindingKeySignatureEquals(
"!*",
"Ljava/util/List;&!Lp1/X;{0}*123;"
);
}
/*
* Capture binding (super bounds)
*/
public void test032() {
assertBindingKeySignatureEquals(
"!-Ljava.util.List<TT;>;",
"Ljava/util/List;&!Lp1/X;{0}-Ljava/util/List<Lp1/X;:TT;>;123;"
);
}
/*
* Capture binding (extends bounds)
*/
public void test033() {
assertBindingKeySignatureEquals(
"!+Ljava.util.ArrayList;",
"Ljava/util/List;&!Lp1/X;{0}+Ljava/util/ArrayList<>;123;"
);
}
/*
* Method starting with an upper case corresponding to a primitive type
* (regression test for bug 94398 Error attempting to find References)
*/
public void test034() {
assertBindingKeySignatureEquals(
"(Ljava.lang.String;I)Z",
"Lp1/X;.Set(Ljava/lang/String;I)Z"
);
}
/*
* Parameterized method with capture argument
* (regression test for bug 96410 Incorrect information in selection resolved key)
*/
public void test035() {
assertBindingKeySignatureEquals(
"(!*)!*",
"LX;&LX~Store<!LX~Store;*157;>;.get(!*)!*"
);
}
/*
* Parameterized method with argument similar to a type name
*/
public void test036() {
assertBindingKeySignatureEquals(
"<U:Ljava.lang.Object;>(La.TU;La.TU;)V",
"La/A<La/A~TU;>;.foo<U:Ljava/lang/Object;>(TU;La/TU;)V%<La/A~TU;>"
);
}
/*
* Field
* (regression test for bug 87362 BindingKey#internalToSignature() should return the field's type signature)
*/
public void test037() {
assertBindingKeySignatureEquals(
"Ljava.lang.String;",
"Lp/X;.foo)Ljava/lang/String;"
);
}
/*
* Generic secondary type
* (regression test for bug 96858 IllegalArgumentException in Signature)
*/
public void test038() {
assertBindingKeySignatureEquals(
"<T:Ljava/lang/Object;U:Ljava/lang/Object;>Lp1.Y;",
"Lp1/X~Y<TT;TU;>;"
);
}
/*
* Base type
* (regression test for bug 97187 [rendering] Shows Single Char for primitve Types)
*/
public void test039() {
assertBindingKeySignatureEquals(
"Z",
"Z"
);
}
/*
* Parameterized method with argument nested in another argument
* (regression test for bug 97275 method reference should not contain type variable anymore)
*/
public void test040() {
assertBindingKeySignatureEquals(
"<T:Ljava.lang.Object;>(Ljava.util.List<Ljava.lang.String;>;Ljava.lang.Integer;)V",
"Lp1/X;.foo<T:Ljava/lang/Object;>(Ljava/util/List<TT;>;Ljava/lang/Integer;)V%<Ljava/lang/String;>)"
);
}
/*
* Parameterized method with argument nested in another argument as a wilcard bound
* (regression test for bug 97814 Incorrect resolved information on hover)
*/
public void test041() {
assertBindingKeySignatureEquals(
"<T:Ljava.lang.Object;>(LY<-Ljava.lang.NullPointerException;>;Ljava.lang.NullPointerException;)V",
"LX~Z;.foo<T:Ljava/lang/Object;>(LY<-TT;>;TT;)V%<Ljava/lang/NullPointerException;>"
);
}
/*
* Parameterized method with argument nested in another argument as an array
* (regression test for bug 97814 Incorrect resolved information on hover)
*/
public void test042() {
assertBindingKeySignatureEquals(
"<T:Ljava.lang.Object;>([Ljava.lang.NullPointerException;Ljava.lang.NullPointerException;)V",
"LX~Z;.foo<T:Ljava/lang/Object;>([TT;TT;)V%<Ljava/lang/NullPointerException;>"
);
}
/*
* Parameterized type binding with a type variable of the current's method in its arguments
* (regression test for bug 97902 NPE on Open Declaration on reference to generic type)
*/
public void test043() {
assertBindingKeySignatureEquals(
"Lp1.Y<TT;>;",
"Lp1/X~Y<Lp1/X;:40TT;>;"
);
}
/*
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=102710
*/
public void test044() {
assertBindingKeySignatureEquals(
"<SM:Ljava/lang/Object;LM:Ljava/lang/Object;>LX;",
"LX<TSM;TLM;>;"
);
}
/*
* Ensures that the type arguments for a parameterized type binding key are correct
*/
public void test045() {
assertBindingKeyTypeArgumentsEqual(
"Ljava.lang.String;\n",
"LX<Ljava/lang/String;>;"
);
}
/*
* Ensures that the type arguments for a parameterized type binding key are correct
*/
public void test046() {
assertBindingKeyTypeArgumentsEqual(
"Ljava.lang.String;\n" +
"LY;\n",
"LX<Ljava/lang/String;LY;>;"
);
}
/*
* Ensures that the type arguments for a parameterized type binding key are correct
*/
public void test047() {
assertBindingKeyTypeArgumentsEqual(
"",
"LX;"
);
}
/*
* Ensures that the type arguments for a parameterized type binding key are correct
* (regression test for bug 103654 BindingKey.getTypeArguments bug with qualified types)
*/
public void test048() {
assertBindingKeyTypeArgumentsEqual(
"Ljava.lang.Object;\n",
"LX<Ljava/lang/String;>.LY<Ljava/lang/Object;>;"
);
}
/*
* Ensures that the type arguments for a parameterized method binding key are correct
*/
public void test049() {
assertBindingKeyTypeArgumentsEqual(
"Ljava.lang.String;\n",
"LX;.foo<T:Ljava/lang/Object;>(TT;)V%<Ljava/lang/String;>"
);
}
/*
* Parameterized method
*/
public void test050() {
assertBindingKeySignatureEquals(
"<T:Ljava.lang.Object;>(Ljava.lang.String;)V",
"LX;.foo<T:Ljava/lang/Object;>(TT;)V%<Ljava/lang/String;>"
);
}
/*
* Ensures that the binding key of a parameterized type is not a raw type
* (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=209475)
*/
public void test051() {
assertFalse("Should not be a raw type", new BindingKey("Ltest/ZZ<Ljava/lang/Object;>;").isRawType());
}
/*
* Ensures that the signature of a method defined in a cu with a $ name is correct
* (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=127739 )
*/
public void test052() {
assertBindingKeySignatureEquals(
"()V",
"LA$B~A$B;.m()V"
);
}
/*
* Ensures that the signature of a method with a $ name is correct
* (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=127739 )
*/
public void test053() {
assertBindingKeySignatureEquals(
"()V",
"LA;.m$1()V"
);
}
/*
* Ensures that the signature of a field with a capture return type is correct
* (regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=234172 )
*/
public void test054() {
assertBindingKeySignatureEquals(
"!*",
"LX;&LX~Box<!LX~Box;{0}*232;!LX~Box;{1}*232;>;.value)!LX~Box;{0}*232;"
);
}
}