package fr.inria.diversify.buildSystem.ant;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import fr.inria.diversify.buildSystem.AbstractBuilder;
import fr.inria.diversify.util.Log;
/**
* User: Simon
* Date: 02/12/13
* Time: 11:54
*/
public class AntBuilder extends AbstractBuilder {
protected String testTarget;
public AntBuilder(String directory, String testTarget) {
super(directory);
this.testTarget = testTarget;
}
protected void runPrivate(String[] goals, boolean verbose) {
if(goals == null) {
goals = this.goals;
}
Log.debug("run ant: sh script/runAnt.sh "+directory+ " "+testTarget);
String[] command = {"sh", "script/runAnt.sh", directory,testTarget};
ProcessBuilder probuilder = new ProcessBuilder( command );
//You can set up your work directory
probuilder.directory(new File(System.getProperty("user.dir")));
try {
Process process = probuilder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
String result = "";
while ((line = br.readLine()) != null) {
result += line + "\n";
}
process.waitFor();
parseResult(result);
} catch (Exception e) {
e.printStackTrace();
}
}
//TODO not working
protected void parseResult(String r) {
Pattern patternCompileError = Pattern.compile("\\s*\\[javac\\] (\\d+) error.*");
Pattern patternJunitError = Pattern.compile("\\s*\\[junit\\]\\s* FAILED.*");
Pattern patternJunitOK = Pattern.compile("\\s*BUILD SUCCESSFUL\\s*");
for (String s : r.split("\n")) {
Log.debug(s);
Matcher m = patternCompileError.matcher(s);
if (m.matches()) {
compileError = true;
break;
}
// m = patternJunitError.matcher(s);
// if ( m.matches()) {
if(s.contains("[junit]") && s.contains("FAILED")) {
status = -2;
allTestRun = true;
break;
}
m = patternJunitOK.matcher(s);
if ( m.matches()) {
status = 0;
allTestRun = true;
break;
}
}
if(!compileError && status == -3)
status = -3;
}
}