Package org.codehaus.castor.maven.xmlctf

Source Code of org.codehaus.castor.maven.xmlctf.AbstractTestSuiteMojo

/*
* Copyright 2007 Werner Guttmann
*
* Licensed 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.codehaus.castor.maven.xmlctf;

import java.io.File;
import java.util.Iterator;

import junit.framework.Test;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.castor.xmlctf.TestCaseAggregator;

/**
* Abstract Maven Mojo that initialises the Junit test cases from xml Subclasses
* implement the runJUnit method to provide the Runner (eg. text, swing, ..)
*
* @since 1.2
* @requiresProject true
* @requiresDependencyResolution runtime
*/
public abstract class AbstractTestSuiteMojo extends AbstractMojo {

    /**
     * Property describing the root directory of the tests to be executed.
     */
    private static final String TEST_ROOT_PROPERTY = "castor.xmlctf.root";

    /**
     * Target directory used for the testclasses.
     *
     * @parameter expression="./target/xmlctf"
     */
    private String outputRoot;

    /**
     * The source directory of the tests.
     *
     * @parameter
     */
    private String testRoot;

    /**
     * Optional parameter to overwrite the absolute path to the java tools.jar
     *
     * @parameter
     */
    private String pathToTools;

    /**
     * The project whose project files to create.
     *
     * @parameter expression="${project}"
     * @required
     */
    private MavenProject project;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Starting Castor Mastertestsuite");

        // testRoot checks
        String testRootToUse = System.getProperty(TEST_ROOT_PROPERTY);
        if (testRootToUse == null) {
            testRootToUse = testRoot;
        }

        if (testRootToUse == null) {
            throw new MojoExecutionException(
                    "No testroot found, please specify property -Dcastor.xmlctf.root");
        }

        if (testRootToUse.equals(".") || testRootToUse.equals("..")) {
            // -- convert relative directories "." and ".." to a Canonical path
            File tmp = new File(testRootToUse);
            try {
                testRootToUse = tmp.getCanonicalPath();
            } catch (java.io.IOException iox) {

            }
        } else if (testRootToUse.startsWith("./")
                || testRootToUse.startsWith(".\\")) {
            // -- Remove leading ./ or .\ -- URLClassLoader can't handle such
            // file URLs
            testRoot = testRoot.substring(2);
        }

        File testRootFile = new File(testRootToUse);
        getLog().info("using testRoot: " + testRootFile.getAbsolutePath());

        if (!testRootFile.exists()) {
            throw new MojoExecutionException("Root not found:" + testRoot);
        }


        // set classpath for testcompiler
        // TODO
        String dirSeparator = System.getProperty("file.separator");
        String classpath = "";
        for (Iterator iter = project.getArtifacts().iterator(); iter.hasNext();) {
            classpath += ((Artifact) iter.next()).getFile().getAbsolutePath();
            classpath += System.getProperty("path.separator");
        }

        classpath += project.getBuild().getTestOutputDirectory();
        classpath += System.getProperty("path.separator");

        if (pathToTools != null) {
            classpath += pathToTools + System.getProperty("path.separator");
        } else {
            classpath += System.getProperty("java.home") + dirSeparator + "lib"
            + dirSeparator + "tools.jar";
            classpath += System.getProperty("path.separator");
            classpath += System.getProperty("java.home") + dirSeparator + ".."
            + dirSeparator + "lib" + dirSeparator + "tools.jar";
            classpath += System.getProperty("path.separator");
        }
       
        // set system proerties for
        System.setProperty("xmlctf.classpath.override", classpath);
        if (getLog().isDebugEnabled()) {
            System.setProperty(TestCaseAggregator.VERBOSE_PROPERTY, "true");
            System.setProperty(TestCaseAggregator.PRINT_STACK_TRACE, "true");
        }

        getLog().info("classpath for sourcegenerator is:" + classpath);

        // run testCase
        TestCaseAggregator aggregator = new TestCaseAggregator(testRootFile, outputRoot);
        // aggregator.
        runJUnit(aggregator.suite());
    }

    /**
     * For subclasses to implement to provide a test runner.
     *
     * @param testSuite
     *                The TestSuite to be executed
     * @throws MojoExecutionException
     *                 If test execution fails.
     */
    public abstract void runJUnit(Test testSuite) throws MojoExecutionException;

}
TOP

Related Classes of org.codehaus.castor.maven.xmlctf.AbstractTestSuiteMojo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.