org.evosuite.executionmode.ListClasses Maven / Gradle / Ivy
/**
* Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite
* contributors
*
* This file is part of EvoSuite.
*
* EvoSuite is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3.0 of the License, or
* (at your option) any later version.
*
* EvoSuite is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with EvoSuite. If not, see .
*/
package org.evosuite.executionmode;
import java.io.File;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Set;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.io.FileUtils;
import org.evosuite.EvoSuite;
import org.evosuite.Properties;
import org.evosuite.TestGenerationContext;
import org.evosuite.classpath.ClassPathHacker;
import org.evosuite.classpath.ClassPathHandler;
import org.evosuite.classpath.ResourceList;
import org.evosuite.utils.LoggingUtils;
public class ListClasses {
public static final String NAME = "listClasses";
public static Option getOption(){
return new Option(NAME, "list the testable classes found in the specified classpath/prefix");
}
public static Object execute(Options options, CommandLine line) {
if (line.hasOption("prefix"))
listClassesPrefix(line.getOptionValue("prefix"));
else if (line.hasOption("target"))
listClassesTarget(line.getOptionValue("target"));
else if (EvoSuite.hasLegacyTargets())
listClassesLegacy();
else {
LoggingUtils.getEvoLogger().error("Please specify target prefix ('-prefix' option) or classpath entry ('-target' option) to list testable classes");
Help.execute(options);
}
return null;
}
private static void listClassesTarget(String target) {
Set classes = ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getAllClasses(target, false);
try {
ClassPathHacker.addFile(target);
} catch (IOException e) {
// Ignore?
}
for (String sut : classes) {
try {
if (ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).isClassAnInterface(sut)) {
continue;
}
if (!Properties.USE_DEPRECATED && ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).isClassDeprecated(sut)) {
continue;
}
if (! ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).isClassTestable(sut)) {
continue;
}
} catch (IOException e) {
LoggingUtils.getEvoLogger().error("Could not load class: " + sut);
continue;
}
String row = "";
String groupId = Properties.GROUP_ID;
if(groupId!=null && !groupId.isEmpty() && !groupId.equals("none")){
row += groupId + "\t";
}
row += sut;
LoggingUtils.getEvoLogger().info(row);
}
}
private static void listClassesLegacy() {
File directory = new File(Properties.OUTPUT_DIR);
String[] extensions = { "task" };
for (File file : FileUtils.listFiles(directory, extensions, false)) {
LoggingUtils.getEvoLogger().info(file.getName().replace(".task", ""));
}
}
private static void listClassesPrefix(String prefix) {
String cp = ClassPathHandler.getInstance().getTargetProjectClasspath();
Set classes = new LinkedHashSet<>();
for (String classPathElement : cp.split(File.pathSeparator)) {
classes.addAll(ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getAllClasses(classPathElement, prefix, false));
try {
ClassPathHacker.addFile(classPathElement);
} catch (IOException e) {
// Ignore?
}
}
for (String sut : classes) {
try {
if (ResourceList.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).isClassAnInterface(sut)) {
continue;
}
} catch (IOException e) {
LoggingUtils.getEvoLogger().error("Could not load class: " + sut);
continue;
}
LoggingUtils.getEvoLogger().info(sut);
}
}
}