blob: 8e070b6d18c1b3f9c71e33e9d8da3f437a5f3043 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2010 Oracle. 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:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.common.utility.tests.internal;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import junit.framework.TestCase;
import org.eclipse.jpt.common.utility.internal.ClassName;
import org.eclipse.jpt.common.utility.internal.ReflectionTools;
@SuppressWarnings("nls")
public class ClassNameTests extends TestCase {
public ClassNameTests(String name) {
super(name);
}
public void testIsArray() {
assertFalse(ClassName.isArray(int.class.getName()));
assertTrue(ClassName.isArray(int[].class.getName()));
assertTrue(ClassName.isArray(int[][].class.getName()));
assertFalse(ClassName.isArray(java.lang.String.class.getName()));
assertTrue(ClassName.isArray(java.lang.String[].class.getName()));
assertTrue(ClassName.isArray(java.lang.String[][].class.getName()));
}
public void testGetElementTypeName() {
assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector.class.getName()));
assertEquals(int.class.getName(), ClassName.getElementTypeName(int.class.getName()));
assertEquals(void.class.getName(), ClassName.getElementTypeName(void.class.getName()));
assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector[].class.getName()));
assertEquals(int.class.getName(), ClassName.getElementTypeName(int[].class.getName()));
assertEquals(java.util.Vector.class.getName(), ClassName.getElementTypeName(java.util.Vector[][][].class.getName()));
assertEquals(int.class.getName(), ClassName.getElementTypeName(int[][][].class.getName()));
}
public void testGetArrayDepth() {
assertEquals(0, ClassName.getArrayDepth(java.util.Vector.class.getName()));
assertEquals(0, ClassName.getArrayDepth(int.class.getName()));
assertEquals(0, ClassName.getArrayDepth(void.class.getName()));
assertEquals(1, ClassName.getArrayDepth(java.util.Vector[].class.getName()));
assertEquals(1, ClassName.getArrayDepth(int[].class.getName()));
assertEquals(3, ClassName.getArrayDepth(java.util.Vector[][][].class.getName()));
assertEquals(3, ClassName.getArrayDepth(int[][][].class.getName()));
}
public void testGetComponentTypeName() {
assertEquals(null, ClassName.getComponentTypeName(java.lang.Object.class.getName()));
assertEquals(java.lang.Object.class.getName(), ClassName.getComponentTypeName(java.lang.Object[].class.getName()));
assertEquals(java.lang.Object[].class.getName(), ClassName.getComponentTypeName(java.lang.Object[][].class.getName()));
assertEquals(null, ClassName.getComponentTypeName(int.class.getName()));
assertEquals(int.class.getName(), ClassName.getComponentTypeName(int[].class.getName()));
assertEquals(int[].class.getName(), ClassName.getComponentTypeName(int[][].class.getName()));
}
public void testGetSimpleName() throws Exception {
assertEquals("Object", ClassName.getSimpleName(java.lang.Object.class.getName()));
assertEquals("Object[]", ClassName.getSimpleName(java.lang.Object[].class.getName()));
assertEquals("Object[][]", ClassName.getSimpleName(java.lang.Object[][].class.getName()));
assertEquals(java.util.Map.class.getSimpleName(), ClassName.getSimpleName(java.util.Map.class.getName()));
assertEquals(java.util.Map.Entry.class.getSimpleName(), ClassName.getSimpleName(java.util.Map.Entry.class.getName()));
assertEquals("int", ClassName.getSimpleName(int.class.getName()));
assertEquals("int[]", ClassName.getSimpleName(int[].class.getName()));
assertEquals("int[][]", ClassName.getSimpleName(int[][].class.getName()));
Object anonObject = new Object() {
// anonymous class
};
assertEquals("", ClassName.getSimpleName(anonObject.getClass().getName()));
class Local {
// anonymous class
}
Local localObject = new Local();
assertEquals("Local", ClassName.getSimpleName(localObject.getClass().getName()));
}
public void testGetPackageName() throws Exception {
assertEquals(java.lang.Object.class.getPackage().getName(), ClassName.getPackageName(java.lang.Object.class.getName()));
assertEquals("", ClassName.getPackageName(java.lang.Object[].class.getName()));
assertEquals("", ClassName.getPackageName(java.lang.Object[][].class.getName()));
assertEquals(java.util.Map.class.getPackage().getName(), ClassName.getPackageName(java.util.Map.class.getName()));
assertEquals(java.util.Map.Entry.class.getPackage().getName(), ClassName.getPackageName(java.util.Map.Entry.class.getName()));
assertEquals("", ClassName.getPackageName(int.class.getName()));
assertEquals("", ClassName.getPackageName(int[].class.getName()));
assertEquals("", ClassName.getPackageName(int[][].class.getName()));
assertEquals("", ClassName.getPackageName(void.class.getName()));
Object anonObject = new Object() {
// anonymous class
};
assertEquals(anonObject.getClass().getPackage().getName(), ClassName.getPackageName(anonObject.getClass().getName()));
}
public void testIsTopLevel() throws Exception {
assertTrue(ClassName.isTopLevel(java.util.Map.class.getName())); // top-level
assertFalse(ClassName.isTopLevel(java.util.Map.Entry.class.getName())); // member
assertFalse(ClassName.isTopLevel(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
assertFalse(ClassName.isTopLevel(Class.forName("java.util.Vector$1").getName())); // anonymous
Object[] array = new java.util.Map[0]; // top-level
assertFalse(ClassName.isTopLevel(array.getClass().getName()));
array = new java.util.Map.Entry[0]; // member
assertFalse(ClassName.isTopLevel(array.getClass().getName()));
Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
array = (Object[]) Array.newInstance(localClass, 0);
assertFalse(ClassName.isTopLevel(array.getClass().getName()));
Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
array = (Object[]) Array.newInstance(anonClass, 0);
assertFalse(ClassName.isTopLevel(array.getClass().getName()));
}
public void testIsMember() throws Exception {
assertFalse(ClassName.isMember(java.util.Map.class.getName())); // top-level
assertTrue(ClassName.isMember(java.util.Map.Entry.class.getName())); // member
assertFalse(ClassName.isMember(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
assertFalse(ClassName.isMember(Class.forName("java.util.Vector$1").getName())); // anonymous
Object[] array = new java.util.Map[0]; // top-level
assertFalse(ClassName.isMember(array.getClass().getName()));
array = new java.util.Map.Entry[0]; // member
assertFalse(ClassName.isMember(array.getClass().getName()));
Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
array = (Object[]) Array.newInstance(localClass, 0);
assertFalse(ClassName.isMember(array.getClass().getName()));
Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
array = (Object[]) Array.newInstance(anonClass, 0);
assertFalse(ClassName.isMember(array.getClass().getName()));
// test a few edge cases
assertTrue(ClassName.isMember("java.util.Map$a1"));
assertTrue(ClassName.isMember("java.util.Map$1aa$aaa")); // member inside local
assertTrue(ClassName.isMember("java.util.Map$1$aaa")); // member inside anonymous
assertTrue(ClassName.isMember("java.util.Map$a1$aaa$bbb"));
assertTrue(ClassName.isMember("java.util.Map$1a1$aaa")); // member inside local
assertFalse(ClassName.isMember("java.util.Map$1a"));
assertTrue(ClassName.isMember("java.util.Map$a12345$b12345"));
assertFalse(ClassName.isMember("java.util.Map$12345a"));
assertFalse(ClassName.isMember("java.util.Map$333"));
assertFalse(ClassName.isMember("java.util.Map3$333"));
}
public void testIsLocal() throws Exception {
class LocalClass {
void foo() {
System.getProperty("foo");
}
}
new LocalClass().foo();
assertFalse(ClassName.isLocal(java.util.Map.class.getName())); // top-level
assertFalse(ClassName.isLocal(java.util.Map.Entry.class.getName())); // member
assertTrue(ClassName.isLocal(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
assertFalse(ClassName.isLocal(Class.forName("java.util.Vector$1").getName())); // anonymous
Object[] array = new java.util.Map[0]; // top-level
assertFalse(ClassName.isLocal(array.getClass().getName()));
array = new java.util.Map.Entry[0]; // member
assertFalse(ClassName.isLocal(array.getClass().getName()));
Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
array = (Object[]) Array.newInstance(localClass, 0);
assertFalse(ClassName.isLocal(array.getClass().getName()));
Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
array = (Object[]) Array.newInstance(anonClass, 0);
assertFalse(ClassName.isLocal(array.getClass().getName()));
// test a few edge cases
assertFalse(ClassName.isLocal("java.util.Map$a1"));
assertFalse(ClassName.isLocal("java.util.Map$a1$aaa$bbb"));
assertFalse(ClassName.isLocal("java.util.Map$11$aaa"));
assertTrue(ClassName.isLocal("java.util.Map$1a"));
assertTrue(ClassName.isLocal("java.util.Map$2abc"));
assertTrue(ClassName.isLocal("java.util.Map$2abc1"));
assertFalse(ClassName.isLocal("java.util.Map$a12345$b12345"));
assertTrue(ClassName.isLocal("java.util.Map$12345$1234a"));
assertFalse(ClassName.isLocal("java.util.Map$333"));
assertFalse(ClassName.isLocal("java.util.Map3$333"));
}
public void testIsAnonymous() throws Exception {
assertFalse(ClassName.isAnonymous(java.util.Map.class.getName())); // top-level
assertFalse(ClassName.isAnonymous(java.util.Map.Entry.class.getName())); // member
assertFalse(ClassName.isAnonymous(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
assertTrue(ClassName.isAnonymous(Class.forName("java.util.Vector$1").getName())); // anonymous
Object[] array = new java.util.Map[0]; // top-level
assertFalse(ClassName.isAnonymous(array.getClass().getName()));
array = new java.util.Map.Entry[0]; // member
assertFalse(ClassName.isAnonymous(array.getClass().getName()));
Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
array = (Object[]) Array.newInstance(localClass, 0);
assertFalse(ClassName.isAnonymous(array.getClass().getName()));
Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
array = (Object[]) Array.newInstance(anonClass, 0);
assertFalse(ClassName.isAnonymous(array.getClass().getName()));
// test a few edge cases
assertFalse(ClassName.isAnonymous("java.util.Map$a1"));
assertFalse(ClassName.isAnonymous("java.util.Map$a1$aaa$bbb"));
assertFalse(ClassName.isAnonymous("java.util.Map$1a1$aaa"));
assertFalse(ClassName.isAnonymous("java.util.Map$1$a"));
assertFalse(ClassName.isAnonymous("java.util.Map$1a"));
assertFalse(ClassName.isAnonymous("java.util.Map$a12345$b12345"));
assertFalse(ClassName.isAnonymous("java.util.Map$12345$a1234"));
assertTrue(ClassName.isAnonymous("java.util.Map$333"));
assertTrue(ClassName.isAnonymous("java.util.Map3$333"));
}
public void testIsReference() throws Exception {
assertFalse(ClassName.isReference(int.class.getName())); // top-level
assertTrue(ClassName.isReference(java.util.Map.class.getName())); // top-level
assertTrue(ClassName.isReference(java.util.Map.Entry.class.getName())); // member
assertTrue(ClassName.isReference(Class.forName(this.getClass().getName() + "$1LocalClass").getName())); // local
assertTrue(ClassName.isReference(Class.forName("java.util.Vector$1").getName())); // anonymous
Object[] array = new java.util.Map[0]; // top-level
assertTrue(ClassName.isReference(array.getClass().getName()));
array = new java.util.Map.Entry[0]; // member
assertTrue(ClassName.isReference(array.getClass().getName()));
Class<?> localClass = Class.forName(this.getClass().getName() + "$1LocalClass"); // local
array = (Object[]) Array.newInstance(localClass, 0);
assertTrue(ClassName.isReference(array.getClass().getName()));
Class<?> anonClass = Class.forName("java.util.Vector$1"); // local
array = (Object[]) Array.newInstance(anonClass, 0);
assertTrue(ClassName.isReference(array.getClass().getName()));
}
public void testIsPrimitive() {
assertTrue(void.class.isPrimitive());
assertTrue(ClassName.isPrimitive(void.class.getName()));
assertTrue(ClassName.isPrimitive(int.class.getName()));
assertTrue(ClassName.isPrimitive(float.class.getName()));
assertTrue(ClassName.isPrimitive(boolean.class.getName()));
assertFalse(ClassName.isPrimitive(java.lang.Number.class.getName()));
assertFalse(ClassName.isPrimitive(java.lang.String.class.getName()));
assertFalse(ClassName.isPrimitive(java.lang.Boolean.class.getName()));
assertFalse(ClassName.isPrimitive(java.lang.Integer.class.getName()));
}
public void testIsPrimitiveWrapper() {
assertFalse(ClassName.isPrimitiveWrapper(void.class.getName()));
assertFalse(ClassName.isPrimitiveWrapper(int.class.getName()));
assertFalse(ClassName.isPrimitiveWrapper(float.class.getName()));
assertFalse(ClassName.isPrimitiveWrapper(boolean.class.getName()));
assertFalse(ClassName.isPrimitiveWrapper(java.lang.reflect.Field.class.getName()));
assertFalse(ClassName.isPrimitiveWrapper(java.lang.String.class.getName()));
assertTrue(ClassName.isPrimitiveWrapper(java.lang.Boolean.class.getName()));
assertTrue(ClassName.isPrimitiveWrapper(java.lang.Integer.class.getName()));
}
public void testIsVariablePrimitive() {
assertFalse(ClassName.isVariablePrimitive(void.class.getName()));
assertTrue(ClassName.isVariablePrimitive(int.class.getName()));
assertTrue(ClassName.isVariablePrimitive(float.class.getName()));
assertTrue(ClassName.isVariablePrimitive(boolean.class.getName()));
assertFalse(ClassName.isVariablePrimitive(java.lang.Number.class.getName()));
assertFalse(ClassName.isVariablePrimitive(java.lang.String.class.getName()));
assertFalse(ClassName.isVariablePrimitive(java.lang.Boolean.class.getName()));
}
public void testIsVariablePrimitiveWrapper() {
assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Void.class.getName()));
assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Integer.class.getName()));
assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Float.class.getName()));
assertTrue(ClassName.isVariablePrimitiveWrapper(java.lang.Boolean.class.getName()));
assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Number.class.getName()));
assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.String.class.getName()));
assertFalse(ClassName.isVariablePrimitiveWrapper(java.lang.Object.class.getName()));
}
public void testGetWrapperClassName() {
assertEquals(java.lang.Void.class.getName(), ClassName.getWrapperClassName(void.class.getName()));
assertEquals(java.lang.Integer.class.getName(), ClassName.getWrapperClassName(int.class.getName()));
assertEquals(java.lang.Float.class.getName(), ClassName.getWrapperClassName(float.class.getName()));
assertEquals(java.lang.Boolean.class.getName(), ClassName.getWrapperClassName(boolean.class.getName()));
assertNull(ClassName.getWrapperClassName(java.lang.String.class.getName()));
}
public void testGetPrimitiveClassName() {
assertEquals(void.class.getName(), ClassName.getPrimitiveClassName(java.lang.Void.class.getName()));
assertEquals(int.class.getName(), ClassName.getPrimitiveClassName(java.lang.Integer.class.getName()));
assertEquals(float.class.getName(), ClassName.getPrimitiveClassName(java.lang.Float.class.getName()));
assertEquals(boolean.class.getName(), ClassName.getPrimitiveClassName(java.lang.Boolean.class.getName()));
assertNull(ClassName.getPrimitiveClassName(java.lang.String.class.getName()));
}
public void testAreAutoboxEquivalents() {
assertTrue(ClassName.areAutoboxEquivalents(Integer.class.getName(), Integer.class.getName()));
assertTrue(ClassName.areAutoboxEquivalents(int.class.getName(), Integer.class.getName()));
assertTrue(ClassName.areAutoboxEquivalents(Integer.class.getName(), int.class.getName()));
assertFalse(ClassName.areAutoboxEquivalents(int.class.getName(), Boolean.class.getName()));
assertTrue(ClassName.areAutoboxEquivalents(String.class.getName(), String.class.getName()));
}
public void testForCode() {
assertEquals("byte", ClassName.forCode('B'));
assertEquals("char", ClassName.forCode('C'));
assertEquals("double", ClassName.forCode('D'));
assertEquals("float", ClassName.forCode('F'));
assertEquals("int", ClassName.forCode('I'));
assertEquals("long", ClassName.forCode('J'));
assertEquals("short", ClassName.forCode('S'));
assertEquals("boolean", ClassName.forCode('Z'));
assertEquals("void", ClassName.forCode('V'));
assertNull(ClassName.forCode('X'));
assertEquals("byte", ClassName.forCode((int) 'B'));
assertEquals("char", ClassName.forCode((int) 'C'));
assertEquals("double", ClassName.forCode((int) 'D'));
assertEquals("float", ClassName.forCode((int) 'F'));
assertEquals("int", ClassName.forCode((int) 'I'));
assertEquals("long", ClassName.forCode((int) 'J'));
assertEquals("short", ClassName.forCode((int) 'S'));
assertEquals("boolean", ClassName.forCode((int) 'Z'));
assertEquals("void", ClassName.forCode((int) 'V'));
assertNull(ClassName.forCode((int) 'X'));
}
public void testGetCodeForClassName() {
assertEquals('I', ClassName.getCodeForClassName(int.class.getName()));
assertEquals('I', ClassName.getCodeForClassName("int"));
assertEquals('B', ClassName.getCodeForClassName(byte.class.getName()));
assertEquals('B', ClassName.getCodeForClassName("byte"));
assertEquals((char) 0, ClassName.getCodeForClassName(java.lang.Object.class.getName()));
}
public void testConstructor() {
boolean exCaught = false;
try {
Object at = ReflectionTools.newInstance(ClassName.class);
fail("bogus: " + at); //$NON-NLS-1$
} catch (RuntimeException ex) {
if (ex.getCause() instanceof InvocationTargetException) {
if (ex.getCause().getCause() instanceof UnsupportedOperationException) {
exCaught = true;
}
}
}
assertTrue(exCaught);
}
}