<body>
<!--
 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.
-->
<p>This package contains a utility class,
<a href="ConfigParser.html">ConfigParser</a>, which provides a
<code>parse()</code> method that can parse JavaServer Faces configuration
resources.  It supports the registration, in the mock object hierarchy
set up by an instance of <code>AbstractJsfTestCase</code> or
<code>AbstractJmockJsfTestCase</code>, of the following JSF artifacts:</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>
</body>
