1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.webapp;
20
21 import java.lang.reflect.Field;
22 import java.util.Locale;
23
24 import javax.faces.application.ProjectStage;
25 import javax.faces.component.UIViewRoot;
26 import javax.faces.context.FacesContext;
27 import javax.servlet.ServletConfig;
28 import javax.servlet.ServletException;
29
30 import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
31 import org.easymock.EasyMock;
32 import org.easymock.IAnswer;
33 import org.junit.Assert;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.junit.runners.JUnit4;
37
38
39
40
41
42
43
44 @RunWith(JUnit4.class)
45 public class MyFacesServletTest extends AbstractJsfTestCase
46 {
47
48 private MyFacesServlet _servlet;
49
50 @Override
51 public void setUp() throws Exception
52 {
53 super.setUp();
54
55 _servlet = new MyFacesServlet();
56 }
57
58 @Override
59 public void tearDown() throws Exception
60 {
61 _servlet = null;
62
63 super.tearDown();
64 }
65
66
67
68
69
70 @Test
71 public void testInitInitializerCalled() throws ServletException
72 {
73 FacesInitializer initializer = EasyMock.createMock(FacesInitializer.class);
74 EasyMock.expect(initializer.initStartupFacesContext(servletContext)).andReturn(facesContext).once();
75 initializer.initFaces(servletContext);
76 EasyMock.expectLastCall().once();
77 initializer.destroyStartupFacesContext(facesContext);
78 EasyMock.expectLastCall().once();
79
80
81 ServletConfig servletConfig = EasyMock.createMock(ServletConfig.class);
82 EasyMock.expect(servletConfig.getServletContext()).andReturn(servletContext).anyTimes();
83 EasyMock.expect(servletConfig.getInitParameter(EasyMock.isA(String.class))).andReturn(null).anyTimes();
84
85 EasyMock.replay(initializer, servletConfig);
86 _setFacesInitializer(initializer);
87
88 _servlet.init(servletConfig);
89 EasyMock.verify(initializer);
90 }
91
92
93
94
95
96 @Test
97 public void testInitFacesContextAvailable() throws ServletException
98 {
99
100 facesContext.release();
101
102 final FacesInitializer realInitializer = FacesInitializerFactory.getFacesInitializer(servletContext);
103 final AssertFacesContextAnswer assertAnswer = new AssertFacesContextAnswer();
104
105 FacesInitializer mockInitializer = EasyMock.createMock(FacesInitializer.class);
106
107
108 EasyMock.expect(mockInitializer.initStartupFacesContext(servletContext))
109 .andAnswer(new IAnswer<FacesContext>()
110 {
111
112 public FacesContext answer() throws Throwable
113 {
114 assertAnswer.facesContext = realInitializer.initStartupFacesContext(servletContext);
115 return assertAnswer.facesContext;
116 }
117
118 });
119
120
121 mockInitializer.initFaces(servletContext);
122 EasyMock.expectLastCall().andStubAnswer(assertAnswer);
123
124
125 mockInitializer.destroyStartupFacesContext(EasyMock.isA(FacesContext.class));
126 EasyMock.expectLastCall().andStubAnswer(new IAnswer<Object>()
127 {
128
129 public Object answer() throws Throwable
130 {
131 FacesContext argCtx = (FacesContext) EasyMock.getCurrentArguments()[0];
132 Assert.assertNotNull(argCtx);
133 Assert.assertEquals(assertAnswer.facesContext, argCtx);
134
135 realInitializer.destroyStartupFacesContext(argCtx);
136
137 return null;
138 }
139
140
141 });
142
143
144 ServletConfig servletConfig = EasyMock.createMock(ServletConfig.class);
145 EasyMock.expect(servletConfig.getServletContext()).andReturn(servletContext).anyTimes();
146 EasyMock.expect(servletConfig.getInitParameter(EasyMock.isA(String.class))).andReturn(null).anyTimes();
147
148 EasyMock.replay(mockInitializer, servletConfig);
149 _setFacesInitializer(mockInitializer);
150
151 _servlet.init(servletConfig);
152 EasyMock.verify(mockInitializer);
153
154 Assert.assertNull(FacesContext.getCurrentInstance());
155 }
156
157
158
159
160
161 private void _setFacesInitializer(FacesInitializer facesInitializer)
162 {
163 try
164 {
165 Field field = MyFacesServlet.class.getDeclaredField("_facesInitializer");
166 field.setAccessible(true);
167 field.set(_servlet, facesInitializer);
168 }
169 catch (Exception e)
170 {
171 throw new IllegalStateException("Could not set FacesInitializer for test", e);
172 }
173
174 }
175
176
177
178
179
180 private final class AssertFacesContextAnswer implements IAnswer<Object>
181 {
182
183 private FacesContext facesContext;
184
185 public Object answer() throws Throwable
186 {
187 Assert.assertEquals(facesContext, FacesContext.getCurrentInstance());
188 Assert.assertNotNull(facesContext);
189 Assert.assertNotNull(facesContext.getApplication());
190 Assert.assertNotNull(facesContext.getExternalContext());
191 Assert.assertNotNull(facesContext.getExceptionHandler());
192 Assert.assertEquals(facesContext.getApplication()
193 .getProjectStage().equals(ProjectStage.Production),
194 facesContext.isProjectStage(ProjectStage.Production));
195 UIViewRoot viewRoot = facesContext.getViewRoot();
196 Assert.assertNotNull(viewRoot);
197 Assert.assertEquals(Locale.getDefault(), viewRoot.getLocale());
198
199 return null;
200 }
201
202 }
203
204 }