/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
// TestApplicationImpl_Config.java
package com.sun.faces.application;
import com.sun.faces.cactus.ServletFacesTestCase;
import com.sun.faces.TestComponent;
import com.sun.faces.TestConverter;
import javax.faces.FacesException;
import javax.faces.FactoryFinder;
import javax.faces.application.ApplicationFactory;
import javax.faces.application.NavigationHandler;
import javax.faces.application.StateManager;
import javax.faces.application.ViewHandler;
import javax.faces.component.UIComponent;
import javax.faces.convert.Converter;
import javax.faces.el.PropertyResolver;
import javax.faces.el.VariableResolver;
import javax.faces.event.ActionListener;
import javax.faces.validator.LengthValidator;
import javax.faces.validator.Validator;
import java.util.Iterator;
import java.util.Locale;
/**
* <B>TestApplicationImpl_Config</B> is a class ...
* <p/>
* <B>Lifetime And Scope</B> <P>
*/
public class TestApplicationImpl_Config extends ServletFacesTestCase {
//
// Protected Constants
//
public static String standardComponentTypes[] = {
"javax.faces.Column",
"javax.faces.Command",
"javax.faces.Data",
"javax.faces.Form",
"javax.faces.Graphic",
"javax.faces.Input",
"javax.faces.Message",
"javax.faces.Messages",
"javax.faces.NamingContainer",
"javax.faces.Output",
"javax.faces.Panel",
"javax.faces.Parameter",
"javax.faces.SelectBoolean",
"javax.faces.SelectItem",
"javax.faces.SelectItems",
"javax.faces.SelectMany",
"javax.faces.SelectOne",
"javax.faces.ViewRoot",
"javax.faces.HtmlCommandButton",
"javax.faces.HtmlCommandLink",
"javax.faces.HtmlDataTable",
"javax.faces.HtmlForm",
"javax.faces.HtmlGraphicImage",
"javax.faces.HtmlInputHidden",
"javax.faces.HtmlInputSecret",
"javax.faces.HtmlInputText",
"javax.faces.HtmlInputTextarea",
"javax.faces.HtmlMessage",
"javax.faces.HtmlMessages",
"javax.faces.HtmlOutputFormat",
"javax.faces.HtmlOutputLabel",
"javax.faces.HtmlOutputLink",
"javax.faces.HtmlOutputText",
"javax.faces.HtmlPanelGrid",
"javax.faces.HtmlPanelGroup",
"javax.faces.HtmlSelectBooleanCheckbox",
"javax.faces.HtmlSelectManyCheckbox",
"javax.faces.HtmlSelectManyListbox",
"javax.faces.HtmlSelectManyMenu",
"javax.faces.HtmlSelectOneListbox",
"javax.faces.HtmlSelectOneMenu",
"javax.faces.HtmlSelectOneRadio"
};
public static Class standardComponentClasses[] = {
javax.faces.component.UIColumn.class,
javax.faces.component.UICommand.class,
javax.faces.component.UIData.class,
javax.faces.component.UIForm.class,
javax.faces.component.UIGraphic.class,
javax.faces.component.UIInput.class,
javax.faces.component.UIMessage.class,
javax.faces.component.UIMessages.class,
javax.faces.component.UINamingContainer.class,
javax.faces.component.UIOutput.class,
javax.faces.component.UIPanel.class,
javax.faces.component.UIParameter.class,
javax.faces.component.UISelectBoolean.class,
javax.faces.component.UISelectItem.class,
javax.faces.component.UISelectItems.class,
javax.faces.component.UISelectMany.class,
javax.faces.component.UISelectOne.class,
javax.faces.component.UIViewRoot.class,
javax.faces.component.html.HtmlCommandButton.class,
javax.faces.component.html.HtmlCommandLink.class,
javax.faces.component.html.HtmlDataTable.class,
javax.faces.component.html.HtmlForm.class,
javax.faces.component.html.HtmlGraphicImage.class,
javax.faces.component.html.HtmlInputHidden.class,
javax.faces.component.html.HtmlInputSecret.class,
javax.faces.component.html.HtmlInputText.class,
javax.faces.component.html.HtmlInputTextarea.class,
javax.faces.component.html.HtmlMessage.class,
javax.faces.component.html.HtmlMessages.class,
javax.faces.component.html.HtmlOutputFormat.class,
javax.faces.component.html.HtmlOutputLabel.class,
javax.faces.component.html.HtmlOutputLink.class,
javax.faces.component.html.HtmlOutputText.class,
javax.faces.component.html.HtmlPanelGrid.class,
javax.faces.component.html.HtmlPanelGroup.class,
javax.faces.component.html.HtmlSelectBooleanCheckbox.class,
javax.faces.component.html.HtmlSelectManyCheckbox.class,
javax.faces.component.html.HtmlSelectManyListbox.class,
javax.faces.component.html.HtmlSelectManyMenu.class,
javax.faces.component.html.HtmlSelectOneListbox.class,
javax.faces.component.html.HtmlSelectOneMenu.class,
javax.faces.component.html.HtmlSelectOneRadio.class
};
public static String standardConverterIds[] = {
"javax.faces.BigDecimal",
"javax.faces.BigInteger",
"javax.faces.Boolean",
"javax.faces.Byte",
"javax.faces.Character",
"javax.faces.DateTime",
"javax.faces.Double",
"javax.faces.Float",
"javax.faces.Integer",
"javax.faces.Long",
"javax.faces.Number",
"javax.faces.Short"
};
public static Class standardConverterClasses[] = {
javax.faces.convert.BigDecimalConverter.class,
javax.faces.convert.BigIntegerConverter.class,
javax.faces.convert.BooleanConverter.class,
javax.faces.convert.ByteConverter.class,
javax.faces.convert.CharacterConverter.class,
javax.faces.convert.DateTimeConverter.class,
javax.faces.convert.DoubleConverter.class,
javax.faces.convert.FloatConverter.class,
javax.faces.convert.IntegerConverter.class,
javax.faces.convert.LongConverter.class,
javax.faces.convert.NumberConverter.class,
javax.faces.convert.ShortConverter.class
};
public static Class standardConverterByIdClasses[] = {
java.math.BigDecimal.class,
java.math.BigInteger.class,
java.lang.Boolean.class,
java.lang.Byte.class,
java.lang.Character.class,
null,
java.lang.Double.class,
java.lang.Float.class,
java.lang.Integer.class,
java.lang.Long.class,
null,
java.lang.Short.class
};
public static Class standardConverterPrimitiveClasses[] = {
null,
null,
java.lang.Boolean.TYPE,
java.lang.Byte.TYPE,
java.lang.Character.TYPE,
null,
java.lang.Double.TYPE,
java.lang.Float.TYPE,
java.lang.Integer.TYPE,
java.lang.Long.TYPE,
null,
java.lang.Short.TYPE
};
//
// Class Variables
//
//
// Instance Variables
//
private ApplicationImpl application = null;
// Attribute Instance Variables
// Relationship Instance Variables
//
// Constructors and Initializers
//
public TestApplicationImpl_Config() {
super("TestApplicationImpl_Config");
}
public TestApplicationImpl_Config(String name) {
super(name);
}
//
// Class methods
//
//
// General Methods
//
public void setUp() {
super.setUp();
ApplicationFactory aFactory =
(ApplicationFactory) FactoryFinder.getFactory(
FactoryFinder.APPLICATION_FACTORY);
application = (ApplicationImpl) aFactory.getApplication();
}
//****
//**** NOTE: We should add a test for finding a faces-config.xml file under
//**** WEB-INF/classes/META-INF.
//****
//
// Test Config related methods
//
public void testComponentPositive() {
TestComponent
newTestComponent = null,
testComponent = new TestComponent();
UIComponent uic = null;
// runtime addition
application.addComponent(testComponent.getComponentType(),
"com.sun.faces.TestComponent");
assertTrue(
null !=
(newTestComponent =
(TestComponent)
application.createComponent(testComponent.getComponentType())));
assertTrue(newTestComponent != testComponent);
// built-in components
for (int i = 0, len = standardComponentTypes.length; i < len; i++) {
assertTrue(null != (uic =
application.createComponent(
standardComponentTypes[i])));
assertTrue(
standardComponentClasses[i].isAssignableFrom(uic.getClass()));
}
}
public void testComponentNegative() {
boolean exceptionThrown = false;
// componentType/componentClass with non-existent class
try {
application.addComponent("William",
"BillyBoy");
application.createComponent("William");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
// non-existent mapping
exceptionThrown = false;
try {
application.createComponent("Joebob");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
}
public void testGetComponentTypes() {
Iterator iter = application.getComponentTypes();
assertTrue(null != iter);
assertTrue(isSubset(standardComponentTypes, iter));
}
public void testConverterPositive() {
TestConverter
newTestConverter = null,
testConverter = new TestConverter();
Converter conv = null;
// runtime addition
application.addConverter(testConverter.getConverterId(),
"com.sun.faces.TestConverter");
assertTrue(
null !=
(newTestConverter =
(TestConverter)
application.createConverter(testConverter.getConverterId())));
assertTrue(newTestConverter != testConverter);
// built-in components
// by-id
for (int i = 0, len = standardConverterIds.length; i < len; i++) {
assertTrue(null != (conv =
application.createConverter(
standardConverterIds[i])));
assertTrue(
standardConverterClasses[i].isAssignableFrom(conv.getClass()));
}
// by-class
for (int i = 0, len = standardConverterByIdClasses.length; i < len; i++) {
// skip entries for which by-class registation doesn't make sense.
if (null == standardConverterByIdClasses[i]) {
continue;
}
assertTrue("null != " + standardConverterByIdClasses[i].toString(),
null !=
(conv =
application.createConverter(
standardConverterByIdClasses[i])));
assertTrue(
standardConverterClasses[i].isAssignableFrom(conv.getClass()));
}
// primitive classes
for (int i = 0, len = standardConverterPrimitiveClasses.length; i <
len; i++) {
if (null == standardConverterPrimitiveClasses[i]) {
continue;
}
assertTrue(
"null != " + standardConverterPrimitiveClasses[i].toString(),
null !=
(conv =
application.createConverter(
standardConverterPrimitiveClasses[i])));
assertTrue(
standardConverterClasses[i].isAssignableFrom(conv.getClass()));
}
}
public void testConverterNegative() {
boolean exceptionThrown = false;
// componentType/componentClass with non-existent class
try {
application.addConverter("William",
"BillyBoy");
application.createConverter("William");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
// non-existent mapping
exceptionThrown = false;
try {
application.createConverter("Joebob");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
}
public void testGetConverterIds() {
Iterator iter = application.getConverterIds();
assertTrue(null != iter);
assertTrue(isSubset(standardConverterIds, iter));
}
public void testValidatorPositive() {
Validator
newTestValidator = null,
testValidator = new LengthValidator();
Validator val = null;
// runtime addition
application.addValidator("Billybob",
"javax.faces.validator.LengthValidator");
assertTrue(null != (newTestValidator =
application.createValidator("Billybob")));
assertTrue(newTestValidator != testValidator);
// test standard components
assertTrue(
null !=
(val = application.createValidator("javax.faces.DoubleRange")));
assertTrue(val instanceof Validator);
assertTrue(
null != (val = application.createValidator("javax.faces.Length")));
assertTrue(val instanceof Validator);
assertTrue(
null !=
(val = application.createValidator("javax.faces.LongRange")));
assertTrue(val instanceof Validator);
}
public void testValidatorNegative() {
boolean exceptionThrown = false;
// componentType/componentClass with non-existent class
try {
application.addValidator("William",
"BillyBoy");
application.createValidator("William");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
// non-existent mapping
exceptionThrown = false;
try {
application.createValidator("Joebob");
} catch (FacesException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
}
public void testGetValidatorIds() {
Iterator iter = application.getValidatorIds();
assertTrue(null != iter);
String standardValidatorIds[] = {
"javax.faces.DoubleRange",
"javax.faces.Length",
"javax.faces.LongRange"
};
assertTrue(isSubset(standardValidatorIds, iter));
}
public void testUpdateRuntimeComponents() {
loadFromInitParam("/runtime-components.xml");
ApplicationFactory aFactory =
(ApplicationFactory) FactoryFinder.getFactory(
FactoryFinder.APPLICATION_FACTORY);
application = (ApplicationImpl) aFactory.getApplication();
ActionListener actionListener = null;
NavigationHandler navHandler = null;
PropertyResolver propResolver = null;
VariableResolver varResolver = null;
ViewHandler viewHandler = null;
StateManager stateManager = null;
assertTrue(null != (actionListener =
application.getActionListener()));
assertTrue(actionListener instanceof com.sun.faces.TestActionListener);
assertTrue(null != (navHandler =
application.getNavigationHandler()));
assertTrue(navHandler instanceof com.sun.faces.TestNavigationHandler);
// JSF1.2 BI: application.getPropertyResolver() no longer returns the
// head of the PropertyResolver. Instead returns the head of the
// ELResolver stack wrapped in a PropertyResolver.This also applies to
// VariableResolver
assertTrue(null != (propResolver =
application.getPropertyResolver()));
assertTrue(
application.getPropertyResolver() instanceof javax.faces.el.PropertyResolver);
assertTrue(null != (varResolver =
application.getVariableResolver()));
assertTrue(varResolver instanceof javax.faces.el.VariableResolver);
assertTrue(null != (viewHandler =
application.getViewHandler()));
assertTrue(viewHandler instanceof javax.faces.application.ViewHandler);
assertTrue(null != (stateManager =
application.getStateManager()));
assertTrue(
stateManager instanceof javax.faces.application.StateManager);
System.out.println("DEFAULT:" + application.getDefaultRenderKitId());
assertEquals("WackyRenderKit", application.getDefaultRenderKitId());
}
public void testLocaleConfigPositive() {
loadFromInitParam("/locale-config.xml");
ApplicationFactory aFactory =
(ApplicationFactory) FactoryFinder.getFactory(
FactoryFinder.APPLICATION_FACTORY);
application = (ApplicationImpl) aFactory.getApplication();
Locale locale;
assertNotNull("Can't get default locale from Application",
locale = application.getDefaultLocale());
assertEquals(Locale.US, locale);
Iterator iter;
int j = 0, len = 0;
boolean found = false;
String[][] expected = {
{"de", "DE"},
{"en", "US"},
{"fr", "FR"},
{"ps", "PS"}
};
len = expected.length;
iter = application.getSupportedLocales();
System.out.println("actual supported locales: ");
while (iter.hasNext()) {
System.out.println(iter.next().toString());
}
// test that the supported locales are a superset of the
// expected locales
for (j = 0; j < len; j++) {
assertNotNull("Can't get supportedLocales from Application",
iter = application.getSupportedLocales());
found = false;
while (iter.hasNext()) {
locale = (Locale) iter.next();
if (expected[j][0].equals(locale.getLanguage()) &&
expected[j][1].equals(locale.getCountry())) {
found = true;
}
}
assertTrue("Can't find expected locale " + expected[j][0] + "_" +
expected[j][1] + " in supported-locales list",
found);
}
}
public void testLocaleConfigNegative2() {
boolean exceptionThrown = false;
try {
loadFromInitParam("/locale-config2.xml");
} catch (Throwable e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
}
} // end of class TestApplicationImpl_Config