diff options
Diffstat (limited to 'tools/localize/XMLHandler_test.cpp')
-rw-r--r-- | tools/localize/XMLHandler_test.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/tools/localize/XMLHandler_test.cpp b/tools/localize/XMLHandler_test.cpp new file mode 100644 index 0000000..1c81c0c --- /dev/null +++ b/tools/localize/XMLHandler_test.cpp @@ -0,0 +1,133 @@ +#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; +} |