All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.netbeans.modules.junit.DefaultITPlugin Maven / Gradle / Ivy

There is a newer version: RELEASE240
Show newest version
/*
 * 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.netbeans.modules.junit;

import org.netbeans.modules.junit.api.JUnitSettings;
import org.netbeans.modules.junit.api.JUnitTestUtil;
import java.net.URL;
import java.util.List;
import java.util.Map;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.queries.UnitTestForSourceQuery;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.modules.gsf.testrunner.plugin.CommonPlugin;
import org.netbeans.modules.gsf.testrunner.plugin.CommonPlugin.Location;
import org.netbeans.modules.junit.plugin.JUnitPlugin;
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
import org.openide.filesystems.FileObject;

/**
 * Default IT plugin.
 */
public final class DefaultITPlugin extends JUnitPlugin {

    @Override
    protected Location getTestLocation(Location sourceLocation) {
        FileObject fileObj = sourceLocation.getFileObject();
        ClassPath srcCp;

        if ((srcCp = ClassPath.getClassPath(fileObj, ClassPath.SOURCE)) == null) {
            return null;
        }

        String baseResName = srcCp.getResourceName(fileObj, '/', false);
        if(baseResName == null) {
            return null;
        }
        String testResName = !fileObj.isFolder()
                             ? getTestResName(baseResName, fileObj.getExt())
                             : getSuiteResName(baseResName);
        assert testResName != null;
	Location oppositeLocation = getOppositeLocation(sourceLocation, srcCp, testResName, true);
        return oppositeLocation;
    }



    @Override
    protected Location getTestedLocation(Location testLocation) {
        FileObject fileObj = testLocation.getFileObject();
        ClassPath srcCp;

        if (fileObj.isFolder()
               || ((srcCp = ClassPath.getClassPath(fileObj, ClassPath.SOURCE)) == null)) {
            return null;
        }

        String baseResName = srcCp.getResourceName(fileObj, '/', false);
        if (baseResName == null) {
            return null;     //if the selectedFO is not within the classpath
        }
        String srcResName = getSrcResName(baseResName, fileObj.getExt());
        if (srcResName == null) {
            return null;     //if the selectedFO is not a test class (by name)
        }

        return getOppositeLocation(testLocation,
                                   srcCp,
                                   srcResName,
                                   false);
    }

    private static String getTestResName(String baseResName, String ext) {
        StringBuilder buf
                = new StringBuilder(baseResName.length() + ext.length() + 10);
	buf.append(baseResName).append("IT"); //NOI18N
        if (ext.length() != 0) {
            buf.append('.').append(ext);
        }
        return buf.toString();
    }

    /**
     */
    private static String getSuiteResName(String baseResName) {
        if (baseResName.length() == 0) {
            return JUnitSettings.getDefault().getRootSuiteClassName();
        }

        final String suiteSuffix = "Suite";                             //NOI18N

        String lastNamePart
                = baseResName.substring(baseResName.lastIndexOf('/') + 1);

        StringBuilder buf = new StringBuilder(baseResName.length()
                                              + lastNamePart.length()
                                              + suiteSuffix.length()
                                              + 6);
        buf.append(baseResName).append('/');
        buf.append(Character.toUpperCase(lastNamePart.charAt(0)))
           .append(lastNamePart.substring(1));
        buf.append(suiteSuffix);
        buf.append(".java");                                            //NOI18N

        return buf.toString();
    }

    /**
     */
    private static String getSrcResName(String testResName, String ext) {
        if (!testResName.endsWith("IT")) {  //NOI18N
            return null;
        }

        StringBuilder buf
                = new StringBuilder(testResName.length() + ext.length());
	buf.append(testResName.substring(0, testResName.length() - 2)); //NOI18N
        if (ext.length() != 0) {
            buf.append('.').append(ext);
        }
        return buf.toString();
    }

    private static Location getOppositeLocation(
	    final Location sourceLocation,
	    final ClassPath fileObjCp,
	    final String oppoResourceName,
	    final boolean sourceToTest) {
	FileObject fileObj = sourceLocation.getFileObject();
	FileObject fileObjRoot;

	if ((fileObjRoot = fileObjCp.findOwnerRoot(fileObj)) == null) {
	    return null;
	}

	URL[] oppoRootsURLs = sourceToTest
		? UnitTestForSourceQuery.findUnitTests(fileObjRoot)
		: UnitTestForSourceQuery.findSources(fileObjRoot);
	//if (sourceToTest && (oppoRootsURLs.length == 0)) {
	//    PENDING - offer creation of new unit tests root
	//}
	if ((oppoRootsURLs == null) || (oppoRootsURLs.length == 0)) {
	    return null;
	}

	ClassPath oppoRootsClassPath = ClassPathSupport
		.createClassPath(oppoRootsURLs);
	final List oppoFiles = oppoRootsClassPath
		.findAllResources(oppoResourceName);
	if (oppoFiles.isEmpty()) {
	    //if (sourceToTest) {
	    //    PENDING - offer creation of new test class
	    //}
	    return null;
	}

	return new Location(oppoFiles.get(0)/*, null*/);
    }

    @Override
    protected FileObject[] createTests(FileObject[] filesToTest, FileObject targetRoot, Map params) {
	Project project = FileOwnerQuery.getOwner(filesToTest[0]);
        if (project != null) {
            JUnitPlugin plugin = JUnitTestUtil.getPluginForProject(project);
            if (plugin instanceof DefaultPlugin) {
                params.put(CommonPlugin.CreateTestParam.INC_GENERATE_INTEGRATION_TEST, Boolean.TRUE);
		return ((DefaultPlugin) plugin).createTests(filesToTest, targetRoot, params);
	    }
	}
	return new FileObject[0];
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy