package hudson.plugins.seleniumGrails;
import hudson.tasks.test.AbstractTestResultAction;
import hudson.model.AbstractBuild;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class SeleniumGrailsTestResultAction extends AbstractTestResultAction {
private String resultFile;
private int numPassed;
private int numFailed;
private int totalTime;
private String[] details;
public SeleniumGrailsTestResultAction(AbstractBuild build, String resultFile){
super(build);
this.resultFile = resultFile;
parseResults(resultFile);
}
public int getTotalCount() {
return numPassed + numFailed;
}
public int getFailCount(){
return numFailed;
}
public Object getResult() {
SeleniumGrailsResultBean result = new SeleniumGrailsResultBean();
result.setPassed(numPassed);
result.setFailed(numFailed);
result.setDetails(details);
return result;
}
private void parseResults(String resultFile){
try{
Document resultDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(resultFile);
NodeList summary = resultDoc.getElementsByTagName("summary");
NodeList summaryChildren = summary.item(0).getChildNodes();
for(int i = 0; i < summaryChildren.getLength(); i++){
Node n = summaryChildren.item(i);
if(n.getNodeName().equals("numTestPasses")) numPassed = Integer.parseInt(n.getTextContent());
if(n.getNodeName().equals("numTestFailures")) numFailed = Integer.parseInt(n.getTextContent());
if(n.getNodeName().equals("totalTime")) totalTime = Integer.parseInt(n.getTextContent());
}
NodeList tests = resultDoc.getElementsByTagName("tests");
NodeList testsChildren = tests.item(0).getChildNodes();
details = new String[testsChildren.getLength()];
for(int i = 0; i < testsChildren.getLength(); i++){
details[i] = testsChildren.item(i).getTextContent();
}
} catch(Exception e){
e.printStackTrace();
}
}
}