You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/07/01 01:58:46 UTC
svn commit: r959471 - in /myfaces/test/trunk/test20/src:
main/java/org/apache/myfaces/test/config/
test/java/org/apache/myfaces/test/config/
test/resources/org/apache/myfaces/test/config/
Author: lu4242
Date: Wed Jun 30 23:58:45 2010
New Revision: 959471
URL: http://svn.apache.org/viewvc?rev=959471&view=rev
Log:
MYFACESTEST-11 Update ConfigParser to jsf 2
Added:
myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java
myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml
Removed:
myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser20.java
myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParser20TestCase.java
myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/myfaces20-faces-config-1.xml
Added: myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java (added)
+++ myfaces/test/trunk/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,607 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.myfaces.test.config;
+
+import java.io.IOException;
+import java.net.URL;
+
+import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
+import javax.faces.application.ApplicationFactory;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+
+import org.apache.commons.digester.Digester;
+import org.apache.commons.digester.Rule;
+import org.apache.myfaces.test.mock.MockRenderKit;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+/**
+ * <p>Utility class to parse JavaServer Faces configuration resources, and
+ * register JSF artifacts with the mock object hierarchy.</p>
+ *
+ * <p>The following artifacts are registered:</p>
+ * <ul>
+ * <li><code>Converter</code> (by-id and by-class)</li>
+ * <li><code>RenderKit</code> and <code>Renderer</code></li>
+ * <li><code>UIComponent</code></li>
+ * <li><code>Validator</code></li>
+ * </ul>
+ *
+ * <p>Note that any declared <em>factory</em> instances are explicitly
+ * <strong>NOT</strong> registered, allowing the mock object hierarchy
+ * of the Myfaces Test Framework to manage these APIs.</p>
+ *
+ * <p><strong>USAGE NOTE</strong> - If you are using an instance of this
+ * class within a subclass of <code>AbstractJsfTestCase</code> or
+ * <code>AbstractJmockJsfTestCase</code>, be sure you have completed the
+ * <code>setUp()</code> processing in this base class before calling one
+ * of the <code>parse()</code> methods.</p>
+ *
+ * @since 1.1
+ */
+public class ConfigParser {
+
+
+ // ------------------------------------------------------------ Constructors
+
+
+ /** Creates a new instance of ConfigParser */
+ public ConfigParser() {
+ }
+
+
+ // ------------------------------------------------------ Manifest Constants
+
+
+ /**
+ * <p>Configuration resource URLs for the JSF RI.</p>
+ */
+ private static final String[] JSFRI_RESOURCES =
+ { "/com/sun/faces/jsf-ri-runtime.xml",
+ };
+
+
+ /**
+ * <p>Configuration resource URLs for Apache MyFaces.</p>
+ */
+ private static final String[] MYFACES_RESOURCES =
+ { "/org/apache/myfaces/resource/standard-faces-config.xml",
+ };
+
+ /**
+ * <p>Configuration resource URLs for Apache MyFaces 1.2.</p>
+ */
+ private static final String[] MYFACES_RESOURCES12 =
+ { "/META-INF/standard-faces-config.xml",
+ };
+
+ // ------------------------------------------------------ Instance Variables
+
+
+ /**
+ * <p>The <code>Digester</code> instance we will use for parsing.</p>
+ */
+ private Digester digester = null;
+
+
+ // ------------------------------------------------------- Public Properties
+
+
+ /**
+ * <p>Return the URLs of the platform configuration resources for this
+ * application. The following platforms are currently supported:</p>
+ * <ul>
+ * <li>JavaServer Faces Reference Implementation (version 1.0 - 1.2)</li>
+ * <li>MyFaces (version 1.1)</li>
+ * </ul>
+ *
+ * <p>If MyFaces (version 1.2), currently under development, does not change
+ * the name of the configuration resource, it will be supported as well.</p>
+ */
+ public URL[] getPlatformURLs() {
+
+ URL[] urls = translate(JSFRI_RESOURCES);
+ if (urls[0] == null) {
+ urls = translate(MYFACES_RESOURCES12);
+ if (urls[0] == null) {
+ urls = translate(MYFACES_RESOURCES);
+ }
+ }
+ return urls;
+
+ }
+
+
+ // ---------------------------------------------------------- Public Methods
+
+
+ /**
+ * <p>Parse the specified JavaServer Faces configuration resource, causing
+ * the appropriate JSF artifacts to be registered with the mock object
+ * hierarchy.</p>
+ *
+ * @param url <code>URL</code> of the configuration resource to parse
+ *
+ * @exception IOException if an input/output error occurs
+ * @exception SAXException if a parsing error occurs
+ */
+ public void parse(URL url) throws IOException, SAXException {
+
+ // Acquire and configure the Digester instance we will use
+ Digester digester = digester();
+ ApplicationFactory factory = (ApplicationFactory)
+ FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY);
+ Application application = factory.getApplication();
+ digester.push(application);
+
+ // Perform the required parsing
+ try {
+ digester.parse(url);
+ } finally {
+ digester.clear();
+ }
+
+ }
+
+
+ /**
+ * <p>Parse the specified set of JavaServer Faces configuration resources,
+ * in the listed order, causing the appropriate JSF artifacts to be registered
+ * with the mock object hierarchy.</p>
+ *
+ * @param urls <code>URL</code>s of the configuration resources to parse
+ *
+ * @exception IOException if an input/output error occurs
+ * @exception SAXException if a parsing error occurs
+ */
+ public void parse(URL[] urls) throws IOException, SAXException {
+
+ for (int i = 0; i < urls.length; i++) {
+ parse(urls[i]);
+ }
+
+ }
+
+
+ // --------------------------------------------------------- Private Methods
+
+
+ /**
+ * <p>Return the <code>Digester</code> instance we will use for parsing,
+ * creating and configuring a new instance if necessary.</p>
+ */
+ private Digester digester() {
+
+ if (this.digester == null) {
+ this.digester = new Digester();
+ digester.addRule("faces-config/component", new ComponentRule());
+ digester.addCallMethod
+ ("faces-config/component/component-type", "setComponentType", 0);
+ digester.addCallMethod
+ ("faces-config/component/component-class", "setComponentClass", 0);
+ digester.addRule("faces-config/converter", new ConverterRule());
+ digester.addCallMethod
+ ("faces-config/converter/converter-id", "setConverterId", 0);
+ digester.addCallMethod
+ ("faces-config/converter/converter-class", "setConverterClass", 0);
+ digester.addCallMethod
+ ("faces-config/converter/converter-for-class", "setConverterForClass", 0);
+ digester.addRule("faces-config/render-kit", new RenderKitRule());
+ digester.addRule("faces-config/render-kit/render-kit-id", new RenderKitIdRule());
+ digester.addRule("faces-config/render-kit/renderer", new RendererRule());
+ digester.addCallMethod
+ ("faces-config/render-kit/renderer/component-family", "setComponentFamily", 0);
+ digester.addCallMethod
+ ("faces-config/render-kit/renderer/renderer-class", "setRendererClass", 0);
+ digester.addCallMethod
+ ("faces-config/render-kit/renderer/renderer-type", "setRendererType", 0);
+ digester.addRule("faces-config/render-kit/client-behavior-renderer", new ClientBehaviorRendererRule());
+ digester.addCallMethod
+ ("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-type", "setClientBehaviorRendererType", 0);
+ digester.addCallMethod
+ ("faces-config/render-kit/client-behavior-renderer/client-behavior-renderer-class", "setClientBehaviorRendererClass", 0);
+ digester.addRule("faces-config/validator", new ValidatorRule());
+ digester.addCallMethod
+ ("faces-config/validator/validator-id", "setValidatorId", 0);
+ digester.addCallMethod
+ ("faces-config/validator/validator-class", "setValidatorClass", 0);
+ digester.addRule("faces-config/behavior", new BehaviorRule());
+ digester.addCallMethod
+ ("faces-config/behavior/behavior-id", "setBehaviorId", 0);
+ digester.addCallMethod
+ ("faces-config/behavior/behavior-class", "setBehaviorClass", 0);
+ }
+ return this.digester;
+
+ }
+
+
+ /**
+ * <p>Translate an array of resource names into an array of resource URLs.</p>
+ *
+ * @param names Resource names to translate
+ */
+ private URL[] translate(String[] names) {
+
+ URL[] results = new URL[names.length];
+ for (int i = 0; i < names.length; i++) {
+ results[i] = this.getClass().getResource(names[i]);
+ }
+ return results;
+
+ }
+
+
+ // --------------------------------------------------------- Private Classes
+
+
+ /**
+ * <p>Data bean that stores information related to a component.</p>
+ */
+ class ComponentBean {
+
+ private String componentClass;
+ public String getComponentClass() {
+ return this.componentClass;
+ }
+ public void setComponentClass(String componentClass) {
+ this.componentClass = componentClass;
+ }
+
+ private String componentType;
+ public String getComponentType() {
+ return this.componentType;
+ }
+ public void setComponentType(String componentType) {
+ this.componentType = componentType;
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing components.</p>
+ */
+ class ComponentRule extends Rule {
+
+ public void begin(String namespace, String name, Attributes attributes) {
+ getDigester().push(new ComponentBean());
+ }
+
+ public void end(String namespace, String name) {
+ ComponentBean bean = (ComponentBean) getDigester().pop();
+ Application application = (Application) getDigester().peek();
+ application.addComponent(bean.getComponentType(), bean.getComponentClass());
+ }
+
+ }
+
+
+ /**
+ * <p>Data bean that stores information related to a converter.</p>
+ */
+ class ConverterBean {
+
+ private String converterClass;
+ public String getConverterClass() {
+ return this.converterClass;
+ }
+ public void setConverterClass(String converterClass) {
+ this.converterClass = converterClass;
+ }
+
+ private String converterForClass;
+ public String getConverterForClass() {
+ return this.converterForClass;
+ }
+ public void setConverterForClass(String converterForClass) {
+ this.converterForClass = converterForClass;
+ }
+
+ private String converterId;
+ public String getConverterId() {
+ return this.converterId;
+ }
+ public void setConverterId(String converterId) {
+ this.converterId = converterId;
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing converers.</p>
+ */
+ class ConverterRule extends Rule {
+
+ public void begin(String namespace, String name, Attributes attributes) {
+ getDigester().push(new ConverterBean());
+ }
+
+ public void end(String namespace, String name) {
+ ConverterBean bean = (ConverterBean) getDigester().pop();
+ Application application = (Application) getDigester().peek();
+ if (bean.getConverterId() != null) {
+ application.addConverter(bean.getConverterId(), bean.getConverterClass());
+ } else {
+ Class clazz = null;
+ try {
+ clazz = this.getClass().getClassLoader().loadClass(bean.getConverterForClass());
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("java.lang.ClassNotFoundException: "
+ + bean.getConverterForClass());
+ }
+ application.addConverter(clazz, bean.getConverterClass());
+ }
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing render kits.</p>
+ */
+ class RenderKitRule extends Rule {
+
+ public void begin(String namespace, String name, Attributes attributes) {
+ RenderKitFactory factory = (RenderKitFactory)
+ FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ getDigester().push(factory.getRenderKit(null, RenderKitFactory.HTML_BASIC_RENDER_KIT));
+ }
+
+ public void end(String namespace, String name) {
+ getDigester().pop();
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing render kit identifiers.</p>
+ */
+ class RenderKitIdRule extends Rule {
+
+ public void body(String namespace, String name, String text) {
+ String renderKitId = text.trim();
+ RenderKitFactory factory = (RenderKitFactory)
+ FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = factory.getRenderKit(null, renderKitId);
+ if (renderKit == null) {
+ renderKit = new MockRenderKit();
+ factory.addRenderKit(renderKitId, renderKit);
+ }
+ getDigester().pop();
+ getDigester().push(renderKit);
+ }
+
+ }
+
+
+ /**
+ * <p>Data bean that stores information related to a renderer.</p>
+ */
+ class RendererBean {
+
+ private String componentFamily;
+ public String getComponentFamily() {
+ return this.componentFamily;
+ }
+ public void setComponentFamily(String componentFamily) {
+ this.componentFamily = componentFamily;
+ }
+
+ private String rendererClass;
+ public String getRendererClass() {
+ return this.rendererClass;
+ }
+ public void setRendererClass(String rendererClass) {
+ this.rendererClass = rendererClass;
+ }
+
+ private String rendererType;
+ public String getRendererType() {
+ return this.rendererType;
+ }
+ public void setRendererType(String rendererType) {
+ this.rendererType = rendererType;
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing renderers.</p>
+ */
+ class RendererRule extends Rule {
+
+ public void begin(String namespace, String name, Attributes attributes) {
+ getDigester().push(new RendererBean());
+ }
+
+ public void end(String namespace, String name) {
+ RendererBean bean = (RendererBean) getDigester().pop();
+ RenderKit kit = (RenderKit) getDigester().peek();
+ Renderer renderer = null;
+ Class clazz = null;
+ try {
+ clazz = this.getClass().getClassLoader().loadClass(bean.getRendererClass());
+ renderer = (Renderer) clazz.newInstance();
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Exception while trying to instantiate"
+ + " renderer class '" + bean.getRendererClass() + "' : "
+ + e.getMessage());
+ }
+ kit.addRenderer(bean.getComponentFamily(), bean.getRendererType(),
+ renderer);
+ }
+
+ }
+
+
+ /**
+ * <p>Data bean that stores information related to a validator.</p>
+ */
+ class ValidatorBean {
+
+ private String validatorClass;
+ public String getValidatorClass() {
+ return this.validatorClass;
+ }
+ public void setValidatorClass(String validatorClass) {
+ this.validatorClass = validatorClass;
+ }
+
+ private String validatorId;
+ public String getValidatorId() {
+ return this.validatorId;
+ }
+ public void setValidatorId(String validatorId) {
+ this.validatorId = validatorId;
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing validators.</p>
+ */
+ class ValidatorRule extends Rule {
+
+ public void begin(String namespace, String name, Attributes attributes) {
+ getDigester().push(new ValidatorBean());
+ }
+
+ public void end(String namespace, String name) {
+ ValidatorBean bean = (ValidatorBean) getDigester().pop();
+ Application application = (Application) getDigester().peek();
+ application.addValidator(bean.getValidatorId(), bean.getValidatorClass());
+ }
+
+ }
+
+ class ClientBehaviorRendererBean
+ {
+ private String clientBehaviorRendererType;
+
+ private String clientBehaviorRendererClass;
+
+ public String getClientBehaviorRendererType()
+ {
+ return clientBehaviorRendererType;
+ }
+
+ public void setClientBehaviorRendererType(String clientBehaviorRendererType)
+ {
+ this.clientBehaviorRendererType = clientBehaviorRendererType;
+ }
+
+ public String getClientBehaviorRendererClass()
+ {
+ return clientBehaviorRendererClass;
+ }
+
+ public void setClientBehaviorRendererClass(String clientBehaviorRendererClass)
+ {
+ this.clientBehaviorRendererClass = clientBehaviorRendererClass;
+ }
+ }
+
+ class ClientBehaviorRendererRule extends Rule
+ {
+ public void begin(String namespace, String name, Attributes attributes)
+ {
+ getDigester().push(new ClientBehaviorRendererBean());
+ }
+
+ public void end(String namespace, String name) {
+ ClientBehaviorRendererBean bean = (ClientBehaviorRendererBean) getDigester().pop();
+ RenderKit kit = (RenderKit) getDigester().peek();
+ ClientBehaviorRenderer renderer = null;
+ Class clazz = null;
+ try {
+ clazz = this.getClass().getClassLoader().loadClass(bean.getClientBehaviorRendererClass());
+ renderer = (ClientBehaviorRenderer) clazz.newInstance();
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Exception while trying to instantiate"
+ + " client behavior renderer class '" + bean.getClientBehaviorRendererClass() + "' : "
+ + e.getMessage());
+ }
+ kit.addClientBehaviorRenderer(bean.getClientBehaviorRendererType(),
+ renderer);
+ }
+ }
+
+ /**
+ * <p>Data bean that stores information related to a behavior.</p>
+ */
+ class BehaviorBean
+ {
+
+ private String behaviorClass;
+
+ public String getBehaviorClass()
+ {
+ return this.behaviorClass;
+ }
+
+ @SuppressWarnings("unused")
+ public void setBehaviorClass(String behaviorClass)
+ {
+ this.behaviorClass = behaviorClass;
+ }
+
+ private String behaviorId;
+
+ public String getBehaviorId()
+ {
+ return this.behaviorId;
+ }
+
+ @SuppressWarnings("unused")
+ public void setBehaviorId(String behaviorId)
+ {
+ this.behaviorId = behaviorId;
+ }
+
+ }
+
+
+ /**
+ * <p>Digester <code>Rule</code> for processing behaviors.</p>
+ */
+ class BehaviorRule extends Rule
+ {
+
+ public void begin(String namespace, String name, Attributes attributes)
+ {
+ getDigester().push(new BehaviorBean());
+ }
+
+ public void end(String namespace, String name)
+ {
+ BehaviorBean bean = (BehaviorBean) getDigester().pop();
+ Application application = (Application) getDigester().peek();
+ application.addBehavior(bean.getBehaviorId(), bean.getBehaviorClass());
+ }
+
+ }
+}
Added: myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java (added)
+++ myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.test.config;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.faces.convert.Converter;
+import javax.faces.render.ClientBehaviorRenderer;
+import javax.faces.render.Renderer;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.myfaces.test.base.AbstractJsfTestCase;
+import org.apache.myfaces.test.mock.MockApplication20;
+
+/**
+ * Test case for <code>ConfigParser20</code>
+ */
+public class ConfigParserTestCase extends AbstractJsfTestCase
+{
+
+
+ // ------------------------------------------------------------ Constructors
+
+
+ // Construct a new instance of this test case.
+
+ public ConfigParserTestCase(String name)
+ {
+ super(name);
+ }
+
+
+ // ---------------------------------------------------- Overall Test Methods
+
+
+ // Set up instance variables required by this test case.
+
+ protected void setUp() throws Exception
+ {
+
+ super.setUp();
+ parser = new ConfigParser();
+ application20 = (MockApplication20) application;
+
+ }
+
+
+ // Return the tests included in this test case.
+
+ public static Test suite()
+ {
+
+ return (new TestSuite(ConfigParserTestCase.class));
+
+ }
+
+
+ // Tear down instance variables required by this test case.
+
+ protected void tearDown() throws Exception
+ {
+
+ parser = null;
+ super.tearDown();
+
+ }
+
+
+ // ------------------------------------------------------ Instance Variables
+
+
+ // ConfigParser instance under test
+ ConfigParser parser = null;
+
+ MockApplication20 application20 = null;
+
+ // ------------------------------------------------- Individual Test Methods
+
+
+ // Test access to the platform configuration resources
+ public void testPlatform() throws Exception {
+
+ // Make sure we can acquire a good set of URLs
+ URL[] urls = parser.getPlatformURLs();
+ assertNotNull(urls);
+ assertEquals(1, urls.length);
+ assertNotNull(urls[0]);
+
+ // Now can we actually parse them?
+ parser.parse(urls);
+
+ }
+
+
+ // Test a pristine instance
+ public void testPristine() {
+
+ assertNotNull(parser);
+
+ }
+
+
+ // Test loading a simple configuration resource
+ @SuppressWarnings("unchecked")
+ public void testSimple() throws Exception
+ {
+
+
+ URL url = this.getClass().getResource("/org/apache/myfaces/test/config/faces-config-1.xml");
+ assertNotNull(url);
+ parser.parse(url);
+ Iterator items;
+ List list = new ArrayList();
+
+ items = application20.getComponentTypes();
+ list.clear();
+ while (items.hasNext()) {
+ list.add(items.next());
+ }
+ assertTrue(list.contains("component-type-1"));
+ assertTrue(list.contains("component-type-2"));
+
+ items = application.getConverterIds();
+ list.clear();
+ while (items.hasNext()) {
+ list.add(items.next());
+ }
+ assertTrue(list.contains("converter-id-1"));
+ assertTrue(list.contains("converter-id-2"));
+
+ Converter converter = application.createConverter(Integer.class);
+ assertNotNull(converter);
+ assertTrue(converter instanceof MyConverter);
+
+ items = application.getValidatorIds();
+ list.clear();
+ while (items.hasNext()) {
+ list.add(items.next());
+ }
+ assertTrue(list.contains("validator-id-1"));
+ assertTrue(list.contains("validator-id-2"));
+
+ Renderer renderer = renderKit.getRenderer("component-family-1", "renderer-type-1");
+ assertNotNull(renderer);
+ assertTrue(renderer instanceof MyRenderer);
+
+ renderer = renderKit.getRenderer("component-family-2", "renderer-type-2");
+ assertNotNull(renderer);
+ assertTrue(renderer instanceof MyRenderer);
+
+ items = application20.getBehaviorIds();
+ list.clear();
+ while (items.hasNext()) {
+ list.add(items.next());
+ }
+ assertTrue(list.contains("behavior-1"));
+ assertTrue(list.contains("behavior-2"));
+
+ items = renderKit.getClientBehaviorRendererTypes();
+ list.clear();
+ while (items.hasNext()) {
+ list.add(items.next());
+ }
+ assertTrue(list.contains("client-behavior-renderer-1"));
+ assertTrue(list.contains("client-behavior-renderer-2"));
+
+ ClientBehaviorRenderer clientBehaviorRenderer1 = renderKit.getClientBehaviorRenderer("client-behavior-renderer-1");
+ assertNotNull(clientBehaviorRenderer1);
+ assertTrue(clientBehaviorRenderer1 instanceof MyClientBehaviorRenderer);
+
+ ClientBehaviorRenderer clientBehaviorRenderer2 = renderKit.getClientBehaviorRenderer("client-behavior-renderer-2");
+ assertNotNull(clientBehaviorRenderer2);
+ assertTrue(clientBehaviorRenderer2 instanceof MyClientBehaviorRenderer);
+ }
+
+ // --------------------------------------------------------- Private Methods
+}
Added: myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java (added)
+++ myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.test.config;
+
+import javax.faces.component.behavior.Behavior;
+import javax.faces.event.BehaviorEvent;
+
+public class MyBehavior implements Behavior
+{
+ public void broadcast(BehaviorEvent event)
+ {
+
+ }
+}
Added: myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java (added)
+++ myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.test.config;
+
+import javax.faces.render.ClientBehaviorRenderer;
+
+/**
+ * @author Leonardo Uribe (latest modification by $Author: lu4242 $)
+ * @version $Revision: 816435 $ $Date: 2009-09-17 21:10:12 -0500 (jue, 17 sep 2009) $
+ */
+public class MyClientBehaviorRenderer extends ClientBehaviorRenderer
+{
+
+}
Added: myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java (added)
+++ myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.myfaces.test.config;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+
+/**
+ * <p>Concrete converter implementation for testing.</p>
+ */
+public class MyConverter implements Converter {
+
+ public Object getAsObject(FacesContext context, UIComponent component, String value) {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getAsString(FacesContext context, UIComponent component, Object value) {
+ throw new UnsupportedOperationException();
+ }
+
+}
Added: myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java (added)
+++ myfaces/test/trunk/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java Wed Jun 30 23:58:45 2010
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.myfaces.test.config;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+/**
+ * <p>Concrete validator implementation for testing.</p>
+ */
+public class MyValidator implements Validator {
+
+ @Override
+ public void validate(FacesContext context, UIComponent component,
+ Object value) throws ValidatorException
+ {
+ }
+}
Added: myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml
URL: http://svn.apache.org/viewvc/myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml?rev=959471&view=auto
==============================================================================
--- myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml (added)
+++ myfaces/test/trunk/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml Wed Jun 30 23:58:45 2010
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<faces-config version="2.0"
+ xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
+
+ <component>
+ <component-type>component-type-1</component-type>
+ <component-class>com.mycompany.MyComponent1</component-class>
+ </component>
+
+ <component>
+ <component-type>component-type-2</component-type>
+ <component-class>com.mycompany.MyComponent2</component-class>
+ </component>
+
+ <converter>
+ <converter-id>converter-id-1</converter-id>
+ <converter-class>com.mycompany.MyConverter1</converter-class>
+ </converter>
+
+ <converter>
+ <converter-id>converter-id-2</converter-id>
+ <converter-class>com.mycompany.MyConverter2</converter-class>
+ </converter>
+
+ <converter>
+ <converter-for-class>java.lang.Integer</converter-for-class>
+ <converter-class>org.apache.myfaces.test.config.MyConverter</converter-class>
+ </converter>
+
+ <validator>
+ <validator-id>validator-id-1</validator-id>
+ <validator-class>org.apache.myfaces.test.config.MyValidator</validator-class>
+ </validator>
+
+ <validator>
+ <validator-id>validator-id-2</validator-id>
+ <validator-class>org.apache.myfaces.test.config.MyValidator</validator-class>
+ </validator>
+
+ <behavior>
+ <behavior-id>behavior-1</behavior-id>
+ <behavior-class>org.apache.myfaces.test.config.MyBehavior</behavior-class>
+ </behavior>
+ <behavior>
+ <behavior-id>behavior-2</behavior-id>
+ <behavior-class>org.apache.myfaces.test.config.MyBehavior</behavior-class>
+ </behavior>
+
+ <render-kit>
+
+ <renderer>
+ <component-family>component-family-1</component-family>
+ <renderer-type>renderer-type-1</renderer-type>
+ <renderer-class>org.apache.myfaces.test.config.MyRenderer</renderer-class>
+ </renderer>
+
+ <renderer>
+ <component-family>component-family-2</component-family>
+ <renderer-type>renderer-type-2</renderer-type>
+ <renderer-class>org.apache.myfaces.test.config.MyRenderer</renderer-class>
+ </renderer>
+
+ <client-behavior-renderer>
+ <client-behavior-renderer-type>client-behavior-renderer-1</client-behavior-renderer-type>
+ <client-behavior-renderer-class>org.apache.myfaces.test.config.MyClientBehaviorRenderer</client-behavior-renderer-class>
+ </client-behavior-renderer>
+
+ <client-behavior-renderer>
+ <client-behavior-renderer-type>client-behavior-renderer-2</client-behavior-renderer-type>
+ <client-behavior-renderer-class>org.apache.myfaces.test.config.MyClientBehaviorRenderer</client-behavior-renderer-class>
+ </client-behavior-renderer>
+ </render-kit>
+
+</faces-config>