org.evosuite.statistics.backend.CSVStatisticsBackend 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.statistics.backend;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.evosuite.Properties;
import org.evosuite.ga.Chromosome;
import org.evosuite.statistics.OutputVariable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This statistics backend writes all (selected) output variables to a CSV file
*
* @author gordon
*
*/
public class CSVStatisticsBackend implements StatisticsBackend {
private static Logger logger = LoggerFactory.getLogger(CSVStatisticsBackend.class);
/**
* Retrieve header with variable names
* @param data
* @return
*/
private String getCSVHeader(Map> data) {
StringBuilder r = new StringBuilder();
Iterator>> it = data.entrySet().iterator();
while (it.hasNext()) {
Entry> e = (Entry>)it.next();
r.append(e.getKey());
if (it.hasNext())
r.append(",");
}
return r.toString();
}
/**
* Retrieve one line of data
* @param data
* @return
*/
private String getCSVData(Map> data) {
StringBuilder r = new StringBuilder();
Iterator>> it = data.entrySet().iterator();
while (it.hasNext()) {
Entry> e = (Entry>)it.next();
r.append(e.getValue().getValue());
if (it.hasNext())
r.append(",");
}
return r.toString();
}
/**
* Return the folder of where reports should be generated.
* If the folder does not exist, try to create it
*
* @return
* @throws RuntimeException if folder does not exist, and we cannot create it
*/
public static File getReportDir() throws RuntimeException{
File dir = new File(Properties.REPORT_DIR);
if(!dir.exists()){
boolean created = dir.mkdirs();
if(!created){
String msg = "Cannot create report dir: "+Properties.REPORT_DIR;
logger.error(msg);
throw new RuntimeException(msg);
}
}
return dir;
}
@Override
public void writeData(Chromosome result, Map> data) {
// Write to evosuite-report/statistics.csv
try {
File outputDir = getReportDir();
File f = new File(outputDir.getAbsolutePath() + File.separator + "statistics.csv");
BufferedWriter out = new BufferedWriter(new FileWriter(f, true));
if (f.length() == 0L) {
out.write(getCSVHeader(data) + "\n");
}
out.write(getCSVData(data) + "\n");
out.close();
} catch (IOException e) {
logger.warn("Error while writing statistics: " + e.getMessage());
}
}
}