org.apache.tools.ant.taskdefs.optional.junit
Class XMLResultAggregator
- Cloneable, XMLConstants
public class XMLResultAggregator
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.
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
|
ATTR_CLASSNAME , ATTR_ERRORS , ATTR_FAILURES , ATTR_ID , ATTR_MESSAGE , ATTR_NAME , ATTR_PACKAGE , ATTR_TESTS , ATTR_TIME , ATTR_TYPE , ATTR_VALUE , ERROR , FAILURE , HOSTNAME , PROPERTIES , PROPERTY , SYSTEM_ERR , SYSTEM_OUT , TESTCASE , TESTSUITE , TESTSUITES , TIMESTAMP |
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.
|
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.
|
bindToOwner , execute , getOwningTarget , getRuntimeConfigurableWrapper , getTaskName , getTaskType , getWrapper , handleErrorFlush , handleErrorOutput , handleFlush , handleInput , handleOutput , init , isInvalid , log , log , log , log , maybeConfigure , perform , reconfigure , setOwningTarget , setRuntimeConfigurableWrapper , setTaskName , setTaskType |
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
addFileSet
public void addFileSet(FileSet fs)
Add a new fileset containing the XML results to aggregate
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.
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.
- 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.
execute
public void execute()
throws BuildException
Aggregate all testsuites into a single document and write it to the
specified directory and file.
- execute in interface Task
BuildException
- thrown if there is a serious error while writing
the document.
getDestinationFile
public File getDestinationFile()
Get the full destination file where to write the result. It is made of
the todir and tofile attributes.
- the destination file where should be written the result file.
getFiles
protected File[] getFiles()
Get all .xml
files in the fileset.
- 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.
value
- the directory where to write the results, absolute or
relative.
setTofile
public void setTofile(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
value
- the name of the file.
writeDOMTree
protected void writeDOMTree(Document doc,
File file)
throws IOException
Write the DOM tree to a file.
doc
- the XML document to dump to disk.file
- the filename to write the document to. Should obviouslly be a .xml file.