1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.views.freemarker;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import javax.portlet.ActionRequest;
27 import javax.portlet.ActionResponse;
28 import javax.portlet.PortletContext;
29 import javax.portlet.PortletMode;
30
31 import org.apache.struts2.StrutsStatics;
32 import org.apache.struts2.portlet.PortletActionConstants;
33 import org.jmock.Mock;
34 import org.jmock.cglib.MockObjectTestCase;
35 import org.jmock.core.Constraint;
36
37 import com.opensymphony.xwork2.ActionContext;
38 import com.opensymphony.xwork2.ActionInvocation;
39 import com.opensymphony.xwork2.ActionProxy;
40
41 public class PortletFreemarkerResultTest extends MockObjectTestCase implements PortletActionConstants {
42
43 Mock mockInvocation = null;
44 Mock mockConfig = null;
45 Mock mockCtx = null;
46
47 public void setUp() throws Exception {
48 super.setUp();
49 mockInvocation = mock(ActionInvocation.class);
50 mockCtx = mock(PortletContext.class);
51
52 Map paramMap = new HashMap();
53 Map sessionMap = new HashMap();
54
55 Map context = new HashMap();
56 context.put(ActionContext.SESSION, sessionMap);
57 context.put(ActionContext.PARAMETERS, paramMap);
58 context.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, mockCtx.proxy());
59
60 ActionContext.setContext(new ActionContext(context));
61
62 mockInvocation.stubs().method("getInvocationContext").will(returnValue(ActionContext.getContext()));
63
64 }
65
66 public void testDoExecute_event_locationIsJsp() {
67 Mock mockRequest = mock(ActionRequest.class);
68 Mock mockResponse = mock(ActionResponse.class);
69 Mock mockProxy = mock(ActionProxy.class);
70
71 Constraint[] params = new Constraint[]{eq(PortletActionConstants.ACTION_PARAM), eq("freemarkerDirect")};
72 mockResponse.expects(once()).method("setRenderParameter").with(params);
73 params = new Constraint[]{eq(PortletActionConstants.MODE_PARAM), eq(PortletMode.VIEW.toString())};
74 mockResponse.expects(once()).method("setRenderParameter").with(params);
75 mockRequest.stubs().method("getPortletMode").will(returnValue(PortletMode.VIEW));
76 mockProxy.stubs().method("getNamespace").will(returnValue(""));
77
78 mockInvocation.stubs().method("getProxy").will(returnValue(mockProxy.proxy()));
79
80 ActionContext ctx = ActionContext.getContext();
81
82 Map session = new HashMap();
83
84 ctx.put(PortletActionConstants.REQUEST, mockRequest.proxy());
85 ctx.put(PortletActionConstants.RESPONSE, mockResponse.proxy());
86 ctx.put(PortletActionConstants.PHASE, PortletActionConstants.EVENT_PHASE);
87 ctx.put(ActionContext.SESSION, session);
88
89 PortletFreemarkerResult result = new PortletFreemarkerResult();
90 try {
91 result.doExecute("/WEB-INF/pages/testJsp.ftl", (ActionInvocation)mockInvocation.proxy());
92 }
93 catch(Exception e) {
94 e.printStackTrace();
95 fail("Error occured!");
96 }
97 assertEquals("/WEB-INF/pages/testJsp.ftl", session.get(RENDER_DIRECT_LOCATION));
98 }
99
100
101 public void tearDown() throws Exception {
102 super.tearDown();
103 ActionContext.setContext(null);
104 }
105 }