org.apache.tools.ant.taskdefs.optional.junit

Class XMLResultAggregator

Implemented Interfaces:
XMLConstants

public class XMLResultAggregator
extends 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.

Field Summary

static String
DEFAULT_DIR
The default directory: ..
static String
DEFAULT_FILENAME
the default file name: TESTS-TestSuites.xml
protected Vector
filesets
the list of all filesets, that should contains the xml to aggregate
protected int
generatedId
the current generated id
protected File
toDir
the directory to write the file to
protected String
toFile
the name of the result file
protected Vector
transformers

Fields inherited from class org.apache.tools.ant.Task

description, location, target, taskName, taskType, wrapper

Fields inherited from class org.apache.tools.ant.ProjectComponent

project

Fields inherited from interface org.apache.tools.ant.taskdefs.optional.junit.XMLConstants

ATTR_CLASSNAME, ATTR_ERRORS, ATTR_FAILURES, ATTR_ID, ATTR_MESSAGE, ATTR_NAME, ATTR_PACKAGE, ATTR_TESTS, ATTR_TIME, ATTR_TYPE, ATTR_VALUE, ERROR, FAILURE, PROPERTIES, PROPERTY, SYSTEM_ERR, SYSTEM_OUT, TESTCASE, TESTSUITE, TESTSUITES

Method Summary

void
addFileSet(FileSet fs)
Add a new fileset containing the XML results to aggregate
protected void
addTestSuite(Element root, Element testsuite)
Add a new testsuite node to the document.
protected 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.
protected File
getDestinationFile()
Get the full destination file where to write the result.
protected File[]
getFiles()
Get all .xml files in the fileset.
void
setTodir(File value)
Set the destination directory where the results should be written.
void
setTofile(String value)
Set the name of the aggregegated results file.
protected void
writeDOMTree(Document doc, File file)
Write the DOM tree to a file.

Methods inherited from class org.apache.tools.ant.Task

execute, getDescription, getLocation, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, maybeConfigure, perform, reconfigure, setDescription, setLocation, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType

Methods inherited from class org.apache.tools.ant.ProjectComponent

getProject, log, log, setProject

Field Details

DEFAULT_DIR

public static final String DEFAULT_DIR
The default directory: .. It is resolved from the project directory

DEFAULT_FILENAME

public static final String DEFAULT_FILENAME
the default file name: TESTS-TestSuites.xml

filesets

protected Vector filesets
the list of all filesets, that should contains the xml to aggregate

generatedId

protected int generatedId
the current generated id

toDir

protected File toDir
the directory to write the file to

toFile

protected String toFile
the name of the result file

transformers

protected Vector transformers

Method Details

addFileSet

public void addFileSet(FileSet fs)
Add a new fileset containing the XML results to aggregate
Parameters:
fs - the new fileset of xml results.

addTestSuite

protected void addTestSuite(Element root,
                            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.

createDocument

protected 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.

createReport

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

execute

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

getDestinationFile

protected 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 File[] getFiles()
Get all .xml files in the fileset.
Returns:
all files in the fileset that end with a '.xml'.

setTodir

public void setTodir(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.

setTofile

public void setTofile(String value)
Parameters:
value - the name of the file.

writeDOMTree

protected void writeDOMTree(Document doc,
                            File file)
            throws 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.

Copyright B) 2000-2008 Apache Software Foundation. All Rights Reserved.