|
Packit Service |
e31359 |
#include "XmlUniformiser.h"
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
int
|
|
Packit Service |
e31359 |
notEqualIndex( std::string expectedXml,
|
|
Packit Service |
e31359 |
std::string actualXml )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
unsigned int index = 0;
|
|
Packit Service |
e31359 |
while ( index < actualXml.length() &&
|
|
Packit Service |
e31359 |
index < expectedXml.length() &&
|
|
Packit Service |
e31359 |
actualXml[index] == expectedXml[index] )
|
|
Packit Service |
e31359 |
++index;
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
return index;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
/// Asserts that two XML string are equivalent.
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
checkXmlEqual( std::string expectedXml,
|
|
Packit Service |
e31359 |
std::string actualXml,
|
|
Packit Service |
e31359 |
CPPUNIT_NS::SourceLine sourceLine )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
std::string expected = XmlUniformiser( expectedXml ).stripped();
|
|
Packit Service |
e31359 |
std::string actual = XmlUniformiser( actualXml ).stripped();
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
if ( expected == actual )
|
|
Packit Service |
e31359 |
return;
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
int index = notEqualIndex( expected, actual );
|
|
Packit Service |
e31359 |
CPPUNIT_NS::OStringStream message;
|
|
Packit Service |
e31359 |
message << "differ at index: " << index << "\n"
|
|
Packit Service |
e31359 |
<< "expected: " << expected.substr(index) << "\n"
|
|
Packit Service |
e31359 |
<< "but was : " << actual.substr( index );
|
|
Packit Service |
e31359 |
CPPUNIT_NS::Asserter::failNotEqual( expected,
|
|
Packit Service |
e31359 |
actual,
|
|
Packit Service |
e31359 |
sourceLine,
|
|
Packit Service |
e31359 |
message.str() );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
XmlUniformiser::XmlUniformiser( const std::string &xml ) :
|
|
Packit Service |
e31359 |
m_index( 0 ),
|
|
Packit Service |
e31359 |
m_xml( xml )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
std::string
|
|
Packit Service |
e31359 |
XmlUniformiser::stripped()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
skipSpaces();
|
|
Packit Service |
e31359 |
if ( startsWith( "
|
|
Packit Service |
e31359 |
skipProcessed();
|
|
Packit Service |
e31359 |
else if ( startsWith( "
|
|
Packit Service |
e31359 |
skipComment();
|
|
Packit Service |
e31359 |
else if ( startsWith( "<" ) )
|
|
Packit Service |
e31359 |
copyElement();
|
|
Packit Service |
e31359 |
else
|
|
Packit Service |
e31359 |
copyElementContent();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
return m_stripped;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::skipSpaces()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isSpace() )
|
|
Packit Service |
e31359 |
skipNext();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
bool
|
|
Packit Service |
e31359 |
XmlUniformiser::isSpace( char c )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
return c < 33;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
bool
|
|
Packit Service |
e31359 |
XmlUniformiser::isSpace()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
return isValidIndex() && isSpace( m_xml[m_index] );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
bool
|
|
Packit Service |
e31359 |
XmlUniformiser::isValidIndex()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
return m_index < m_xml.length();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::skipNext( int count )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( count-- > 0 )
|
|
Packit Service |
e31359 |
++m_index;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyNext( int count )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( count-- > 0 && isValidIndex() )
|
|
Packit Service |
e31359 |
m_stripped += m_xml[ m_index++ ];
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
bool
|
|
Packit Service |
e31359 |
XmlUniformiser::startsWith( std::string expected )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
std::string actual = m_xml.substr( m_index, expected.length() );
|
|
Packit Service |
e31359 |
return actual == expected;
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::skipProcessed()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() && !startsWith( "?>" ) )
|
|
Packit Service |
e31359 |
skipNext();
|
|
Packit Service |
e31359 |
if ( isValidIndex() )
|
|
Packit Service |
e31359 |
skipNext( 2 );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::skipComment()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() && !startsWith( "-->" ) )
|
|
Packit Service |
e31359 |
skipNext();
|
|
Packit Service |
e31359 |
if ( isValidIndex() )
|
|
Packit Service |
e31359 |
skipNext( 3 );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyElement()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
copyElementName();
|
|
Packit Service |
e31359 |
copyElementAttributes();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyElementName()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() &&
|
|
Packit Service |
e31359 |
!( isSpace() || startsWith( ">" ) ) )
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyElementAttributes()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
do
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
bool hadSpace = isSpace();
|
|
Packit Service |
e31359 |
skipSpaces();
|
|
Packit Service |
e31359 |
if ( startsWith( ">" ) )
|
|
Packit Service |
e31359 |
break;
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
if ( hadSpace )
|
|
Packit Service |
e31359 |
m_stripped += ' ';
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
copyAttributeName();
|
|
Packit Service |
e31359 |
skipSpaces();
|
|
Packit Service |
e31359 |
if ( startsWith( "=" ) )
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
copyAttributeValue();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
else // attribute should always be valued, ne ?
|
|
Packit Service |
e31359 |
m_stripped += ' ';
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
while ( isValidIndex() );
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyAttributeName()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() && !isEndOfAttributeName() )
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
bool
|
|
Packit Service |
e31359 |
XmlUniformiser::isEndOfAttributeName()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
return isSpace() || startsWith( ">" ) || startsWith( "=" );
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyAttributeValue()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
skipSpaces();
|
|
Packit Service |
e31359 |
copyUntilDoubleQuote();
|
|
Packit Service |
e31359 |
copyUntilDoubleQuote();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyUntilDoubleQuote()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() && !startsWith("\"") )
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
copyNext(); // '"'
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::copyElementContent()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
while ( isValidIndex() && !startsWith( "<" ) )
|
|
Packit Service |
e31359 |
copyNext();
|
|
Packit Service |
e31359 |
removeTrailingSpaces();
|
|
Packit Service |
e31359 |
}
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
|
|
Packit Service |
e31359 |
void
|
|
Packit Service |
e31359 |
XmlUniformiser::removeTrailingSpaces()
|
|
Packit Service |
e31359 |
{
|
|
Packit Service |
e31359 |
int index = m_stripped.length();
|
|
Packit Service |
e31359 |
while ( index-1 > 0 && isSpace( m_stripped[index-1] ) )
|
|
Packit Service |
e31359 |
--index;
|
|
Packit Service |
e31359 |
m_stripped.resize( index );
|
|
Packit Service |
e31359 |
}
|