Files
libsst/ZTestSuite/Test-ZXMLReader.cpp
2026-04-03 00:22:39 -05:00

142 lines
6.6 KiB
C++

#include "ZUnitTest.hpp"
#include <ZUtil/ZXMLReader.hpp>
static const char* test_LoadSuccess();
static const char* test_LoadFailed();
ZUnitTest ZXMLReaderUnitTests[] =
{
{ "ZXMLReader: Successful Load", test_LoadSuccess },
{ "ZXMLReader: Failed Load", test_LoadFailed }
};
//Now declare the ZUnitTestBlock associated with this.
DECLARE_ZTESTBLOCK(ZXMLReader);
/*************************************************************************/
namespace ZXMLReaderTestData
{
const char* testDataValid1 = "<?xml version=\"1.0\"?>" LINE_TERMINATOR
"<lvl1node>" LINE_TERMINATOR
" <lvl2node>" LINE_TERMINATOR
" <lvl3node x=\"0\" y=\"1\" z=\"2\" />" LINE_TERMINATOR
" Level 2 Node Has Some of the Datas." LINE_TERMINATOR
" </lvl2node>" LINE_TERMINATOR
" Level 1 Node Has All the Datas." LINE_TERMINATOR
"</lvl1node>" LINE_TERMINATOR
LINE_TERMINATOR;
const char* testDataValid2 = "<?xml version=\"1.0\"?>" LINE_TERMINATOR
"<lvl1node>" LINE_TERMINATOR
" <lvl2node>" LINE_TERMINATOR
" <lvl3node x=\"0\" y=\"1\" z=\"2\" />" LINE_TERMINATOR
" <lvl3node x=\"2\" y=\"1\" z=\"0\" />" LINE_TERMINATOR
" Level 2 Node Has Some of the Datas." LINE_TERMINATOR
" </lvl2node>" LINE_TERMINATOR
" <tinylvl2node size=\"tiny\" />" LINE_TERMINATOR
" <largelvl2node size=\"large\" />" LINE_TERMINATOR
" Level 1 Node Has All the Datas." LINE_TERMINATOR
"</lvl1node>" LINE_TERMINATOR
"<secondrootnode>" LINE_TERMINATOR
" This is a second root node. Use it wisely." LINE_TERMINATOR
"</secondrootnode>" LINE_TERMINATOR
LINE_TERMINATOR;
// the 'invalid' tests are mostly designed to test custom error handling in the reader, not
// stability of rapidxml
const char* testDataInvalid1 = "<lvl1node>" LINE_TERMINATOR
" <lvl2node>" LINE_TERMINATOR
" </lvl1node>" LINE_TERMINATOR
"</lvl2node>" LINE_TERMINATOR
"</lvl3node>" LINE_TERMINATOR
LINE_TERMINATOR;
const char* testDataInvalid2 = "<lvl1node>><>" LINE_TERMINATOR
"</lvl1node>" LINE_TERMINATOR
LINE_TERMINATOR;
const char* testDataInvalid3 = "<!-- This is a bad comment. ->" LINE_TERMINATOR
"<lvl1node>" LINE_TERMINATOR
" Bad Comment. Bad." LINE_TERMINATOR
"</lvl1node>" LINE_TERMINATOR
LINE_TERMINATOR;
}
using namespace ZXMLReaderTestData;
/*************************************************************************/
static const char* test_LoadSuccess()
{
ZString val;
ZKVTree tree;
ZXMLReader reader1;
TASSERT(reader1.Read(testDataValid1, strlen(testDataValid1)), "ZXMLReader::Read returned 'false' on valid data set #1!");
TASSERT(reader1.GetErrorString().Empty(), "ZXMLReader failed to load valid data set #1!");
reader1.GetKVTree(tree);
TASSERT(tree.Get("lvl1node") == "Level 1 Node Has All the Datas.", "ZXMLReader failed to store lvl1node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node") == "Level 2 Node Has Some of the Datas.", "ZXMLReader failed to store lvl2node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node") == "", "ZXMLReader failed to store lvl3node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.x") == "0", "ZXMLReader failed to store lvl3node.x correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.y") == "1", "ZXMLReader failed to store lvl3node.y correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.z") == "2", "ZXMLReader failed to store lvl3node.z correctly!");
ZXMLReader reader2;
TASSERT(reader2.Read(testDataValid2, strlen(testDataValid2)), "ZXMLReader::Read returned 'false' on valid data set #2!");
TASSERT(reader2.GetErrorString().Empty(), "ZXMLReader failed to load valid data set #2!");
tree.Clear();
reader2.GetKVTree(tree);
TASSERT(tree.Get("lvl1node") == "Level 1 Node Has All the Datas.", "ZXMLReader failed to store lvl1node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node") == "Level 2 Node Has Some of the Datas.", "ZXMLReader failed to store lvl2node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node") == "", "ZXMLReader failed to store lvl3node correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.x") == "0", "ZXMLReader failed to store lvl3node.x correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.y") == "1", "ZXMLReader failed to store lvl3node.y correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node.z") == "2", "ZXMLReader failed to store lvl3node.z correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node[1]") == "", "ZXMLReader failed to store lvl3node[1] correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node[1].x") == "2", "ZXMLReader failed to store lvl3node[1].x correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node[1].y") == "1", "ZXMLReader failed to store lvl3node[1].y correctly!");
TASSERT(tree.Get("lvl1node.lvl2node.lvl3node[1].z") == "0", "ZXMLReader failed to store lvl3node[1].z correctly!");
TASSERT(tree.Get("lvl1node.tinylvl2node") == "", "ZXMLReader failed to store tinylvl2node correctly!");
TASSERT(tree.Get("lvl1node.tinylvl2node.size") == "tiny", "ZXMLReader failed to store tinylvl2node.size correctly!");
TASSERT(tree.Get("lvl1node.largelvl2node") == "", "ZXMLReader failed to store largelvl2node correctly!");
TASSERT(tree.Get("lvl1node.largelvl2node.size") == "large", "ZXMLReader failed to store largelvl2node.size correctly!");
TASSERT(tree.Get("secondrootnode") == "This is a second root node. Use it wisely.", "ZXMLReader failed to store secondrootnode correctly!");
return ZTEST_SUCCESS;
}
/*************************************************************************/
static const char* test_LoadFailed()
{
ZXMLReader reader1;
ZXMLReader reader2;
ZXMLReader reader3;
TASSERT(!reader1.Read(testDataValid1, strlen(testDataInvalid1)), "ZXMLReader returned 'true' on invalid data set #1!");
TASSERT(!reader2.Read(testDataInvalid2, strlen(testDataInvalid2)), "ZXMLReader returned 'true' on invalid data set #2!");
TASSERT(!reader3.Read(testDataInvalid3, strlen(testDataInvalid3)), "ZXMLReader returned 'true' on invalid data set #2!");
TASSERT(!reader1.GetErrorString().Empty(), "ZXMLReader did not report error message for invalid data set #1!");
TASSERT(!reader2.GetErrorString().Empty(), "ZXMLReader did not report error message for invalid data set #2!");
TASSERT(!reader3.GetErrorString().Empty(), "ZXMLReader did not report error message for invalid data set #3!");
return ZTEST_SUCCESS;
}