package org.jboss.seam.test.integration.mock;
import java.beans.FeatureDescriptor;
import java.util.Iterator;
import javax.el.ELContext;
import javax.el.ELException;
import javax.el.ELResolver;
import javax.el.PropertyNotFoundException;
import javax.el.PropertyNotWritableException;
import org.jboss.seam.mock.SeamTest;
import org.testng.annotations.Test;
/**
* Test for adding EL resolvers to Seam MockFacesContext
*
* @author Pete Muir
*
*/
public class SeamMockELResolverTest extends SeamTest
{
private static final String property = "customELResolverTest";
@Override
protected ELResolver[] getELResolvers()
{
ELResolver[] resolvers = new ELResolver[2];
resolvers[0] = new ELResolver()
{
@Override
public Class<?> getCommonPropertyType(ELContext arg0, Object arg1)
{
return null;
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext arg0, Object arg1)
{
return null;
}
@Override
public Class<?> getType(ELContext arg0, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
return null;
}
@Override
public Object getValue(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
if (SeamMockELResolverTest.property.equals(property))
{
context.setPropertyResolved(true);
return "found";
}
return null;
}
@Override
public boolean isReadOnly(ELContext arg0, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
if (SeamMockELResolverTest.property.equals(property))
{
return false;
}
return false;
}
@Override
public void setValue(ELContext context, Object base, Object property, Object value)
throws NullPointerException, PropertyNotFoundException,
PropertyNotWritableException, ELException
{
if (SeamMockELResolverTest.property.equals(property))
{
throw new PropertyNotWritableException();
}
}
};
resolvers[1] = new ELResolver() {
@Override
public Class<?> getCommonPropertyType(ELContext arg0, Object arg1)
{
return null;
}
@Override
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext arg0, Object arg1)
{
return null;
}
@Override
public Class<?> getType(ELContext arg0, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
return null;
}
@Override
public Object getValue(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
if (base != null && "className".equals(property))
{
context.setPropertyResolved(true);
return base.getClass().getSimpleName();
}
return null;
}
@Override
public boolean isReadOnly(ELContext arg0, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException
{
return true;
}
@Override
public void setValue(ELContext context, Object base, Object property, Object value)
throws NullPointerException, PropertyNotFoundException,
PropertyNotWritableException, ELException
{
throw new PropertyNotWritableException();
}
};
return resolvers;
}
@Test
public void testCustomELResolver() throws Exception
{
new FacesRequest()
{
@Override
protected void invokeApplication() throws Exception
{
assert "found".equals(getValue("#{" + property + "}"));
assert "String".equals(getValue("#{" + property + ".className}"));
}
}.run();
}
}