package org.test4j.tools.reflector;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
import org.test4j.json.encoder.beans.test.User;
import org.test4j.junit.Test4J;
import org.test4j.junit.annotations.DataFrom;
import org.test4j.tools.exception.NoSuchFieldRuntimeException;
@SuppressWarnings({ "rawtypes", "serial", "unchecked" })
public class PropertyAccessorTest extends Test4J {
@Test
@DataFrom("testGetPropertyDatas")
public void testGetPropertyByOgnl(Object target, String property, String expected) {
String value = (String) PropertyAccessor.getPropertyByOgnl(target, property, true);
want.string(value).isEqualTo(expected);
}
public static Iterator testGetPropertyDatas() {
return new DataIterator() {
{
data(new HashMap() {
{
this.put("key1", "value1");
this.put("key2", "value2");
}
}, "key1", "value1");
data(new HashMap() {
{
this.put("key1", User.newInstance(12, "darui.wu"));
this.put("key2", "value2");
}
}, "key1.name", "darui.wu");
data(User.newInstance(12, "darui.wu"), "name", "darui.wu");
data(new HashMap() {
{
put("map1.key1", new HashMap() {
{
put("map2.key2", "ok");
}
});
}
}, "map1.key1.map2.key2", "ok");
}
};
}
@Test(expected = NoSuchFieldRuntimeException.class)
public void testGetPropertyByOgnl_NoKey_Failure() {
Map target = new HashMap() {
{
put("map1.key1", new HashMap() {
{
put("map2.key2", "ok");
}
});
}
};
PropertyAccessor.getPropertyByOgnl(target, "map1.key1.map2.key1", true);
}
@Test
public void testGetPropertyByOgnl_NoKey_Success() {
Map target = new HashMap() {
{
put("map1.key1", new HashMap() {
{
put("map2.key2", "ok");
}
});
}
};
Object value = PropertyAccessor.getPropertyByOgnl(target, "map1.key1.map2.key1", false);
want.object(value).same(target);
}
}