Class XMLResultAggregator

  • All Implemented Interfaces:
    XMLConstants, java.lang.Cloneable

    public class XMLResultAggregator
    extends org.apache.tools.ant.Task
    implements XMLConstants
    Aggregates all <junit> XML formatter testsuite data under a specific directory and transforms the results via XSLT. It is not particulary clean but should be helpful while I am thinking about another technique.

    The main problem is due to the fact that a JVM can be forked for a testcase thus making it impossible to aggregate all testcases since the listener is (obviously) in the forked JVM. A solution could be to write a TestListener that will receive events from the TestRunner via sockets. This is IMHO the simplest way to do it to avoid this file hacking thing.

    Ant Task:
    name="junitreport" category="testing"
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addFileSet​(org.apache.tools.ant.types.FileSet fs)
      Add a new fileset containing the XML results to aggregate
      protected void addTestSuite​(org.w3c.dom.Element root, org.w3c.dom.Element testsuite)
      Add a new testsuite node to the document.
      protected org.w3c.dom.Element createDocument()
      Create a DOM tree.
      AggregateTransformer createReport()
      Generate a report based on the document created by the merge.
      void execute()
      Aggregate all testsuites into a single document and write it to the specified directory and file.
      java.io.File getDestinationFile()
      Get the full destination file where to write the result.
      protected java.io.File[] getFiles()
      Get all .xml files in the fileset.
      void setTodir​(java.io.File value)
      Set the destination directory where the results should be written.
      void setTofile​(java.lang.String value)
      Set the name of the aggregegated results file.
      protected void writeDOMTree​(org.w3c.dom.Document doc, java.io.File file)
      Write the DOM tree to a file.
      • Methods inherited from class org.apache.tools.ant.Task

        bindToOwner, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, log, log, maybeConfigure, perform, reconfigure, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType
      • Methods inherited from class org.apache.tools.ant.ProjectComponent

        clone, getDescription, getLocation, getProject, setDescription, setLocation, setProject
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • filesets

        protected java.util.ArrayList filesets
        the list of all filesets, that should contains the xml to aggregate
      • toFile

        protected java.lang.String toFile
        the name of the result file
      • toDir

        protected java.io.File toDir
        the directory to write the file to
      • transformers

        protected java.util.Vector transformers
      • DEFAULT_DIR

        public static final java.lang.String DEFAULT_DIR
        The default directory: .. It is resolved from the project directory
        See Also:
        Constant Field Values
      • DEFAULT_FILENAME

        public static final java.lang.String DEFAULT_FILENAME
        the default file name: TESTS-TestSuites.xml
        See Also:
        Constant Field Values
      • generatedId

        protected int generatedId
        the current generated id
    • Constructor Detail

      • XMLResultAggregator

        public XMLResultAggregator()
    • Method Detail

      • createReport

        public AggregateTransformer createReport()
        Generate a report based on the document created by the merge.
        Returns:
        the report
      • setTofile

        public void setTofile​(java.lang.String value)
        Set the name of the aggregegated results file. It must be relative from the todir attribute. If not set it will use DEFAULT_FILENAME
        Parameters:
        value - the name of the file.
        See Also:
        setTodir(File)
      • setTodir

        public void setTodir​(java.io.File value)
        Set the destination directory where the results should be written. If not set if will use DEFAULT_DIR. When given a relative directory it will resolve it from the project directory.
        Parameters:
        value - the directory where to write the results, absolute or relative.
      • addFileSet

        public void addFileSet​(org.apache.tools.ant.types.FileSet fs)
        Add a new fileset containing the XML results to aggregate
        Parameters:
        fs - the new fileset of xml results.
      • execute

        public void execute()
                     throws org.apache.tools.ant.BuildException
        Aggregate all testsuites into a single document and write it to the specified directory and file.
        Overrides:
        execute in class org.apache.tools.ant.Task
        Throws:
        org.apache.tools.ant.BuildException - thrown if there is a serious error while writing the document.
      • getDestinationFile

        public java.io.File getDestinationFile()
        Get the full destination file where to write the result. It is made of the todir and tofile attributes.
        Returns:
        the destination file where should be written the result file.
      • getFiles

        protected java.io.File[] getFiles()
        Get all .xml files in the fileset.
        Returns:
        all files in the fileset that end with a '.xml'.
      • writeDOMTree

        protected void writeDOMTree​(org.w3c.dom.Document doc,
                                    java.io.File file)
                             throws java.io.IOException
        Write the DOM tree to a file.
        Parameters:
        doc - the XML document to dump to disk.
        file - the filename to write the document to. Should obviouslly be a .xml file.
        Throws:
        java.io.IOException - thrown if there is an error while writing the content.
      • createDocument

        protected org.w3c.dom.Element createDocument()

        Create a DOM tree. Has 'testsuites' as firstchild and aggregates all testsuite results that exists in the base directory.

        Returns:
        the root element of DOM tree that aggregates all testsuites.
      • addTestSuite

        protected void addTestSuite​(org.w3c.dom.Element root,
                                    org.w3c.dom.Element testsuite)

        Add a new testsuite node to the document. The main difference is that it split the previous fully qualified name into a package and a name.

        For example: org.apache.Whatever will be split into org.apache and Whatever.

        Parameters:
        root - the root element to which the testsuite node should be appended.
        testsuite - the element to append to the given root. It will slightly modify the original node to change the name attribute and add a package one.