Tests for ReflectPackage

refs #53
This commit is contained in:
Fabian Becker 2015-12-31 17:54:27 +01:00
parent 072d30439d
commit c00c075c18
3 changed files with 84 additions and 11 deletions

View File

@ -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<Class>(), 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<Class>(), 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<String, Object> 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;

View File

@ -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;
}
}

View File

@ -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<Pair<String,Object>> 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());
}
}