package fr.inria.diversify.testamplification;
import fr.inria.diversify.buildSystem.maven.MavenBuilder;
import fr.inria.diversify.diversification.InputConfiguration;
import fr.inria.diversify.diversification.InputProgram;
import fr.inria.diversify.testamplification.compare.LogTestComparator;
import fr.inria.diversify.testamplification.compare.LogTestReader;
import fr.inria.diversify.testamplification.compare.SingleMonitoringPoint;
import fr.inria.diversify.testamplification.compare.Test;
import fr.inria.diversify.testamplification.compare.diff.Diff;
import fr.inria.diversify.testamplification.compare.diff.Filter;
import fr.inria.diversify.testamplification.compare.diff.Pool;
import fr.inria.diversify.util.Log;
import org.apache.commons.io.FileUtils;
import org.json.JSONException;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by Simon on 03/02/15.
*/
@Deprecated
public class MakeFilter {
InputProgram inputProgram;
public static void main(String args[]) throws IOException, InterruptedException, JSONException {
// Log.DEBUG();
int n = Integer.parseInt(args[2]);
String p1dir = args[0];
String p2dir = args[1];
String out;
MakeFilter mk = new MakeFilter();
Filter filter;
if(args.length == 5) {
filter = new Filter(args[3]);
out = args[4];
} else {
filter = new Filter();
out = args[3];
}
for(int i = 0; i < n/3; i++) {
Pool.reset();
Log.info("run {}",i);
mk.runProgram(p1dir, false);
mk.runProgram(p2dir, false);
Diff testdiff = mk.compare(p1dir + "/log", p2dir + "/log");
filter.addFilter(testdiff.buildFilter());
Log.info("filter size: {}", testdiff.size());
}
for(int i = 0; i < n/3; i++) {
Pool.reset();
Log.info("run {}",i);
mk.runProgram(p1dir, true);
mk.runProgram(p2dir, false);
Diff testdiff = mk.compare(p1dir + "/log", p2dir + "/log");
filter.addFilter(testdiff.buildFilter());
Log.info("filter size: {}", testdiff.size());
}
for(int i = 0; i < n/3; i++) {
Pool.reset();
Log.info("run {}",i);
mk.runProgram(p1dir, true);
mk.runProgram(p2dir, true);
Diff testdiff = mk.compare(p1dir + "/log", p2dir + "/log");
filter.addFilter(testdiff.buildFilter());
Log.info("filter size: {}", testdiff.size());
}
filter.print(out);
}
protected void runProgram(String dir, boolean clean) throws IOException, InterruptedException {
Log.info("run {}", dir);
File log = new File(dir + "/log/");
FileUtils.forceDelete(log);
log.mkdir();
(new File(log +"/id")).createNewFile();
MavenBuilder builder = new MavenBuilder(dir);
if(clean) {
builder.runGoals(new String[]{"clean", "test"}, false);
} else {
builder.runGoals(new String[]{"test"}, false);
}
}
public Diff compare(String dirOriginalLog, String dirSosieLog) throws JSONException, IOException {
LogTestReader reader = new LogTestReader();
Collection<Test> testOriginal = reader.loadLog(dirOriginalLog);
Collection<Test> testSosie = reader.loadLog(dirSosieLog);
LogTestComparator comparator = new LogTestComparator(testOriginal, testSosie);
Diff diff = comparator.compare();
Log.info("total point fix: {}", comparator.nbPointFix);
Log.info("total point non fix: {}",comparator.nbPointNotFix);
Log.info("total point: {}",comparator.nbPointNotFix +comparator.nbPointFix);
Log.info("total executed point: {}", SingleMonitoringPoint.executedPoint);
return diff;
}
}