123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- // 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;
- }
|