 ------
 Maven Plugin Testing Modules
 ------
 Vincent Siveton
 ------
 2008-07-15
 ------

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Introduction

 The Maven Plugin Testing Modules contains the necessary tools to be able to test Maven Plugins.

* Matrix Comparison

*-----------------------------------------------------------------------------+---------------------------------------------------------+
|| <<Testing Module for Maven Plugins>>                                       || <<Overview>> 
*-----------------------------------------------------------------------------+---------------------------------------------------------+
| {{{./maven-plugin-testing-harness/index.html}maven-plugin-testing-harness}} | Framework to test Maven Plugins with Maven Mock projects.
*-----------------------------------------------------------------------------+---------------------------------------------------------+
| {{{./maven-plugin-testing-tools/index.html}maven-plugin-testing-tools}}     | A set of useful tools to help the Maven Plugin testing.
*-----------------------------------------------------------------------------+---------------------------------------------------------+
| {{{./maven-test-tools/index.html}maven-test-tools}}                         | Framework to test Maven Plugins with {{{http://www.easymock.org/}Easymock}} objects.
*-----------------------------------------------------------------------------+---------------------------------------------------------+

