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

org.evosuite.executionmode.ListParameters Maven / Gradle / Ivy

There is a newer version: 1.0.6
Show newest version
/**
 * 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);
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy