Blame include/cppunit/XmlOutputter.h

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 &copy );
Packit 8c9aa0
Packit 8c9aa0
  /// Prevents the use of the copy operator.
Packit 8c9aa0
  void operator =( const XmlOutputter &copy );
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