summaryrefslogtreecommitdiffstats
path: root/tools/localize/XMLHandler_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/localize/XMLHandler_test.cpp')
-rw-r--r--tools/localize/XMLHandler_test.cpp133
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;
+}