package org.jtwig.property.resolver; import com.google.common.base.Optional; import org.jtwig.property.resolver.request.PropertyResolveRequest; import org.jtwig.reflection.model.Value; import org.jtwig.reflection.model.java.JavaClass; import org.jtwig.reflection.model.java.JavaClassManager; import org.jtwig.reflection.model.java.JavaField; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; public class FieldPropertyResolverTest { private final JavaField javaField = mock(JavaField.class); private FieldPropertyResolver underTest = new FieldPropertyResolver(javaField); @Test public void fieldAccessThrowsIllegalAccess() throws Exception { Object context = new Object(); PropertyResolveRequest request = mock(PropertyResolveRequest.class); given(request.getContext()).willReturn(context); given(javaField.value(context)).willThrow(IllegalAccessException.class); Optional<Value> result = underTest.resolve(request); assertEquals(Optional.<Value>absent(), result); } @Test public void fieldAccessThrowsIllegalArgumentException() throws Exception { Object context = new Object(); PropertyResolveRequest request = mock(PropertyResolveRequest.class); given(request.getContext()).willReturn(context); given(javaField.value(context)).willThrow(IllegalArgumentException.class); Optional<Value> result = underTest.resolve(request); assertEquals(Optional.<Value>absent(), result); } @Test(expected = IllegalArgumentException.class) public void IllegalArgumentException() throws Exception { JavaClass metadata = JavaClassManager.classManager().metadata(TestBean.class); JavaField javaField = metadata.field("property").get(); javaField.value(new Object()); } public static class TestBean { private final String property; public TestBean(String property) { this.property = property; } } }