1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.application;
20
21 import java.util.Arrays;
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26
27 import javax.faces.FactoryFinder;
28 import javax.faces.component.UIComponent;
29 import javax.faces.component.UIPanel;
30 import javax.faces.component.UIViewParameter;
31 import javax.faces.component.UIViewRoot;
32 import javax.faces.context.FacesContext;
33 import javax.faces.view.ViewDeclarationLanguage;
34 import javax.faces.view.ViewMetadata;
35
36 import junit.framework.Assert;
37
38 import org.apache.myfaces.test.base.junit4.AbstractJsfTestCase;
39 import org.apache.myfaces.test.el.MockValueExpression;
40 import org.apache.myfaces.view.ViewDeclarationLanguageFactoryImpl;
41 import org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage;
42 import org.apache.myfaces.view.facelets.impl.FaceletCacheFactoryImpl;
43 import org.junit.After;
44 import org.junit.Before;
45 import org.junit.Test;
46 import org.junit.runner.RunWith;
47 import org.junit.runners.JUnit4;
48
49
50
51
52
53
54
55 @RunWith(JUnit4.class)
56 public class ViewHandlerImplTest extends AbstractJsfTestCase
57 {
58
59 private ViewHandlerImpl _viewHandler;
60
61 @Before
62 @Override
63 public void setUp() throws Exception
64 {
65 super.setUp();
66
67
68 FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
69 ViewDeclarationLanguageFactoryImpl.class.getName());
70
71 FactoryFinder.setFactory(FactoryFinder.FACELET_CACHE_FACTORY,
72 FaceletCacheFactoryImpl.class.getName());
73
74
75 _viewHandler = new TestViewHandlerImpl();
76 facesContext.getApplication().setViewHandler(_viewHandler);
77
78
79 facesContext.getApplication().addComponent(UIViewRoot.COMPONENT_TYPE,
80 UIViewRoot.class.getName());
81 }
82
83 @After
84 @Override
85 public void tearDown() throws Exception
86 {
87 _viewHandler = null;
88
89 super.tearDown();
90 }
91
92
93
94
95
96
97
98
99 @Test
100 @SuppressWarnings("unchecked")
101 public void testGetBookmarkableURLDoesNotChangeParametersMap()
102 {
103
104 request.setPathElements("/", null, "/newview.jsf", null);
105
106
107 externalContext.getApplicationMap().put("paramvalue", "paramvalue");
108
109
110 Map<String, List<String>> parameters = new HashMap<String, List<String>>();
111 parameters.put("key1", Collections.unmodifiableList(Arrays.asList("value11", "value12")));
112 parameters.put("key2", Collections.unmodifiableList(Arrays.asList("value2")));
113 parameters = Collections.unmodifiableMap(parameters);
114
115 String url = null;
116 try
117 {
118 url = _viewHandler.getBookmarkableURL(facesContext, "/newview.xhtml", parameters, true);
119 }
120 catch (UnsupportedOperationException uoe)
121 {
122
123
124 Assert.fail("ViewHandler.getBookmarkableURL() must not change the parameter Map!");
125 }
126
127
128
129
130 Assert.assertTrue(url.contains("key1=value11"));
131 Assert.assertTrue(url.contains("key1=value12"));
132 Assert.assertTrue(url.contains("key2=value2"));
133 Assert.assertTrue(url.contains("myparam=paramvalue"));
134 }
135
136
137
138
139
140
141
142
143 @Test
144 @SuppressWarnings("unchecked")
145 public void testGetRedirectURLDoesNotChangeParametersMap()
146 {
147
148 request.setPathElements("/", null, "/newview.jsf", null);
149
150
151 externalContext.getApplicationMap().put("paramvalue", "paramvalue");
152
153
154 Map<String, List<String>> parameters = new HashMap<String, List<String>>();
155 parameters.put("key1", Collections.unmodifiableList(Arrays.asList("value11", "value12")));
156 parameters.put("key2", Collections.unmodifiableList(Arrays.asList("value2")));
157 parameters = Collections.unmodifiableMap(parameters);
158
159 String url = null;
160 try
161 {
162 url = _viewHandler.getRedirectURL(facesContext, "/newview.xhtml", parameters, true);
163 }
164 catch (UnsupportedOperationException uoe)
165 {
166
167
168 Assert.fail("ViewHandler.getRedirectURL() must not change the parameter Map!");
169 }
170
171
172
173
174 Assert.assertTrue(url.contains("key1=value11"));
175 Assert.assertTrue(url.contains("key1=value12"));
176 Assert.assertTrue(url.contains("key2=value2"));
177 Assert.assertTrue(url.contains("myparam=paramvalue"));
178 }
179
180
181
182
183
184
185 private class TestViewHandlerImpl extends ViewHandlerImpl
186 {
187
188 @Override
189 public ViewDeclarationLanguage getViewDeclarationLanguage(
190 FacesContext context, String viewId)
191 {
192 return new TestFaceletViewDeclarationLanguage(context);
193 }
194
195 }
196
197
198
199
200
201
202 private class TestFaceletViewDeclarationLanguage extends FaceletViewDeclarationLanguage
203 {
204
205 public TestFaceletViewDeclarationLanguage(FacesContext context)
206 {
207 super(context);
208 }
209
210 @Override
211 public ViewMetadata getViewMetadata(FacesContext context, String viewId)
212 {
213 return new TestViewMetadata(viewId);
214 }
215
216 }
217
218
219
220
221
222
223 private class TestViewMetadata extends ViewMetadata
224 {
225
226 private String _viewId;
227
228 public TestViewMetadata(String viewId)
229 {
230 _viewId = viewId;
231 }
232
233 @Override
234 public UIViewRoot createMetadataView(FacesContext context)
235 {
236 UIViewRoot root = new UIViewRoot();
237 root.setViewId(_viewId);
238 UIComponent metadataFacet = new UIPanel();
239 root.getFacets().put(UIViewRoot.METADATA_FACET_NAME, metadataFacet);
240 UIViewParameter viewparam = new UIViewParameter();
241 viewparam.setName("myparam");
242 viewparam.setValueExpression("value", new MockValueExpression("#{paramvalue}", String.class));
243 metadataFacet.getChildren().add(viewparam);
244 return root;
245 }
246
247 @Override
248 public String getViewId()
249 {
250 return _viewId;
251 }
252
253 }
254
255 }