package hudson.plugins.jwsdp_sqe; import hudson.model.AbstractBuild; import org.apache.commons.digester.Digester; import org.xml.sax.SAXException; import org.xml.sax.InputSource; import java.io.File; import java.io.IOException; /** * Root of the SQE test report. * * <p> * A {@link Report} is a set of {@link Suite}s. * * @author Kohsuke Kawaguchi */ public class Report extends TestCollection<Report,Suite> { // parent doesn't exist. so specify dummy private final SQETestAction owner; public Report(SQETestAction owner) { this.owner = owner; setName("SQE Test Result"); setId("root"); } @Override public AbstractBuild getOwner() { return owner.owner; } @Override public Report getPreviousResult() { SQETestAction p = owner.getPreviousResult(); if(p!=null) return p.getResult(); else return null; } /** * Loads SQE report file into this {@link Report} object. */ public void add( File reportXml ) throws IOException, SAXException { add(new InputSource(reportXml.toURI().toURL().toExternalForm())); } public void add( InputSource reportXml ) throws IOException, SAXException { Digester digester = new Digester(); digester.setClassLoader(getClass().getClassLoader()); digester.push(this); digester.addObjectCreate("*/testsuite",Suite.class); digester.addObjectCreate("*/test",Test.class); digester.addObjectCreate("*/testcase",TestCase.class); digester.addSetNext("*/testsuite","add"); digester.addSetNext("*/test","add"); if(considersTestAsTestObject()) digester.addCallMethod("*/test", "setconsiderTestAsTestObject"); digester.addSetNext("*/testcase","add"); // common properties applicable to more than one TestObjects. digester.addBeanPropertySetter("*/id"); digester.addBeanPropertySetter("*/name"); digester.addBeanPropertySetter("*/description"); digester.addSetProperties("*/status","value","statusString"); // set attributes. in particular @revision digester.addBeanPropertySetter("*/status","statusMessage"); digester.parse(reportXml); } protected boolean considersTestAsTestObject() { return owner.considerTestAsTestObject(); } public String getChildTitle() { return "Test Suite"; } }