134 lines
3.3 KiB
C++
134 lines
3.3 KiB
C++
#include "XMLHandler.h"
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
|
|
const char *const NS_MAP[] = {
|
|
"xml", XMLNS_XMLNS,
|
|
NULL, NULL
|
|
};
|
|
|
|
const XMLNamespaceMap NO_NAMESPACES(NS_MAP);
|
|
|
|
char const*const EXPECTED_EXACT =
|
|
"<ASDF>\n"
|
|
" <a id=\"system\" old-cl=\"1\" new-cl=\"43019\">\n"
|
|
" <app dir=\"apps/common\" />\n"
|
|
" </a>\n"
|
|
" <a id=\"samples\" old-cl=\"1\" new-cl=\"43019\">asdf\n"
|
|
" <app dir=\"samples/NotePad\" />\n"
|
|
" <app dir=\"samples/LunarLander\" />\n"
|
|
" <something>a<b>,</b>b </something>\n"
|
|
" <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
|
|
" </a>\n"
|
|
"</ASDF>\n";
|
|
|
|
char const*const EXPECTED_PRETTY =
|
|
"<ASDF>\n"
|
|
" <a id=\"system\"\n"
|
|
" old-cl=\"1\"\n"
|
|
" new-cl=\"43019\">\n"
|
|
" <app dir=\"apps/common\" />\n"
|
|
" </a>\n"
|
|
" <a id=\"samples\"\n"
|
|
" old-cl=\"1\"\n"
|
|
" new-cl=\"43019\">asdf\n"
|
|
" <app dir=\"samples/NotePad\" />\n"
|
|
" <app dir=\"samples/LunarLander\" />\n"
|
|
" <something>a\n"
|
|
" <b>,\n"
|
|
" </b>b \n"
|
|
" </something>\n"
|
|
" <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
|
|
" </a>\n"
|
|
"</ASDF>\n";
|
|
|
|
static string
|
|
read_file(const string& filename)
|
|
{
|
|
char buf[1024];
|
|
int fd = open(filename.c_str(), O_RDONLY);
|
|
if (fd < 0) {
|
|
return "";
|
|
}
|
|
string result;
|
|
while (true) {
|
|
ssize_t len = read(fd, buf, sizeof(buf)-1);
|
|
buf[len] = '\0';
|
|
if (len <= 0) {
|
|
break;
|
|
}
|
|
result.append(buf, len);
|
|
}
|
|
close(fd);
|
|
return result;
|
|
}
|
|
|
|
static int
|
|
ParseFile_EXACT_test()
|
|
{
|
|
XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::EXACT);
|
|
if (root == NULL) {
|
|
return 1;
|
|
}
|
|
string result = root->ToString(NO_NAMESPACES);
|
|
delete root;
|
|
//printf("[[%s]]\n", result.c_str());
|
|
return result == EXPECTED_EXACT;
|
|
}
|
|
|
|
static int
|
|
ParseFile_PRETTY_test()
|
|
{
|
|
XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::PRETTY);
|
|
if (root == NULL) {
|
|
return 1;
|
|
}
|
|
string result = root->ToString(NO_NAMESPACES);
|
|
delete root;
|
|
//printf("[[%s]]\n", result.c_str());
|
|
return result == EXPECTED_PRETTY;
|
|
}
|
|
|
|
static int
|
|
ParseString_EXACT_test()
|
|
{
|
|
string text = read_file("testdata/xml.xml");
|
|
XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::EXACT);
|
|
if (root == NULL) {
|
|
return 1;
|
|
}
|
|
string result = root->ToString(NO_NAMESPACES);
|
|
delete root;
|
|
//printf("[[%s]]\n", result.c_str());
|
|
return result == EXPECTED_EXACT;
|
|
}
|
|
|
|
static int
|
|
ParseString_PRETTY_test()
|
|
{
|
|
string text = read_file("testdata/xml.xml");
|
|
XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::PRETTY);
|
|
if (root == NULL) {
|
|
return 1;
|
|
}
|
|
string result = root->ToString(NO_NAMESPACES);
|
|
delete root;
|
|
//printf("[[%s]]\n", result.c_str());
|
|
return result == EXPECTED_PRETTY;
|
|
}
|
|
|
|
int
|
|
XMLHandler_test()
|
|
{
|
|
int err = 0;
|
|
bool all = true;
|
|
|
|
if (all) err |= ParseFile_EXACT_test();
|
|
if (all) err |= ParseFile_PRETTY_test();
|
|
if (all) err |= ParseString_EXACT_test();
|
|
if (all) err |= ParseString_PRETTY_test();
|
|
|
|
return err;
|
|
}
|