Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbvosburgh2010-01-05 05:37:21 +0000
committerbvosburgh2010-01-05 05:37:21 +0000
commit4394bdb502dc33f81b744137cbf8cc618476b917 (patch)
treebdc5a172064ef7cd67227e54fb97e4a6474d01fb /jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java
parent28096602a832fbf503892b83054abcdb951e65d6 (diff)
downloadwebtools.dali-4394bdb502dc33f81b744137cbf8cc618476b917.tar.gz
webtools.dali-4394bdb502dc33f81b744137cbf8cc618476b917.tar.xz
webtools.dali-4394bdb502dc33f81b744137cbf8cc618476b917.zip
utility work
Diffstat (limited to 'jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java')
-rw-r--r--jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java440
1 files changed, 440 insertions, 0 deletions
diff --git a/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java
new file mode 100644
index 0000000000..afdfc679fd
--- /dev/null
+++ b/jpa/tests/org.eclipse.jpt.utility.tests/src/org/eclipse/jpt/utility/tests/internal/ReflectionToolsTests.java
@@ -0,0 +1,440 @@
+/*******************************************************************************
+ * 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.utility.tests.internal;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jpt.utility.internal.ReflectionTools;
+import org.eclipse.jpt.utility.internal.CollectionTools;
+import org.eclipse.jpt.utility.internal.iterables.TransformationIterable;
+
+@SuppressWarnings("nls")
+public class ReflectionToolsTests extends TestCase {
+
+ private static String testStaticField;
+
+ public ReflectionToolsTests(String name) {
+ super(name);
+ }
+
+// this is no longer true - it appears the JLS now defines the generated names...
+// /**
+// * Return the compiler-generated class name. The Eclipse compiler generates
+// * "local" classes with names in the form "com.foo.Outer$1$Local"; while the
+// * JDK compiler generates "com.foo.Outer$1Local". There might be other
+// * differences.... ~bjv
+// */
+// public static String compilerDependentClassNameFor(String className) {
+// int index = className.indexOf("$1$");
+// if (index == -1) {
+// return className;
+// }
+// try {
+// Class.forName(className);
+// } catch (ClassNotFoundException ex) {
+// return className.substring(0, index + 2) + className.substring(index + 3);
+// }
+// return className;
+// }
+//
+// private static String munge(String className) {
+// return compilerDependentClassNameFor(className);
+// }
+
+ public void testAllFields() {
+ int fieldCount = 0;
+ fieldCount += java.util.Vector.class.getDeclaredFields().length;
+ fieldCount += java.util.AbstractList.class.getDeclaredFields().length;
+ fieldCount += java.util.AbstractCollection.class.getDeclaredFields().length;
+ fieldCount += java.lang.Object.class.getDeclaredFields().length;
+ Iterable<Field> fields = ReflectionTools.getAllFields(java.util.Vector.class);
+ assertEquals(fieldCount, CollectionTools.size(fields));
+ assertTrue(CollectionTools.contains(this.fieldNames(fields), "modCount"));
+ assertTrue(CollectionTools.contains(this.fieldNames(fields), "serialVersionUID"));
+ assertTrue(CollectionTools.contains(this.fieldNames(fields), "capacityIncrement"));
+ assertTrue(CollectionTools.contains(this.fieldNames(fields), "elementCount"));
+ assertTrue(CollectionTools.contains(this.fieldNames(fields), "elementData"));
+ assertTrue(fields.iterator().next().isAccessible());
+ }
+
+ public void testAllMethods() {
+ int methodCount = 0;
+ methodCount += java.util.Vector.class.getDeclaredMethods().length;
+ methodCount += java.util.AbstractList.class.getDeclaredMethods().length;
+ methodCount += java.util.AbstractCollection.class.getDeclaredMethods().length;
+ methodCount += java.lang.Object.class.getDeclaredMethods().length;
+ Iterable<Method> methods = ReflectionTools.getAllMethods(java.util.Vector.class);
+ assertEquals(methodCount, CollectionTools.size(methods));
+ assertTrue(CollectionTools.contains(this.methodNames(methods), "wait"));
+ assertTrue(CollectionTools.contains(this.methodNames(methods), "addElement"));
+ assertTrue(methods.iterator().next().isAccessible());
+ }
+
+ public void testNewInstanceClass() {
+ Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class);
+ assertNotNull(v);
+ assertEquals(0, v.size());
+ }
+
+ public void testNewInstanceClassClassObject() {
+ int initialCapacity = 200;
+ Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class, int.class, new Integer(initialCapacity));
+ assertNotNull(v);
+ assertEquals(0, v.size());
+ Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
+ assertEquals(initialCapacity, elementData.length);
+ }
+
+ public void testNewInstanceClassClassArrayObjectArray() {
+ int initialCapacity = 200;
+ Class<?>[] parmTypes = new Class[1];
+ parmTypes[0] = int.class;
+ Object[] parms = new Object[1];
+ parms[0] = new Integer(initialCapacity);
+ Vector<?> v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
+ assertNotNull(v);
+ assertEquals(0, v.size());
+ Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
+ assertEquals(initialCapacity, elementData.length);
+
+ parms[0] = new Integer(-1);
+ boolean exCaught = false;
+ try {
+ v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
+ } catch (RuntimeException ex) {
+ exCaught = true;
+ }
+ assertTrue("RuntimeException not thrown", exCaught);
+
+ parmTypes[0] = java.lang.String.class;
+ parms[0] = "foo";
+ exCaught = false;
+ try {
+ v = ReflectionTools.newInstance(java.util.Vector.class, parmTypes, parms);
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchMethodException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchMethodException not thrown", exCaught);
+ }
+
+ public void testFieldValue() {
+ int initialCapacity = 200;
+ Vector<?> v = new Vector<Object>(initialCapacity);
+ Object[] elementData = (Object[]) ReflectionTools.getFieldValue(v, "elementData");
+ assertEquals(initialCapacity, elementData.length);
+
+ // test inherited field
+ Integer modCountInteger = (Integer) ReflectionTools.getFieldValue(v, "modCount");
+ int modCount = modCountInteger.intValue();
+ assertEquals(0, modCount);
+
+ boolean exCaught = false;
+ Object bogusFieldValue = null;
+ try {
+ bogusFieldValue = ReflectionTools.getFieldValue(v, "bogusField");
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchFieldException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchFieldException not thrown: " + bogusFieldValue, exCaught);
+ }
+
+ public void testExecuteMethodObjectString() {
+ Vector<String> v = new Vector<String>();
+ int size = ((Integer) ReflectionTools.executeMethod(v, "size")).intValue();
+ assertEquals(0, size);
+
+ v.addElement("foo");
+ size = ((Integer) ReflectionTools.executeMethod(v, "size")).intValue();
+ assertEquals(1, size);
+ }
+
+ public void testExecuteMethodObjectStringClassObject() {
+ Vector<String> v = new Vector<String>();
+ boolean booleanResult = ((Boolean) ReflectionTools.executeMethod(v, "add", Object.class, "foo")).booleanValue();
+ assertTrue(booleanResult);
+ assertTrue(v.contains("foo"));
+ Object voidResult = ReflectionTools.executeMethod(v, "addElement", Object.class, "bar");
+ assertNull(voidResult);
+ }
+
+ public void testExecuteMethodObjectStringClassArrayObjectArray() {
+ Vector<String> v = new Vector<String>();
+ Class<?>[] parmTypes = new Class[1];
+ parmTypes[0] = java.lang.Object.class;
+ Object[] parms = new Object[1];
+ parms[0] = "foo";
+ boolean booleanResult = ((Boolean) ReflectionTools.executeMethod(v, "add", parmTypes, parms)).booleanValue();
+ assertTrue(booleanResult);
+ assertTrue(v.contains("foo"));
+
+ boolean exCaught = false;
+ Object bogusMethodReturnValue = null;
+ try {
+ bogusMethodReturnValue = ReflectionTools.executeMethod(v, "bogusMethod", parmTypes, parms);
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchMethodException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchMethodException not thrown: " + bogusMethodReturnValue, exCaught);
+ }
+
+ public void testExecuteStaticMethodClassString() {
+ Double randomObject = (Double) ReflectionTools.executeStaticMethod(java.lang.Math.class, "random");
+ assertNotNull(randomObject);
+ double random = randomObject.doubleValue();
+ assertTrue(random >= 0);
+ assertTrue(random < 1);
+ }
+
+ public void testExecuteStaticMethodClassStringClassObject() {
+ String s = (String) ReflectionTools.executeStaticMethod(java.lang.String.class, "valueOf", boolean.class, Boolean.TRUE);
+ assertNotNull(s);
+ assertEquals("true", s);
+ }
+
+ public void testExecuteStaticMethodClassStringClassArrayObjectArray() {
+ Class<?>[] parmTypes = new Class[1];
+ parmTypes[0] = boolean.class;
+ Object[] parms = new Object[1];
+ parms[0] = Boolean.TRUE;
+ String s = (String) ReflectionTools.executeStaticMethod(java.lang.String.class, "valueOf", parmTypes, parms);
+ assertNotNull(s);
+ assertEquals("true", s);
+
+ boolean exCaught = false;
+ Object bogusStaticMethodReturnValue = null;
+ try {
+ bogusStaticMethodReturnValue = ReflectionTools.executeStaticMethod(java.lang.String.class, "bogusStaticMethod", parmTypes, parms);
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchMethodException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchMethodException not thrown: " + bogusStaticMethodReturnValue, exCaught);
+
+ // test non-static method
+ exCaught = false;
+ try {
+ bogusStaticMethodReturnValue = ReflectionTools.executeStaticMethod(java.lang.String.class, "toString");
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchMethodException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchMethodException not thrown: " + bogusStaticMethodReturnValue, exCaught);
+ }
+
+ public void testSetFieldValue() {
+ Vector<String> v = new Vector<String>();
+ Object[] newElementData = new Object[5];
+ newElementData[0] = "foo";
+ ReflectionTools.setFieldValue(v, "elementData", newElementData);
+ ReflectionTools.setFieldValue(v, "elementCount", new Integer(1));
+ // test inherited field
+ ReflectionTools.setFieldValue(v, "modCount", new Integer(1));
+ assertTrue(v.contains("foo"));
+
+ boolean exCaught = false;
+ try {
+ ReflectionTools.setFieldValue(v, "bogusField", "foo");
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchFieldException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchFieldException not thrown", exCaught);
+ }
+
+ public void testSetStaticFieldValue() {
+ ReflectionTools.setStaticFieldValue(this.getClass(), "testStaticField", "new value");
+ assertEquals(testStaticField, "new value");
+
+ boolean exCaught = false;
+ try {
+ ReflectionTools.setStaticFieldValue(this.getClass(), "bogusStaticField", "new value");
+ } catch (RuntimeException ex) {
+ if (ex.getCause() instanceof NoSuchFieldException) {
+ exCaught = true;
+ }
+ }
+ assertTrue("NoSuchFieldException not thrown", exCaught);
+ }
+
+ public void testSimpleName() {
+ assertEquals("Vector", java.util.Vector.class.getSimpleName());
+ assertEquals("Entry", java.util.Map.Entry.class.getSimpleName());
+ assertEquals("int", int.class.getSimpleName());
+ assertEquals("int[]", int[].class.getSimpleName());
+ assertEquals("int[][]", int[][].class.getSimpleName());
+ assertEquals("void", void.class.getSimpleName());
+ }
+
+ public void testPackageName() {
+ assertEquals("java.util", java.util.Vector.class.getPackage().getName());
+ assertEquals("java.util", java.util.Map.Entry.class.getPackage().getName());
+ }
+
+ public void testArrayDepthFor() {
+ assertEquals(0, ReflectionTools.getArrayDepth(java.util.Vector.class));
+ assertEquals(0, ReflectionTools.getArrayDepth(int.class));
+ assertEquals(0, ReflectionTools.getArrayDepth(void.class));
+ assertEquals(1, ReflectionTools.getArrayDepth(java.util.Vector[].class));
+ assertEquals(1, ReflectionTools.getArrayDepth(int[].class));
+ assertEquals(3, ReflectionTools.getArrayDepth(java.util.Vector[][][].class));
+ assertEquals(3, ReflectionTools.getArrayDepth(int[][][].class));
+ }
+
+ public void testElementTypeFor() {
+ assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector.class));
+ assertEquals(int.class, ReflectionTools.getElementType(int.class));
+ assertEquals(void.class, ReflectionTools.getElementType(void.class));
+ assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector[].class));
+ assertEquals(int.class, ReflectionTools.getElementType(int[].class));
+ assertEquals(java.util.Vector.class, ReflectionTools.getElementType(java.util.Vector[][][].class));
+ assertEquals(int.class, ReflectionTools.getElementType(int[][][].class));
+ }
+
+ public void testClassIsPrimitiveWrapperClass() {
+ assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Void.class));
+ assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Boolean.class));
+ assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Integer.class));
+ assertTrue(ReflectionTools.classIsPrimitiveWrapper(java.lang.Float.class));
+
+ assertFalse(ReflectionTools.classIsPrimitiveWrapper(java.lang.String.class));
+ assertFalse(ReflectionTools.classIsPrimitiveWrapper(void.class));
+ assertFalse(ReflectionTools.classIsPrimitiveWrapper(int.class));
+ }
+
+ public void testClassIsVariablePrimitiveWrapperClass() {
+ assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Void.class));
+
+ assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Boolean.class));
+ assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Integer.class));
+ assertTrue(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.Float.class));
+
+ assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(java.lang.String.class));
+ assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(void.class));
+ assertFalse(ReflectionTools.classIsVariablePrimitiveWrapper(int.class));
+ }
+
+ public void testWrapperClass() {
+ assertEquals(java.lang.Void.class, ReflectionTools.getWrapperClass(void.class));
+ assertEquals(java.lang.Integer.class, ReflectionTools.getWrapperClass(int.class));
+ assertEquals(java.lang.Float.class, ReflectionTools.getWrapperClass(float.class));
+ assertEquals(java.lang.Boolean.class, ReflectionTools.getWrapperClass(boolean.class));
+
+ assertNull(ReflectionTools.getWrapperClass(java.lang.String.class));
+ }
+
+ public void testClassForTypeDeclarationStringInt() throws Exception {
+ assertEquals(int.class, ReflectionTools.getClassForTypeDeclaration("int", 0));
+ assertEquals(int[].class, ReflectionTools.getClassForTypeDeclaration("int", 1));
+ assertEquals(int[][][].class, ReflectionTools.getClassForTypeDeclaration("int", 3));
+
+ assertEquals(Object.class, ReflectionTools.getClassForTypeDeclaration("java.lang.Object", 0));
+ assertEquals(Object[][][].class, ReflectionTools.getClassForTypeDeclaration("java.lang.Object", 3));
+
+ assertEquals(void.class, ReflectionTools.getClassForTypeDeclaration("void", 0));
+ try {
+ ReflectionTools.getClassForTypeDeclaration(void.class.getName(), 1);
+ fail("should not get here...");
+ } catch (RuntimeException ex) {
+ // expected
+ }
+ }
+
+ public void testCodeForClass() {
+ assertEquals('I', ReflectionTools.getCodeForClass(int.class));
+ assertEquals('B', ReflectionTools.getCodeForClass(byte.class));
+ }
+
+ public void testClassNameForTypeDeclarationString() throws Exception {
+ assertEquals("int", ReflectionTools.getClassNameForTypeDeclaration("int"));
+ assertEquals("[I", ReflectionTools.getClassNameForTypeDeclaration("int[]"));
+ assertEquals("[[I", ReflectionTools.getClassNameForTypeDeclaration("int [ ] [ ]"));
+
+ assertEquals("java.lang.Object", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object"));
+ assertEquals("[Ljava.lang.Object;", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object\t[]"));
+ assertEquals("[[Ljava.lang.Object;", ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object\t[]\t[]"));
+ }
+
+ public void testArrayDepthForTypeDeclarationString() throws Exception {
+ assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object"));
+ assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object[]"));
+ assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("java.lang.Object[][][]"));
+
+ assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("int"));
+ assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("int[]"));
+ assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("int[][][]"));
+
+ assertEquals(0, ReflectionTools.getArrayDepthForTypeDeclaration("float"));
+ assertEquals(1, ReflectionTools.getArrayDepthForTypeDeclaration("float [ ]"));
+ assertEquals(3, ReflectionTools.getArrayDepthForTypeDeclaration("float[] [] []"));
+ }
+
+ public void testElementTypeNameForTypeDeclarationString() throws Exception {
+ assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object"));
+ assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object[]"));
+ assertEquals("java.lang.Object", ReflectionTools.getElementTypeNameForTypeDeclaration("java.lang.Object[][][]"));
+
+ assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int"));
+ assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int[]"));
+ assertEquals("int", ReflectionTools.getElementTypeNameForTypeDeclaration("int[][][]"));
+
+ assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float"));
+ assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float [ ]"));
+ assertEquals("float", ReflectionTools.getElementTypeNameForTypeDeclaration("float[] [] []"));
+ }
+
+ public void testClassNameForTypeDeclarationStringInt() throws Exception {
+ assertEquals(int.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 0));
+ assertEquals(int[].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 1));
+ assertEquals(int[][][].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("int", 3));
+
+ assertEquals(Object.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object", 0));
+ assertEquals(Object[][][].class.getName(), ReflectionTools.getClassNameForTypeDeclaration("java.lang.Object", 3));
+
+ assertEquals(void.class.getName(), ReflectionTools.getClassNameForTypeDeclaration("void", 0));
+ try {
+ ReflectionTools.getClassNameForTypeDeclaration(void.class.getName(), 1);
+ fail("should not get here...");
+ } catch (IllegalArgumentException ex) {
+ // expected
+ }
+ }
+
+ private Iterable<String> fieldNames(Iterable<Field> fields) {
+ return new TransformationIterable<Field, String>(fields) {
+ @Override
+ protected String transform(Field field) {
+ return field.getName();
+ }
+ };
+ }
+
+ private Iterable<String> methodNames(Iterable<Method> methods) {
+ return new TransformationIterable<Method, String>(methods) {
+ @Override
+ protected String transform(Method method) {
+ return method.getName();
+ }
+ };
+ }
+
+}

Back to the top