<?xml version="1.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.
-->
<document>
  <properties>
    <title>Home</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>
    <!-- ================================================== -->
    <section name="Apache Commons Testing">
      <p>
        <em>Apache Commons Testing</em>
        is a multi-module project focused on providing code for testing applications
        using various testing frameworks with an initial focus on JUnit 4.
      </p>
    </section>
    <!-- ================================================== -->
    <section name="Documentation">
      <p>
        The package descriptions in the
        <a href="javadocs/api-release/index.html">Javadoc</a>
        give an overview of the available features
        and various
        <a href="project-reports.html">project reports</a>
        are provided.
      </p>
      <p>
        The Javadoc API documents are available online:
      </p>
      <ul>
        <li>
          The
          <a href="javadocs/api-1.0.0/index.html">current stable release 1.0.0</a>
          [Java 7]
        </li>
      </ul>
      <p>
        The
        <a href="source-repository.html">git repository</a>
        can be
        <a href="https://git-wip-us.apache.org/repos/asf?p=commons-testing.git">browsed</a>
        , or you can browse/contribute via
        <a href="https://github.com/apache/commons-testing">GitHub</a>
        .
      </p>
    </section>
    <!-- ================================================== -->
    <section name="Release Information">
      <p>The latest stable release of Lang is 1.0.0. You may: </p>
      <ul>
        <li>
          Download
          <a href="https://commons.apache.org/lang/download_lang.cgi">1.0.0</a>
        </li>
        <li>
          Read the
          <a href="RELEASE-NOTES.txt">1.0.0 release notes</a>
        </li>
      </ul>
      <p>
        Alternatively you can pull various artifacts it from the central Maven repository:
      </p>
      <ul>
        <li>
          <a href="generic/dependency-info.html">Apache Commons Testing Generic</a>
        </li>
        <li>
          <a href="junit4/dependency-info.html">Apache Commons Testing for JUnit 4</a>
        </li>
        <li>
          <a href="junit4-mongodb/dependency-info.html">Apache Commons Testing for JUnit 4 for MongoDB</a>
        </li>
      </ul>
      <p>
        For information on previous releases see the
        <a href="release-history.html">Release History</a>
        , and to download previous releases see the
        <a href="https://archive.apache.org/dist/commons/testing/">Commons Testing Archive</a>
        .
      </p>
    </section>
    <!-- ================================================== -->
    <section name="Getting Involved">
      <p>
        The
        <a href="mail-lists.html">commons developer mailing list</a>
        is the main channel of communication for contributors. Please remember that the lists are shared between all
        commons components, so prefix your email by [testing].
      </p>
      <p>
        You can also visit the #apache-commons IRC channel on irc.freenode.net or peruse
        <a href="issue-tracking.html">JIRA</a>
        . Specific links of interest for JIRA are:
      </p>
      <ul>
        <li>
          Ideas looking for code:
          <a
            href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20TESTING%20AND%20resolution%20%3D%20Unresolved%20AND%20fixVersion%20%3D%20%22Patch%20Needed%22%20ORDER%20BY%20priority%20DESC">Patch Needed</a>
        </li>
        <li>
          Issues with patches, looking for reviews:
          <a
            href="https://issues.apache.org/jira/issues/?jql=fixVersion%20%3D%20%22Review%20Patch%22%20AND%20project%20%3D%20TESTING%20AND%20resolution%20%3D%20Unresolved%20ORDER%20BY%20priority%20DESC">Review Patch</a>
        </li>
      </ul>
      <p>
        Alternatively you can go through the
        <em>Needs Work</em>
        tags in the
        <a href="taglist.html">TagList report</a>
        .
      </p>
      <p>
        If you'd like to offer up pull requests via GitHub rather than applying patches to JIRA, we have a
        <a href="https://github.com/apache/commons-testing/">GitHub mirror</a>
        .
      </p>
    </section>
    <!-- ================================================== -->
    <section name="Support">
      <p>
        The
        <a href="mail-lists.html">commons mailing lists</a>
        act as the main support forum.
        The user list is suitable for most library usage queries.
        The dev list is intended
        for the development discussion.
        Please remember that the lists are shared between all commons components,
        so
        prefix your email by [testing].
      </p>
      <p>
        Bug reports and enhancements are also welcomed via the
        <a href="issue-tracking.html">JIRA</a>
        issue tracker.
        Please read the instructions carefully.
      </p>
    </section>
    <!-- ================================================== -->
  </body>
</document>
