package org.infinispan.objectfilter.impl.util;
import static org.junit.Assert.assertEquals;
import java.beans.IntrospectionException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* @author anistor@redhat.com
* @since 7.0
*/
public class ReflectionHelperTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
// start of test dummies
private static class Base {
private int prop1;
public float getProp2() {
return 0;
}
private Base prop3 = null;
}
private abstract static class X {
}
private abstract static class Y extends X implements Comparable<String>, List<Long> {
}
private abstract static class Z extends Y {
}
private abstract static class Q extends X implements Map<String, Double> {
}
private abstract static class W extends Q {
}
@SuppressWarnings("unused")
private static class A<T extends Base> {
T[] array;
Float[] array2;
float[] array3;
Collection<T>[] array4;
List<Integer> list;
List<List<Integer>> list2;
List<Base> list3;
Map<String, Integer> map;
Map<T, T> map2;
Y y;
Z z;
Q q;
Q w;
}
// end of dummies
@Test
public void testGetSimpleProperty() throws Exception {
assertEquals(int.class, ReflectionHelper.getAccessor(Base.class, "prop1").getPropertyType());
assertEquals(float.class, ReflectionHelper.getAccessor(Base.class, "prop2").getPropertyType());
}
@Test
public void testPropertyNotFound() throws Exception {
expectedException.expect(IntrospectionException.class);
expectedException.expectMessage("Property not found: unknown");
ReflectionHelper.getAccessor(Base.class, "unknown");
}
@Test
public void testGetNestedProperty() throws Exception {
ReflectionHelper.PropertyAccessor prop3 = ReflectionHelper.getAccessor(Base.class, "prop3");
assertEquals(Base.class, prop3.getPropertyType());
assertEquals(int.class, prop3.getAccessor("prop1").getPropertyType());
}
@Test
public void testGetMultipleProperty() throws Exception {
assertEquals(Base.class, ReflectionHelper.getAccessor(A.class, "array").getPropertyType());
assertEquals(Float.class, ReflectionHelper.getAccessor(A.class, "array2").getPropertyType());
assertEquals(float.class, ReflectionHelper.getAccessor(A.class, "array3").getPropertyType());
assertEquals(Collection.class, ReflectionHelper.getAccessor(A.class, "array4").getPropertyType());
assertEquals(Integer.class, ReflectionHelper.getAccessor(A.class, "list").getPropertyType());
assertEquals(List.class, ReflectionHelper.getAccessor(A.class, "list2").getPropertyType());
assertEquals(Base.class, ReflectionHelper.getAccessor(A.class, "list3").getPropertyType());
assertEquals(Integer.class, ReflectionHelper.getAccessor(A.class, "map").getPropertyType());
assertEquals(Base.class, ReflectionHelper.getAccessor(A.class, "map2").getPropertyType());
assertEquals(Long.class, ReflectionHelper.getAccessor(A.class, "y").getPropertyType());
assertEquals(Long.class, ReflectionHelper.getAccessor(A.class, "z").getPropertyType());
assertEquals(Double.class, ReflectionHelper.getAccessor(A.class, "q").getPropertyType());
assertEquals(Double.class, ReflectionHelper.getAccessor(A.class, "w").getPropertyType());
}
}