myfaces-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject [myfaces-test] 10/24: MYFACESTEST-11 Update ConfigParser to jsf 2
Date Thu, 03 May 2018 18:26:38 GMT
This is an automated email from the ASF dual-hosted git repository.

deki pushed a commit to branch 1_0_0_beta_4
in repository https://gitbox.apache.org/repos/asf/myfaces-test.git

commit cc3d9a0754a965f373f2708c89662bf21cc4b3fc
Author: Leonardo Uribe <lu4242@apache.org>
AuthorDate: Wed Jun 30 23:58:45 2010 +0000

    MYFACESTEST-11 Update ConfigParser to jsf 2
---
 .../apache/myfaces/test/config/ConfigParser.java   | 607 +++++++++++++++++++++
 .../apache/myfaces/test/config/ConfigParser20.java | 164 ------
 .../test/config/ConfigParser20TestCase.java        | 119 ----
 .../myfaces/test/config/ConfigParserTestCase.java  | 196 +++++++
 .../org/apache/myfaces/test/config/MyBehavior.java |  56 +-
 .../test/config/MyClientBehaviorRenderer.java}     |  56 +-
 .../apache/myfaces/test/config/MyConverter.java}   |  65 ++-
 .../apache/myfaces/test/config/MyValidator.java}   |  63 ++-
 ...ces20-faces-config-1.xml => faces-config-1.xml} | 173 +++---
 9 files changed, 1026 insertions(+), 473 deletions(-)

diff --git a/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java b/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
new file mode 100644
index 0000000..81dd213
--- /dev/null
+++ b/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser.java
@@ -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());
+        }
+
+    }
+}
diff --git a/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser20.java b/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser20.java
deleted file mode 100644
index 8325508..0000000
--- a/test20/src/main/java/org/apache/myfaces/test/config/ConfigParser20.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * 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 org.apache.commons.digester.Digester;
-import org.apache.commons.digester.Rule;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-
-import javax.faces.FactoryFinder;
-import javax.faces.application.Application;
-import javax.faces.application.ApplicationFactory;
-import java.io.IOException;
-import java.net.URL;
-
-/**
- * <p>Extended {@link org.apache.myfaces.test.config.ConfigParser ConfigParser} to cover JSF 2.0 artifacts</p>
- * <p/>
- * <p>The following artifacts are registered additionally:</p>
- * <ul>
- * <li><code>Behavior</code></li>
- * </ul>
- *
- * @since 2.0
- */
-public class ConfigParser20 extends ConfigParser
-{
-
-    /**
-     * Creates a new instance of ConfigParser
-     */
-    public ConfigParser20()
-    {
-        super();
-    }
-
-    /**
-     * <p>The <code>Digester</code> instance we will use for parsing.</p>
-     */
-    private Digester digester = null;
-
-    @Override
-    public void parse(URL url) throws IOException, SAXException
-    {
-
-        super.parse(url);
-
-        // 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();
-        }
-
-    }
-
-
-    @Override
-    public void parse(URL[] urls) throws IOException, SAXException
-    {
-
-        for (URL url : urls) {
-            parse(url);
-        }
-    }
-
-
-    /**
-     * @return Return the <code>Digester</code> instance we will use for parsing,
-     *         creating and configuring a new instance if necessary.
-     */
-    private Digester digester()
-    {
-
-        if (this.digester == null) {
-            this.digester = new Digester();
-
-            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>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());
-        }
-
-    }
-}
diff --git a/test20/src/test/java/org/apache/myfaces/test/config/ConfigParser20TestCase.java b/test20/src/test/java/org/apache/myfaces/test/config/ConfigParser20TestCase.java
deleted file mode 100644
index 4c6f928..0000000
--- a/test20/src/test/java/org/apache/myfaces/test/config/ConfigParser20TestCase.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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 junit.framework.Test;
-import junit.framework.TestSuite;
-import org.apache.myfaces.test.base.AbstractJsfTestCase;
-import org.apache.myfaces.test.mock.MockApplication20;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Test case for <code>ConfigParser20</code>
- */
-public class ConfigParser20TestCase extends AbstractJsfTestCase
-{
-
-
-    // ------------------------------------------------------------ Constructors
-
-
-    // Construct a new instance of this test case.
-
-    public ConfigParser20TestCase(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 ConfigParser20();
-        application20 = (MockApplication20) application;
-
-    }
-
-
-    // Return the tests included in this test case.
-
-    public static Test suite()
-    {
-
-        return (new TestSuite(ConfigParser20TestCase.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
-    ConfigParser20 parser = null;
-
-    MockApplication20 application20 = null;
-
-    // ------------------------------------------------- Individual Test Methods
-
-    @SuppressWarnings("unchecked")
-    public void testSimple() throws Exception
-    {
-
-        URL url = this.getClass().getResource("/org/apache/myfaces/test/config/myfaces20-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 = application20.getBehaviorIds();
-        list.clear();
-        while (items.hasNext()) {
-            list.add(items.next());
-        }
-        assertTrue(list.contains("behavior-1"));
-        assertTrue(list.contains("behavior-2"));
-    }
-}
diff --git a/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java b/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java
new file mode 100644
index 0000000..1aab275
--- /dev/null
+++ b/test20/src/test/java/org/apache/myfaces/test/config/ConfigParserTestCase.java
@@ -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
+}
diff --git a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java b/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java
similarity index 97%
copy from test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
copy to test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java
index c5f113a..0c6a183 100644
--- a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
+++ b/test20/src/test/java/org/apache/myfaces/test/config/MyBehavior.java
@@ -1,28 +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)
-    {
-        
-    }
-}
+/*
+ * 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)
+    {
+        
+    }
+}
diff --git a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java b/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java
similarity index 73%
copy from test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
copy to test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java
index c5f113a..48e693d 100644
--- a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
+++ b/test20/src/test/java/org/apache/myfaces/test/config/MyClientBehaviorRenderer.java
@@ -1,28 +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)
-    {
-        
-    }
-}
+/*
+ * 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
+{
+
+}
diff --git a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java b/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java
similarity index 60%
copy from test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
copy to test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java
index c5f113a..0d8137d 100644
--- a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
+++ b/test20/src/test/java/org/apache/myfaces/test/config/MyConverter.java
@@ -1,28 +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.behavior.Behavior;
-import javax.faces.event.BehaviorEvent;
-
-public class MyBehavior implements Behavior
-{
-    public void broadcast(BehaviorEvent event)
-    {
-        
-    }
-}
+/*
+ * 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();
+    }
+
+}
diff --git a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java b/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java
similarity index 65%
rename from test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
rename to test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java
index c5f113a..3dbc014 100644
--- a/test20/src/main/java/org/apache/myfaces/test/config/MyBehavior.java
+++ b/test20/src/test/java/org/apache/myfaces/test/config/MyValidator.java
@@ -1,28 +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.behavior.Behavior;
-import javax.faces.event.BehaviorEvent;
-
-public class MyBehavior implements Behavior
-{
-    public void broadcast(BehaviorEvent event)
-    {
-        
-    }
-}
+/*
+ * 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
+    {
+    }
+}
diff --git a/test20/src/test/resources/org/apache/myfaces/test/config/myfaces20-faces-config-1.xml b/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml
similarity index 69%
rename from test20/src/test/resources/org/apache/myfaces/test/config/myfaces20-faces-config-1.xml
rename to test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml
index f3df8a4..0823403 100644
--- a/test20/src/test/resources/org/apache/myfaces/test/config/myfaces20-faces-config-1.xml
+++ b/test20/src/test/resources/org/apache/myfaces/test/config/faces-config-1.xml
@@ -1,78 +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-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>javax.faces.validator.LengthValidator</validator-class>
-  </validator>
-
-  <validator>
-      <validator-id>validator-id-2</validator-id>
-      <validator-class>javax.faces.validator.LongRangeValidator</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>
-
-  </render-kit>
-
-
-
-</faces-config>
+<?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>

-- 
To stop receiving notification emails like this one, please contact
deki@apache.org.

Mime
View raw message