summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-06-01 08:48:42 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-06-01 09:24:28 (GMT)
commit2812bddd81f8a1b804c7460f4e14cd0aa393d129 (patch)
treed46294f35150c4f0f43deaf2d31fceaf945ae715 /3rdParty/CppUnit/src/XmlElement.cpp
downloadswift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.zip
swift-2812bddd81f8a1b804c7460f4e14cd0aa393d129.tar.bz2
Import.
Diffstat (limited to '3rdParty/CppUnit/src/XmlElement.cpp')
-rw-r--r--3rdParty/CppUnit/src/XmlElement.cpp226
1 files changed, 226 insertions, 0 deletions
diff --git a/3rdParty/CppUnit/src/XmlElement.cpp b/3rdParty/CppUnit/src/XmlElement.cpp
new file mode 100644
index 0000000..f930ad4
--- /dev/null
+++ b/3rdParty/CppUnit/src/XmlElement.cpp
@@ -0,0 +1,226 @@
+#include <cppunit/tools/StringTools.h>
+#include <cppunit/tools/XmlElement.h>
+#include <stdexcept>
+
+
+CPPUNIT_NS_BEGIN
+
+
+XmlElement::XmlElement( std::string elementName,
+ std::string content )
+ : m_name( elementName )
+ , m_content( content )
+{
+}
+
+
+XmlElement::XmlElement( std::string elementName,
+ int numericContent )
+ : m_name( elementName )
+{
+ setContent( numericContent );
+}
+
+
+XmlElement::~XmlElement()
+{
+ Elements::iterator itNode = m_elements.begin();
+ while ( itNode != m_elements.end() )
+ {
+ XmlElement *element = *itNode++;
+ delete element;
+ }
+}
+
+
+std::string
+XmlElement::name() const
+{
+ return m_name;
+}
+
+
+std::string
+XmlElement::content() const
+{
+ return m_content;
+}
+
+
+void
+XmlElement::setName( const std::string &name )
+{
+ m_name = name;
+}
+
+
+void
+XmlElement::setContent( const std::string &content )
+{
+ m_content = content;
+}
+
+
+void
+XmlElement::setContent( int numericContent )
+{
+ m_content = StringTools::toString( numericContent );
+}
+
+
+void
+XmlElement::addAttribute( std::string attributeName,
+ std::string value )
+{
+ m_attributes.push_back( Attribute( attributeName, value ) );
+}
+
+
+void
+XmlElement::addAttribute( std::string attributeName,
+ int numericValue )
+{
+ addAttribute( attributeName, StringTools::toString( numericValue ) );
+}
+
+
+void
+XmlElement::addElement( XmlElement *node )
+{
+ m_elements.push_back( node );
+}
+
+
+int
+XmlElement::elementCount() const
+{
+ return m_elements.size();
+}
+
+
+XmlElement *
+XmlElement::elementAt( int index ) const
+{
+ if ( index < 0 || index >= elementCount() )
+ throw std::invalid_argument( "XmlElement::elementAt(), out of range index" );
+
+ return m_elements[ index ];
+}
+
+
+XmlElement *
+XmlElement::elementFor( const std::string &name ) const
+{
+ Elements::const_iterator itElement = m_elements.begin();
+ for ( ; itElement != m_elements.end(); ++itElement )
+ {
+ if ( (*itElement)->name() == name )
+ return *itElement;
+ }
+
+ throw std::invalid_argument( "XmlElement::elementFor(), not matching child element found" );
+ return NULL; // make some compilers happy.
+}
+
+
+std::string
+XmlElement::toString( const std::string &indent ) const
+{
+ std::string element( indent );
+ element += "<";
+ element += m_name;
+ if ( !m_attributes.empty() )
+ {
+ element += " ";
+ element += attributesAsString();
+ }
+ element += ">";
+
+ if ( !m_elements.empty() )
+ {
+ element += "\n";
+
+ std::string subNodeIndent( indent + " " );
+ Elements::const_iterator itNode = m_elements.begin();
+ while ( itNode != m_elements.end() )
+ {
+ const XmlElement *node = *itNode++;
+ element += node->toString( subNodeIndent );
+ }
+
+ element += indent;
+ }
+
+ if ( !m_content.empty() )
+ {
+ element += escape( m_content );
+ if ( !m_elements.empty() )
+ {
+ element += "\n";
+ element += indent;
+ }
+ }
+
+ element += "</";
+ element += m_name;
+ element += ">\n";
+
+ return element;
+}
+
+
+std::string
+XmlElement::attributesAsString() const
+{
+ std::string attributes;
+ Attributes::const_iterator itAttribute = m_attributes.begin();
+ while ( itAttribute != m_attributes.end() )
+ {
+ if ( !attributes.empty() )
+ attributes += " ";
+
+ const Attribute &attribute = *itAttribute++;
+ attributes += attribute.first;
+ attributes += "=\"";
+ attributes += escape( attribute.second );
+ attributes += "\"";
+ }
+ return attributes;
+}
+
+
+std::string
+XmlElement::escape( std::string value ) const
+{
+ std::string escaped;
+ for ( unsigned int index =0; index < value.length(); ++index )
+ {
+ char c = value[index ];
+ switch ( c ) // escape all predefined XML entity (safe?)
+ {
+ case '<':
+ escaped += "&lt;";
+ break;
+ case '>':
+ escaped += "&gt;";
+ break;
+ case '&':
+ escaped += "&amp;";
+ break;
+ case '\'':
+ escaped += "&apos;";
+ break;
+ case '"':
+ escaped += "&quot;";
+ break;
+ default:
+ escaped += c;
+ }
+ }
+
+ return escaped;
+}
+
+
+CPPUNIT_NS_END
+