974deca5e1
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11846 178a84e3-b1eb-0310-8ba1-8eac791a3b58
170 lines
4.2 KiB
C++
170 lines
4.2 KiB
C++
// Copyright (C) 2009-2012 Christian Stehno
|
|
// No rights reserved: this software is in the public domain.
|
|
|
|
#include "testUtils.h"
|
|
|
|
using namespace irr;
|
|
using namespace core;
|
|
|
|
bool simple_xml( irr::io::IFileSystem * fs )
|
|
{
|
|
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/test.xml");
|
|
if (!reader)
|
|
{
|
|
logTestString("Could not create XML reader.\n");
|
|
return false;
|
|
}
|
|
|
|
const core::stringc expected[] = {
|
|
"a", "b", "c"
|
|
};
|
|
|
|
bool retVal = true;
|
|
u32 i=0;
|
|
while(reader->read())
|
|
{
|
|
if (reader->getNodeType() == io::EXN_ELEMENT)
|
|
{
|
|
if (expected[i++] != reader->getNodeName())
|
|
{
|
|
logTestString("Did not find expected string in XML element name.\n");
|
|
retVal = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
reader->drop();
|
|
return retVal;
|
|
}
|
|
|
|
// CDATA should return everything between "![CDATA[" and "]]>" as it's in the file
|
|
bool cdata( irr::io::IFileSystem * fs )
|
|
{
|
|
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/cdata.xml");
|
|
if (!reader)
|
|
{
|
|
logTestString("Could not create XML reader.\n");
|
|
return false;
|
|
}
|
|
|
|
const core::stringc textNode("text");
|
|
core::array< core::stringc > compareStrings;
|
|
compareStrings.push_back("simple");
|
|
compareStrings.push_back("");
|
|
compareStrings.push_back("] ]> ");
|
|
compareStrings.push_back("]\n]> ");
|
|
compareStrings.push_back("\nNewlines\n\tand tabs\n\t\tgogogo");
|
|
compareStrings.push_back("&&#@#$%*()@#$%*()#$%*(");
|
|
compareStrings.push_back("& & && &&& &a &ü &ä &ö &&#");
|
|
|
|
bool result = true;
|
|
size_t count = 0;
|
|
while(reader->read())
|
|
{
|
|
if (reader->getNodeType() == io::EXN_ELEMENT)
|
|
{
|
|
if ( core::stringc(reader->getNodeName()) == textNode )
|
|
{
|
|
while(reader->read())
|
|
{
|
|
if (reader->getNodeType() == io::EXN_CDATA)
|
|
{
|
|
core::stringc data = reader->getNodeData();
|
|
core::stringc name = reader->getNodeName();
|
|
if ( count == compareStrings.size() )
|
|
{
|
|
logTestString("too many cdata elements for reading in %s:%d\n", __FILE__, __LINE__);
|
|
}
|
|
else if ( count < compareStrings.size() )
|
|
{
|
|
core::stringc cmpString(compareStrings[count]);
|
|
|
|
// some (unused) variables to ease debugging
|
|
// const c8* dataRaw = data.c_str();
|
|
// const c8* cmpRaw = cmpString.c_str();
|
|
if ( cmpString != data )
|
|
{
|
|
result = false;
|
|
logTestString("cdata read failed for string %d in %s:%d\n", count, __FILE__, __LINE__);
|
|
}
|
|
}
|
|
++count;
|
|
}
|
|
if ( reader->getNodeType() == io::EXN_ELEMENT_END )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
reader->drop();
|
|
return result;
|
|
}
|
|
|
|
bool attributeValues(irr::io::IFileSystem * fs)
|
|
{
|
|
io::IXMLReaderUTF8* reader = fs->createXMLReaderUTF8("media/attributes.xml");
|
|
if (!reader)
|
|
{
|
|
logTestString("Could not create XML reader.\n");
|
|
return false;
|
|
}
|
|
|
|
bool result = true;
|
|
bool hasNode = false;
|
|
while (reader->read())
|
|
{
|
|
if (io::EXN_ELEMENT == reader->getNodeType() )
|
|
{
|
|
if ( core::stringc(reader->getNodeName()) == core::stringc("element_position") )
|
|
{
|
|
hasNode = true;
|
|
int id1 = reader->getAttributeValueAsInt("id1");
|
|
if ( id1 != 152722522 )
|
|
{
|
|
logTestString("id1 is %d in %s:%d\n", id1, __FILE__, __LINE__);
|
|
result = false;
|
|
}
|
|
int id2 = reader->getAttributeValueAsInt("id2");
|
|
result &= id2 == 3;
|
|
int x = reader->getAttributeValueAsInt("x");
|
|
result &= x == 301;
|
|
int y = reader->getAttributeValueAsInt("y");
|
|
result &= y == 118;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !hasNode )
|
|
{
|
|
logTestString("missing node in xml in %s:%d\n", __FILE__, __LINE__);
|
|
return false;
|
|
}
|
|
|
|
reader->drop();
|
|
return result;
|
|
}
|
|
|
|
/** Tests for XML handling */
|
|
bool testXML(void)
|
|
{
|
|
IrrlichtDevice *device = createDevice(video::EDT_NULL, dimension2du(400, 200));
|
|
|
|
bool result = true;
|
|
|
|
logTestString("Test simple XML reader features.\n");
|
|
result &= simple_xml(device->getFileSystem());
|
|
logTestString("Test XML reader CDATA support.\n");
|
|
result &= cdata(device->getFileSystem());
|
|
logTestString("Test XML reader attribute support.\n");
|
|
result &= attributeValues(device->getFileSystem());
|
|
|
|
device->closeDevice();
|
|
device->run();
|
|
device->drop();
|
|
return result;
|
|
}
|