package org.springframework.faces.webflow;
import javax.el.ELContext;
import junit.framework.TestCase;
import org.apache.myfaces.test.el.MockELContext;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.StaticWebApplicationContext;
import org.springframework.webflow.core.collection.LocalAttributeMap;
import org.springframework.webflow.engine.Flow;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.webflow.execution.RequestContextHolder;
import org.springframework.webflow.test.MockRequestContext;
/**
* Tests for {@link FlowELResolver}.
*
* @author Phillip Webb
*/
public class FlowELResolverTests extends TestCase {
private final FlowELResolver resolver = new FlowELResolver();
private final RequestContext requestContext = new MockRequestContext();
private final ELContext elContext = new MockELContext();
protected void setUp() throws Exception {
RequestContextHolder.setRequestContext(this.requestContext);
}
protected void tearDown() throws Exception {
RequestContextHolder.setRequestContext(null);
}
public void testRequestContextResolve() throws Exception {
Object actual = this.resolver.getValue(this.elContext, null, "flowRequestContext");
assertTrue(this.elContext.isPropertyResolved());
assertNotNull(actual);
assertSame(this.requestContext, actual);
}
public void testImplicitFlowResolve() throws Exception {
Object actual = this.resolver.getValue(this.elContext, null, "flowScope");
assertTrue(this.elContext.isPropertyResolved());
assertNotNull(actual);
assertSame(this.requestContext.getFlowScope(), actual);
}
public void testFlowResourceResolve() throws Exception {
ApplicationContext applicationContext = new StaticWebApplicationContext();
((Flow) this.requestContext.getActiveFlow()).setApplicationContext(applicationContext);
Object actual = this.resolver.getValue(this.elContext, null, "resourceBundle");
assertTrue(this.elContext.isPropertyResolved());
assertNotNull(actual);
assertSame(applicationContext, actual);
}
public void testScopeResolve() throws Exception {
this.requestContext.getFlowScope().put("test", "test");
Object actual = this.resolver.getValue(this.elContext, null, "test");
assertTrue(this.elContext.isPropertyResolved());
assertEquals("test", actual);
}
public void testMapAdaptableResolve() throws Exception {
LocalAttributeMap<String> base = new LocalAttributeMap<String>();
base.put("test", "test");
Object actual = this.resolver.getValue(this.elContext, base, "test");
assertTrue(this.elContext.isPropertyResolved());
assertEquals("test", actual);
}
public void testBeanResolveWithRequestContext() throws Exception {
StaticWebApplicationContext applicationContext = new StaticWebApplicationContext();
((Flow) this.requestContext.getActiveFlow()).setApplicationContext(applicationContext);
applicationContext.registerSingleton("test", Bean.class);
Object actual = this.resolver.getValue(this.elContext, null, "test");
assertTrue(this.elContext.isPropertyResolved());
assertNotNull(actual);
assertTrue(actual instanceof Bean);
}
public void testBeanResolveWithoutRequestContext() throws Exception {
RequestContextHolder.setRequestContext(null);
Object actual = this.resolver.getValue(this.elContext, null, "test");
assertFalse(this.elContext.isPropertyResolved());
assertNull(actual);
}
public static class Bean {
}
}