org.evosuite.executionmode.ListParameters 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.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.commons.cli.Option;
import org.evosuite.Properties;
import org.evosuite.Properties.Parameter;
import org.evosuite.utils.LoggingUtils;
/**
* Class used to list on the console all the options in Properties
*
* @author arcuri
*
*/
public class ListParameters {
public static final String NAME = "listParameters";
public static Option getOption(){
return new Option(NAME,"list all the parameters that can be set with -D");
}
public static Object execute(){
List rows = new ArrayList();
/*
* This is necessary, as reading from evosuite-files properties
* can change the defaults
*/
Properties.getInstance().resetToDefaults();
for (Field f : Properties.class.getFields()) {
if (f.isAnnotationPresent(Parameter.class)) {
Parameter p = f.getAnnotation(Parameter.class);
String description = p.description();
Class> type = f.getType();
if(type.isEnum()){
description += " (Values: "+Arrays.toString(type.getEnumConstants())+")";
}
String def;
try {
Object obj = f.get(null);
if(obj==null){
def = "";
} else {
if(type.isArray()){
def = Arrays.toString((Object[])obj);
} else {
def = obj.toString();
}
}
} catch (Exception e) {
def = "";
}
rows.add(new Row(p.key(), type.getSimpleName(), description, def));
}
}
Collections.sort(rows);
String name = "Name";
String type = "Type";
String defaultValue = "Default";
String description = "Description";
String space = " ";
int maxName = Math.max(name.length(),getMaxNameLength(rows));
int maxType = Math.max(type.length(),getMaxTypeLength(rows));
int maxDefault = Math.max(defaultValue.length(),getMaxDefaultLength(rows));
LoggingUtils.getEvoLogger().info(name + getGap(name,maxName) + space + type + getGap(type,maxType) +
space + defaultValue + getGap(defaultValue,maxDefault) + space + description);
for(Row row : rows){
LoggingUtils.getEvoLogger().info(row.name + getGap(row.name,maxName) + space + row.type + getGap(row.type,maxType) +
space + row.defaultValue + getGap(row.defaultValue,maxDefault) + space + row.description);
}
return null;
}
private static String getGap(String s, int max){
String gap = "";
for(int i=0; i < (max-s.length()); i++){
gap += " ";
}
return gap;
}
private static int getMaxNameLength(List rows){
int max = 0;
for(Row row : rows){
if(row.name.length() > max){
max = row.name.length();
}
}
return max;
}
private static int getMaxDefaultLength(List rows){
int max = 0;
for(Row row : rows){
if(row.defaultValue.length() > max){
max = row.defaultValue.length();
}
}
return max;
}
private static int getMaxTypeLength(List rows){
int max = 0;
for(Row row : rows){
if(row.type.length() > max){
max = row.type.length();
}
}
return max;
}
private static class Row implements Comparable{
public final String name;
public final String type;
public final String description;
public final String defaultValue;
public Row(String name, String type, String description, String defaultValue) {
super();
this.name = name;
this.type = type;
this.description = description;
this.defaultValue = defaultValue;
}
public int compareTo(Row other){
return this.name.compareTo(other.name);
}
}
}