| #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; |
| } |