Blame include/cppunit/Message.h

Packit 8c9aa0
#ifndef CPPUNIT_MESSAGE_H
Packit 8c9aa0
#define CPPUNIT_MESSAGE_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 <deque>
Packit 8c9aa0
#include <string>
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
CPPUNIT_NS_BEGIN
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! \brief Message associated to an Exception.
Packit 8c9aa0
 * \ingroup CreatingNewAssertions
Packit 8c9aa0
 *  A message is composed of two items:
Packit 8c9aa0
 *  - a short description (~20/30 characters)
Packit 8c9aa0
 *  - a list of detail strings
Packit 8c9aa0
 *
Packit 8c9aa0
 *  The short description is used to indicate how the detail strings should be
Packit 8c9aa0
 *  interpreted. It usually indicates the failure types, such as
Packit 8c9aa0
 *  "assertion failed", "forced failure", "unexpected exception caught",
Packit 8c9aa0
 *  "equality assertion failed"... It should not contains new line character (\n).
Packit 8c9aa0
 *
Packit 8c9aa0
 *  Detail strings are used to provide more information about the failure. It
Packit 8c9aa0
 *  can contains the asserted expression, the expected and actual values in an
Packit 8c9aa0
 *  equality assertion, some addional messages... Detail strings can contains
Packit 8c9aa0
 *  new line characters (\n).
Packit 8c9aa0
 */
Packit 8c9aa0
class CPPUNIT_API Message
Packit 8c9aa0
{
Packit 8c9aa0
public:
Packit 8c9aa0
  Message() {};
Packit 8c9aa0
Packit 8c9aa0
  // Ensure thread-safe copy by detaching the string.
Packit 8c9aa0
  Message( const Message &other );
Packit 8c9aa0
Packit 8c9aa0
  explicit Message( const std::string &shortDescription );
Packit 8c9aa0
Packit 8c9aa0
  Message( const std::string &shortDescription,
Packit 8c9aa0
           const std::string &detail1 );
Packit 8c9aa0
Packit 8c9aa0
  Message( const std::string &shortDescription,
Packit 8c9aa0
           const std::string &detail1,
Packit 8c9aa0
           const std::string &detail2 );
Packit 8c9aa0
Packit 8c9aa0
  Message( const std::string &shortDescription,
Packit 8c9aa0
           const std::string &detail1,
Packit 8c9aa0
           const std::string &detail2,
Packit 8c9aa0
           const std::string &detail3 );
Packit 8c9aa0
Packit 8c9aa0
  virtual ~Message();
Packit 8c9aa0
Packit 8c9aa0
  Message &operator =( const Message &other );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Returns the short description.
Packit 8c9aa0
   * \return Short description.
Packit 8c9aa0
   */
Packit 8c9aa0
  const std::string &shortDescription() const;
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Returns the number of detail string.
Packit 8c9aa0
   * \return Number of detail string.
Packit 8c9aa0
   */
Packit 8c9aa0
  int detailCount() const;
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Returns the detail at the specified index.
Packit 8c9aa0
   * \param index Zero based index of the detail string to return.
Packit 8c9aa0
   * \returns Detail string at the specified index.
Packit 8c9aa0
   * \exception std::invalid_argument if \a index < 0 or index >= detailCount().
Packit 8c9aa0
   */
Packit 8c9aa0
  std::string detailAt( int index ) const;
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Returns a string that represents a list of the detail strings.
Packit 8c9aa0
   *
Packit 8c9aa0
   * Example:
Packit 8c9aa0
   * \code
Packit 8c9aa0
   * Message message( "not equal", "Expected: 3", "Actual: 7" );
Packit 8c9aa0
   * std::string details = message.details();
Packit 8c9aa0
   * // details contains:
Packit 8c9aa0
   * // "- Expected: 3\n- Actual: 7\n"  \endcode
Packit 8c9aa0
   *
Packit 8c9aa0
   * \return A string that is a concatenation of all the detail strings. Each detail
Packit 8c9aa0
   *         string is prefixed with '- ' and suffixed with '\n' before being
Packit 8c9aa0
   *         concatenated to the other.
Packit 8c9aa0
   */
Packit 8c9aa0
  std::string details() const;
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Removes all detail strings.
Packit 8c9aa0
   */
Packit 8c9aa0
  void clearDetails();
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Adds a single detail string.
Packit 8c9aa0
   * \param detail Detail string to add.
Packit 8c9aa0
   */
Packit 8c9aa0
  void addDetail( const std::string &detail );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Adds two detail strings.
Packit 8c9aa0
   * \param detail1 Detail string to add.
Packit 8c9aa0
   * \param detail2 Detail string to add.
Packit 8c9aa0
   */
Packit 8c9aa0
  void addDetail( const std::string &detail1,
Packit 8c9aa0
                  const std::string &detail2 );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Adds three detail strings.
Packit 8c9aa0
   * \param detail1 Detail string to add.
Packit 8c9aa0
   * \param detail2 Detail string to add.
Packit 8c9aa0
   * \param detail3 Detail string to add.
Packit 8c9aa0
   */
Packit 8c9aa0
  void addDetail( const std::string &detail1,
Packit 8c9aa0
                  const std::string &detail2,
Packit 8c9aa0
                  const std::string &detail3 );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Adds the detail strings of the specified message.
Packit 8c9aa0
   * \param message All the detail strings of this message are added to this one.
Packit 8c9aa0
   */
Packit 8c9aa0
  void addDetail( const Message &message );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Sets the short description.
Packit 8c9aa0
   * \param shortDescription New short description.
Packit 8c9aa0
   */
Packit 8c9aa0
  void setShortDescription( const std::string &shortDescription );
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Tests if a message is identical to another one.
Packit 8c9aa0
   * \param other Message this message is compared to.
Packit 8c9aa0
   * \return \c true if the two message are identical, \c false otherwise.
Packit 8c9aa0
   */
Packit 8c9aa0
  bool operator ==( const Message &other ) const;
Packit 8c9aa0
Packit 8c9aa0
  /*! \brief Tests if a message is different from another one.
Packit 8c9aa0
   * \param other Message this message is compared to.
Packit 8c9aa0
   * \return \c true if the two message are not identical, \c false otherwise.
Packit 8c9aa0
   */
Packit 8c9aa0
  bool operator !=( const Message &other ) const;
Packit 8c9aa0
Packit 8c9aa0
private:
Packit 8c9aa0
  std::string m_shortDescription;
Packit 8c9aa0
Packit 8c9aa0
  typedef std::deque<std::string> Details;
Packit 8c9aa0
  Details m_details;
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_MESSAGE_H