|
Packit |
8c9aa0 |
#ifndef CPPUNIT_XMLTESTRESULTOUTPUTTER_H
|
|
Packit |
8c9aa0 |
#define CPPUNIT_XMLTESTRESULTOUTPUTTER_H
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#include <cppunit/Portability.h>
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#if CPPUNIT_NEED_DLL_DECL
|
|
Packit |
8c9aa0 |
#pragma warning( push )
|
|
Packit |
8c9aa0 |
#pragma warning( disable: 4251 ) // X needs to have dll-interface to be used by clients of class Z
|
|
Packit |
8c9aa0 |
#endif
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#include <cppunit/Outputter.h>
|
|
Packit |
8c9aa0 |
#include <deque>
|
|
Packit |
8c9aa0 |
#include <map>
|
|
Packit |
8c9aa0 |
#include <cppunit/portability/Stream.h>
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CPPUNIT_NS_BEGIN
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
class Test;
|
|
Packit |
8c9aa0 |
class TestFailure;
|
|
Packit |
8c9aa0 |
class TestResultCollector;
|
|
Packit |
8c9aa0 |
class XmlDocument;
|
|
Packit |
8c9aa0 |
class XmlElement;
|
|
Packit |
8c9aa0 |
class XmlOutputterHook;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Outputs a TestResultCollector in XML format.
|
|
Packit |
8c9aa0 |
* \ingroup WritingTestResult
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Save the test result as a XML stream.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Additional datas can be added to the XML document using XmlOutputterHook.
|
|
Packit |
8c9aa0 |
* Hook are not owned by the XmlOutputter. They should be valid until
|
|
Packit |
8c9aa0 |
* destruction of the XmlOutputter. They can be removed with removeHook().
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* \see XmlDocument, XmlElement, XmlOutputterHook.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
class CPPUNIT_API XmlOutputter : public Outputter
|
|
Packit |
8c9aa0 |
{
|
|
Packit |
8c9aa0 |
public:
|
|
Packit |
8c9aa0 |
/*! \brief Constructs a XmlOutputter object.
|
|
Packit |
8c9aa0 |
* \param result Result of the test run.
|
|
Packit |
8c9aa0 |
* \param stream Stream used to output the XML output.
|
|
Packit |
8c9aa0 |
* \param encoding Encoding used in the XML file (default is Latin-1).
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
XmlOutputter( TestResultCollector *result,
|
|
Packit |
8c9aa0 |
OStream &stream,
|
|
Packit |
8c9aa0 |
const std::string& encoding = std::string("ISO-8859-1") );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/// Destructor.
|
|
Packit |
8c9aa0 |
virtual ~XmlOutputter();
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Adds the specified hook to the outputter.
|
|
Packit |
8c9aa0 |
* \param hook Hook to add. Must not be \c NULL.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void addHook( XmlOutputterHook *hook );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Removes the specified hook from the outputter.
|
|
Packit |
8c9aa0 |
* \param hook Hook to remove.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void removeHook( XmlOutputterHook *hook );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Writes the specified result as an XML document to the stream.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Refer to examples/cppunittest/XmlOutputterTest.cpp for example
|
|
Packit |
8c9aa0 |
* of use and XML document structure.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void write();
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Sets the XSL style sheet used.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* \param styleSheet Name of the style sheet used. If empty, then no style sheet
|
|
Packit |
8c9aa0 |
* is used (default).
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void setStyleSheet( const std::string &styleSheet );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief set the output document as standalone or not.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* For the output document, specify wether it's a standalone XML
|
|
Packit |
8c9aa0 |
* document, or not.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* \param standalone if true, the output will be specified as standalone.
|
|
Packit |
8c9aa0 |
* if false, it will be not.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void setStandalone( bool standalone );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
typedef std::map<Test *,TestFailure*, std::less<Test*> > FailedTests;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Sets the root element and adds its children.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Set the root element of the XML Document and add its child elements.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* For all hooks, call beginDocument() just after creating the root element (it
|
|
Packit |
8c9aa0 |
* is empty at this time), and endDocument() once all the datas have been added
|
|
Packit |
8c9aa0 |
* to the root element.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void setRootNode();
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
virtual void addFailedTests( FailedTests &failedTests,
|
|
Packit |
8c9aa0 |
XmlElement *rootNode );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
virtual void addSuccessfulTests( FailedTests &failedTests,
|
|
Packit |
8c9aa0 |
XmlElement *rootNode );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Adds the statics element to the root node.
|
|
Packit |
8c9aa0 |
*
|
|
Packit |
8c9aa0 |
* Creates a new element containing statistics data and adds it to the root element.
|
|
Packit |
8c9aa0 |
* Then, for all hooks, call statisticsAdded().
|
|
Packit |
8c9aa0 |
* \param rootNode Root element.
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void addStatistics( XmlElement *rootNode );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Adds a failed test to the failed tests node.
|
|
Packit |
8c9aa0 |
* Creates a new element containing datas about the failed test, and adds it to
|
|
Packit |
8c9aa0 |
* the failed tests element.
|
|
Packit |
8c9aa0 |
* Then, for all hooks, call failTestAdded().
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void addFailedTest( Test *test,
|
|
Packit |
8c9aa0 |
TestFailure *failure,
|
|
Packit |
8c9aa0 |
int testNumber,
|
|
Packit |
8c9aa0 |
XmlElement *testsNode );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
virtual void addFailureLocation( TestFailure *failure,
|
|
Packit |
8c9aa0 |
XmlElement *testElement );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/*! \brief Adds a successful test to the successful tests node.
|
|
Packit |
8c9aa0 |
* Creates a new element containing datas about the successful test, and adds it to
|
|
Packit |
8c9aa0 |
* the successful tests element.
|
|
Packit |
8c9aa0 |
* Then, for all hooks, call successfulTestAdded().
|
|
Packit |
8c9aa0 |
*/
|
|
Packit |
8c9aa0 |
virtual void addSuccessfulTest( Test *test,
|
|
Packit |
8c9aa0 |
int testNumber,
|
|
Packit |
8c9aa0 |
XmlElement *testsNode );
|
|
Packit |
8c9aa0 |
protected:
|
|
Packit |
8c9aa0 |
virtual void fillFailedTestsMap( FailedTests &failedTests );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
protected:
|
|
Packit |
8c9aa0 |
typedef std::deque<XmlOutputterHook *> Hooks;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
TestResultCollector *m_result;
|
|
Packit |
8c9aa0 |
OStream &m_stream;
|
|
Packit |
8c9aa0 |
std::string m_encoding;
|
|
Packit |
8c9aa0 |
std::string m_styleSheet;
|
|
Packit |
8c9aa0 |
XmlDocument *m_xml;
|
|
Packit |
8c9aa0 |
Hooks m_hooks;
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
private:
|
|
Packit |
8c9aa0 |
/// Prevents the use of the copy constructor.
|
|
Packit |
8c9aa0 |
XmlOutputter( const XmlOutputter © );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
/// Prevents the use of the copy operator.
|
|
Packit |
8c9aa0 |
void operator =( const XmlOutputter © );
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
private:
|
|
Packit |
8c9aa0 |
};
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
CPPUNIT_NS_END
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#if CPPUNIT_NEED_DLL_DECL
|
|
Packit |
8c9aa0 |
#pragma warning( pop )
|
|
Packit |
8c9aa0 |
#endif
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
|
|
Packit |
8c9aa0 |
#endif // CPPUNIT_XMLTESTRESULTOUTPUTTER_H
|