#include <cppunit/Message.h> #include <stdexcept> CPPUNIT_NS_BEGIN Message::Message() { } Message::Message( const Message &other ) { *this = other; } Message::Message( const std::string &shortDescription ) : m_shortDescription( shortDescription ) { } Message::Message( const std::string &shortDescription, const std::string &detail1 ) : m_shortDescription( shortDescription ) { addDetail( detail1 ); } Message::Message( const std::string &shortDescription, const std::string &detail1, const std::string &detail2 ) : m_shortDescription( shortDescription ) { addDetail( detail1, detail2 ); } Message::Message( const std::string &shortDescription, const std::string &detail1, const std::string &detail2, const std::string &detail3 ) : m_shortDescription( shortDescription ) { addDetail( detail1, detail2, detail3 ); } Message & Message::operator =( const Message &other ) { if ( this != &other ) { m_shortDescription = other.m_shortDescription.c_str(); m_details.clear(); Details::const_iterator it = other.m_details.begin(); Details::const_iterator itEnd = other.m_details.end(); while ( it != itEnd ) m_details.push_back( (*it++).c_str() ); } return *this; } const std::string & Message::shortDescription() const { return m_shortDescription; } int Message::detailCount() const { return m_details.size(); } std::string Message::detailAt( int index ) const { if ( index < 0 || index >= detailCount() ) throw std::invalid_argument( "Message::detailAt() : invalid index" ); return m_details[ index ]; } std::string Message::details() const { std::string details; for ( Details::const_iterator it = m_details.begin(); it != m_details.end(); ++it ) { details += "- "; details += *it; details += '\n'; } return details; } void Message::clearDetails() { m_details.clear(); } void Message::addDetail( const std::string &detail ) { m_details.push_back( detail ); } void Message::addDetail( const std::string &detail1, const std::string &detail2 ) { addDetail( detail1 ); addDetail( detail2 ); } void Message::addDetail( const std::string &detail1, const std::string &detail2, const std::string &detail3 ) { addDetail( detail1, detail2 ); addDetail( detail3 ); } void Message::addDetail( const Message &message ) { m_details.insert( m_details.end(), message.m_details.begin(), message.m_details.end() ); } void Message::setShortDescription( const std::string &shortDescription ) { m_shortDescription = shortDescription; } bool Message::operator ==( const Message &other ) const { return m_shortDescription == other.m_shortDescription && m_details == other.m_details; } bool Message::operator !=( const Message &other ) const { return !( *this == other ); } CPPUNIT_NS_END