1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.config;
20
21 import java.io.File;
22 import java.lang.reflect.Field;
23 import java.util.HashMap;
24
25 import javax.faces.FactoryFinder;
26 import javax.faces.validator.BeanValidator;
27 import javax.faces.validator.LengthValidator;
28 import javax.faces.validator.RequiredValidator;
29 import javax.faces.webapp.FacesServlet;
30 import org.apache.myfaces.application.ApplicationFactoryImpl;
31
32 import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMockTestCase;
33 import org.apache.myfaces.test.mock.MockRenderKitFactory;
34 import org.apache.myfaces.util.ExternalSpecifications;
35 import org.apache.myfaces.view.ViewDeclarationLanguageFactoryImpl;
36 import org.junit.Assert;
37 import org.junit.Test;
38
39
40
41
42
43
44
45 public class FacesConfiguratorDefaultValidatorsTestCase extends AbstractJsfConfigurableMockTestCase
46 {
47
48 private FacesConfigurator facesConfigurator;
49
50 public FacesConfiguratorDefaultValidatorsTestCase()
51 {
52 }
53
54 public void setUp() throws Exception
55 {
56 super.setUp();
57
58 facesConfigurator = new FacesConfigurator(externalContext);
59 }
60
61 @Override
62 public void tearDown() throws Exception
63 {
64 facesConfigurator = null;
65
66 super.tearDown();
67 }
68
69 @Override
70 public void setFactories() throws Exception
71 {
72 super.setFactories();
73 FactoryFinder.setFactory(FactoryFinder.APPLICATION_FACTORY,
74 ApplicationFactoryImpl.class.getName());
75 FactoryFinder.setFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY,
76 ViewDeclarationLanguageFactoryImpl.class.getName());
77 }
78
79
80
81
82
83
84 @SuppressWarnings("unchecked")
85 private void _cleanRenderKits()
86 {
87 try
88 {
89 MockRenderKitFactory renderKitFactory
90 = (MockRenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
91 Field renderKitsField = MockRenderKitFactory.class.getDeclaredField("renderKits");
92 renderKitsField.setAccessible(true);
93 renderKitsField.set(renderKitFactory, new HashMap());
94 }
95 catch (Exception e)
96 {
97 throw new IllegalStateException("Could not configure MockRenderKitFactory for test case.", e);
98 }
99 }
100
101
102
103
104
105
106
107 private void _setBeanValidationAvailable(boolean available)
108 {
109 try
110 {
111 Field field = ExternalSpecifications.class.getDeclaredField("beanValidationAvailable");
112 field.setAccessible(true);
113 field.set(ExternalSpecifications.class, available);
114 }
115 catch (Exception e)
116 {
117 throw new IllegalStateException("Could not configure BeanValidation for the test case.", e);
118 }
119 }
120
121
122
123
124
125
126 @Test
127 public void testDefaultBeanValidatorDisabledButPresentInFacesConfig()
128 {
129
130 _cleanRenderKits();
131
132
133 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
134 servletContext.setDocumentRoot(documentRoot);
135
136
137 servletContext.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
138 "/default-bean-validator.xml");
139
140
141
142 servletContext.addInitParameter(
143 BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME, "true");
144
145
146 _setBeanValidationAvailable(true);
147
148
149 facesConfigurator.configure();
150
151
152
153 Assert.assertTrue(application.getDefaultValidatorInfo()
154 .containsKey(BeanValidator.VALIDATOR_ID));
155 }
156
157
158
159
160
161
162
163 @Test
164 public void testDefaultBeanValidatorDisabled()
165 {
166
167 _cleanRenderKits();
168
169
170 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
171 servletContext.setDocumentRoot(documentRoot);
172
173
174
175 servletContext.addInitParameter(
176 BeanValidator.DISABLE_DEFAULT_BEAN_VALIDATOR_PARAM_NAME, "true");
177
178
179 _setBeanValidationAvailable(true);
180
181
182 facesConfigurator.configure();
183
184
185
186
187 Assert.assertFalse(application.getDefaultValidatorInfo()
188 .containsKey(BeanValidator.VALIDATOR_ID));
189 }
190
191
192
193
194
195 @Test
196 public void testBeanValidationNotAvailable()
197 {
198
199 _cleanRenderKits();
200
201
202 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
203 servletContext.setDocumentRoot(documentRoot);
204
205
206 _setBeanValidationAvailable(false);
207
208
209 facesConfigurator.configure();
210
211
212
213 Assert.assertFalse(application.getDefaultValidatorInfo()
214 .containsKey(BeanValidator.VALIDATOR_ID));
215 }
216
217
218
219
220
221
222
223
224
225 @Test
226 public void testDefaultValidatorsClearedByLatterConfigFileWithEmptyElement()
227 {
228
229 _cleanRenderKits();
230
231
232 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
233 servletContext.setDocumentRoot(documentRoot);
234
235
236
237
238
239
240 servletContext.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
241 "/empty-default-validators.xml,/default-required-validator.xml");
242
243
244 _setBeanValidationAvailable(true);
245
246
247 facesConfigurator.configure();
248
249
250
251
252 Assert.assertFalse(application.getDefaultValidatorInfo().containsKey(RequiredValidator.VALIDATOR_ID));
253
254
255 Assert.assertTrue(application.getDefaultValidatorInfo().containsKey(BeanValidator.VALIDATOR_ID));
256 }
257
258
259
260
261
262
263
264
265
266 @Test
267 public void testDefaultValidatorsNotClearedByLatterConfigFileWithNoElement()
268 {
269
270 _cleanRenderKits();
271
272
273 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
274 servletContext.setDocumentRoot(documentRoot);
275
276
277
278
279
280
281 servletContext.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
282 "/no-default-validators.xml,/default-required-validator.xml");
283
284
285 _setBeanValidationAvailable(true);
286
287
288 facesConfigurator.configure();
289
290
291
292 Assert.assertTrue(application.getDefaultValidatorInfo().containsKey(RequiredValidator.VALIDATOR_ID));
293
294
295 Assert.assertTrue(application.getDefaultValidatorInfo().containsKey(BeanValidator.VALIDATOR_ID));
296 }
297
298
299
300
301
302
303
304
305
306
307 @Test
308 public void testDefaultValidatorsOverwrittenByLatterConfigFile()
309 {
310
311 _cleanRenderKits();
312
313
314 File documentRoot = new File("src/test/resources/org/apache/myfaces/config/testfiles");
315 servletContext.setDocumentRoot(documentRoot);
316
317
318
319
320
321
322 servletContext.addInitParameter(FacesServlet.CONFIG_FILES_ATTR,
323 "/default-length-validator.xml,/default-required-validator.xml");
324
325
326 _setBeanValidationAvailable(false);
327
328
329 facesConfigurator.configure();
330
331
332
333
334 Assert.assertFalse(application.getDefaultValidatorInfo().containsKey(RequiredValidator.VALIDATOR_ID));
335
336
337
338 Assert.assertTrue(application.getDefaultValidatorInfo().containsKey(LengthValidator.VALIDATOR_ID));
339
340
341 Assert.assertFalse(application.getDefaultValidatorInfo().containsKey(BeanValidator.VALIDATOR_ID));
342 }
343
344 }