From c00c075c18c44dafc65a114b11274e64ce8a101b Mon Sep 17 00:00:00 2001 From: Fabian Becker Date: Thu, 31 Dec 2015 17:54:27 +0100 Subject: [PATCH] Tests for ReflectPackage refs #53 --- src/main/java/eva2/tools/ReflectPackage.java | 20 ++++----- src/test/java/eva2/tools/DummyClass.java | 30 +++++++++++++ .../java/eva2/tools/ReflectPackageTest.java | 45 +++++++++++++++++++ 3 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 src/test/java/eva2/tools/DummyClass.java create mode 100644 src/test/java/eva2/tools/ReflectPackageTest.java diff --git a/src/main/java/eva2/tools/ReflectPackage.java b/src/main/java/eva2/tools/ReflectPackage.java index 5a292a4c..2b92fcc1 100644 --- a/src/main/java/eva2/tools/ReflectPackage.java +++ b/src/main/java/eva2/tools/ReflectPackage.java @@ -15,6 +15,7 @@ import java.net.URL; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; +import java.util.logging.Level; import java.util.logging.Logger; @@ -200,7 +201,7 @@ public class ReflectPackage { * @return An ArrayList of Class objects contained in the package which may be empty if an error occurs. */ public static Class[] getAllClassesInPackage(String pkg, boolean includeSubs, boolean bSort) { - return getClassesInPackageFltr(new HashSet(), pkg, includeSubs, bSort, null); + return getClassesInPackageFltr(new HashSet<>(), pkg, includeSubs, bSort, null); } /** @@ -355,7 +356,7 @@ public class ReflectPackage { * @return */ public static Class[] getAssignableClassesInPackage(String pckg, Class reqSuperCls, boolean includeSubs, boolean bSort) { - return getClassesInPackageFltr(new HashSet(), pckg, includeSubs, bSort, reqSuperCls); + return getClassesInPackageFltr(new HashSet<>(), pckg, includeSubs, bSort, reqSuperCls); } /** @@ -370,7 +371,7 @@ public class ReflectPackage { public static Class[] getAssignableClasses(String pckgClassName, boolean includeSubs, boolean bSort) { int dotIndex = pckgClassName.lastIndexOf('.'); if (dotIndex <= 0) { - System.err.println("warning: " + pckgClassName + " is not a package!"); + LOGGER.warning(pckgClassName + " is not a package!"); return null; } else { String pckg = pckgClassName.substring(0, pckgClassName.lastIndexOf('.')); @@ -460,14 +461,14 @@ public class ReflectPackage { for (Pair nameVal : paramValuePairs) { boolean succ = BeanInspector.setMem(o, nameVal.head, nameVal.tail); if (!succ) { - System.err.println("Error, unable to set " + nameVal.head + " to " + nameVal.tail + " in object " + o); + LOGGER.severe("Unable to set " + nameVal.head + " to " + nameVal.tail + " in object " + o); return null; } } } return o; } else { - System.err.println("Error in instantiateWithParams!"); + LOGGER.severe("Error in instantiateWithParams!"); return null; } } @@ -475,7 +476,7 @@ public class ReflectPackage { /** * Retrieve an instance of a generic object with arbitrary arguments. Note that the * full package path must be given and the argument array must match a signature of - * an existing constructor. + * an existing constructor. Constructors with primitive types are not supported. * Returns null on a failure and the constructed object otherwise. * * @param clsName @@ -495,14 +496,11 @@ public class ReflectPackage { ct = clz.getConstructor(argClz); o = ct.newInstance(args); } catch (Exception e) { - System.err.println("Unable to retrieve constructor of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getClass()); - System.err.println(e.getMessage()); - e.printStackTrace(); + LOGGER.log(Level.SEVERE, "Unable to retrieve constructor of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getClass(), e); o = null; } } catch (Exception e) { - System.err.println("Unable to create instance of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getMessage()); - e.printStackTrace(System.err); + LOGGER.log(Level.SEVERE, "Unable to create instance of " + clsName + ", arguments " + BeanInspector.toString(args) + "\n" + e.getMessage(), e); o = null; } return o; diff --git a/src/test/java/eva2/tools/DummyClass.java b/src/test/java/eva2/tools/DummyClass.java new file mode 100644 index 00000000..2ac0b588 --- /dev/null +++ b/src/test/java/eva2/tools/DummyClass.java @@ -0,0 +1,30 @@ +package eva2.tools; + +public class DummyClass { + private int i; + private String text; + + public DummyClass(Integer i) { + this.i = i; + } + + public DummyClass() { + this.i = 42; + } + + public int getI() { + return i; + } + + public void setI(int i) { + this.i = i; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } +} diff --git a/src/test/java/eva2/tools/ReflectPackageTest.java b/src/test/java/eva2/tools/ReflectPackageTest.java new file mode 100644 index 00000000..f78955d0 --- /dev/null +++ b/src/test/java/eva2/tools/ReflectPackageTest.java @@ -0,0 +1,45 @@ +package eva2.tools; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; + +public class ReflectPackageTest { + + @Test + public void testInstantiateWithParams() throws Exception { + List> params = new ArrayList<>(); + params.add(new Pair<>("i", 108)); + + DummyClass dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params); + assertEquals(108, dummy.getI()); + assertNull(dummy.getText()); + + params.add(new Pair<>("text", "New Jersey")); + dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params); + assertEquals(108, dummy.getI()); + assertEquals("New Jersey", dummy.getText()); + + // Invalid param + params.add(new Pair<>("invalid", 42.0)); + dummy = (DummyClass)ReflectPackage.instantiateWithParams(DummyClass.class.getCanonicalName(), params); + assertNull(dummy); + } + + @Test + public void testGetInstance() throws Exception { + Object obj = ReflectPackage.getInstance(DummyClass.class.getCanonicalName(), new Object[]{}); + assertTrue(obj instanceof DummyClass); + + // Calls default constructor + DummyClass dummy = (DummyClass)obj; + assertEquals(42, dummy.getI()); + + dummy = (DummyClass)ReflectPackage.getInstance(DummyClass.class.getCanonicalName(), new Object[]{23}); + assertEquals(23, dummy.getI()); + } +} +