package com.opensymphony.xwork2;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.mock.MockActionProxy;
import com.opensymphony.xwork2.mock.MockContainer;
import com.opensymphony.xwork2.mock.MockInterceptor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* A partial test of DefaultActionInvocation.
* Created to change interceptor chain logic.
*
* @author <a href="mailto:kristian at zenior.no">Kristian Rosenvold</a>
*/
public class DefaultActionInvocationTest extends XWorkTestCase {
/**
* Tests interceptor chain invoke.
*
* @throws Exception when action throws exception
*/
public void testInvoke() throws Exception {
List<InterceptorMapping> interceptorMappings = new ArrayList<InterceptorMapping>();
MockInterceptor mockInterceptor1 = new MockInterceptor();
mockInterceptor1.setFoo("test1");
mockInterceptor1.setExpectedFoo("test1");
interceptorMappings.add(new InterceptorMapping("test1", mockInterceptor1));
MockInterceptor mockInterceptor2 = new MockInterceptor();
interceptorMappings.add(new InterceptorMapping("test2", mockInterceptor2));
mockInterceptor2.setFoo("test2");
mockInterceptor2.setExpectedFoo("test2");
MockInterceptor mockInterceptor3 = new MockInterceptor();
interceptorMappings.add(new InterceptorMapping("test3", mockInterceptor3));
mockInterceptor3.setFoo("test3");
mockInterceptor3.setExpectedFoo("test3");
DefaultActionInvocation defaultActionInvocation = new DefaultActionInvocationTester(interceptorMappings);
defaultActionInvocation.invoke();
assertTrue(mockInterceptor1.isExecuted());
assertTrue(mockInterceptor2.isExecuted());
assertTrue(mockInterceptor3.isExecuted());
}
public void testSerialization() throws Exception {
// given
DefaultActionInvocation actionInvocation = new DefaultActionInvocation(new HashMap<String, Object>(), false);
actionInvocation.setContainer(new MockContainer());
// when
DefaultActionInvocation serializable = (DefaultActionInvocation) actionInvocation.serialize();
// then
assertNull(actionInvocation.container);
assertNull(serializable.container);
}
public void testDeserialization() throws Exception {
// given
DefaultActionInvocation actionInvocation = new DefaultActionInvocation(new HashMap<String, Object>(), false);
MockContainer mockContainer = new MockContainer();
ActionContext.getContext().setContainer(mockContainer);
// when
DefaultActionInvocation deserializable = (DefaultActionInvocation) actionInvocation.deserialize(ActionContext.getContext());
// then
assertNotNull(actionInvocation.container);
assertNotNull(deserializable.container);
assertEquals(mockContainer, deserializable.container);
}
}
class DefaultActionInvocationTester extends DefaultActionInvocation {
DefaultActionInvocationTester(List<InterceptorMapping> interceptorMappings) {
super(new HashMap<String, Object>(), false);
interceptors = interceptorMappings.iterator();
MockActionProxy actionProxy = new MockActionProxy();
actionProxy.setMethod("execute");
proxy = actionProxy;
action = new ActionSupport();
}
}