• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "XMLHandler.h"
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <fcntl.h>
5 
6 const char *const NS_MAP[] = {
7     "xml", XMLNS_XMLNS,
8     NULL, NULL
9 };
10 
11 const XMLNamespaceMap NO_NAMESPACES(NS_MAP);
12 
13 char const*const EXPECTED_EXACT =
14        "<ASDF>\n"
15         "    <a id=\"system\" old-cl=\"1\" new-cl=\"43019\">\n"
16         "        <app dir=\"apps/common\" />\n"
17         "    </a>\n"
18         "    <a id=\"samples\" old-cl=\"1\" new-cl=\"43019\">asdf\n"
19         "        <app dir=\"samples/NotePad\" />\n"
20         "        <app dir=\"samples/LunarLander\" />\n"
21         "        <something>a<b>,</b>b </something>\n"
22         "        <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
23         "    </a>\n"
24         "</ASDF>\n";
25 
26 char const*const EXPECTED_PRETTY =
27         "<ASDF>\n"
28         "  <a id=\"system\"\n"
29         "      old-cl=\"1\"\n"
30         "      new-cl=\"43019\">\n"
31         "    <app dir=\"apps/common\" />\n"
32         "  </a>\n"
33         "  <a id=\"samples\"\n"
34         "      old-cl=\"1\"\n"
35         "      new-cl=\"43019\">asdf\n"
36         "    <app dir=\"samples/NotePad\" />\n"
37         "    <app dir=\"samples/LunarLander\" />\n"
38         "    <something>a\n"
39         "      <b>,\n"
40         "      </b>b \n"
41         "    </something>\n"
42         "    <exact xml:space=\"preserve\">a<b>,</b>b </exact>\n"
43         "  </a>\n"
44         "</ASDF>\n";
45 
46 static string
read_file(const string & filename)47 read_file(const string& filename)
48 {
49     char buf[1024];
50     int fd = open(filename.c_str(), O_RDONLY);
51     if (fd < 0) {
52         return "";
53     }
54     string result;
55     while (true) {
56         ssize_t len = read(fd, buf, sizeof(buf)-1);
57         buf[len] = '\0';
58         if (len <= 0) {
59             break;
60         }
61         result.append(buf, len);
62     }
63     close(fd);
64     return result;
65 }
66 
67 static int
ParseFile_EXACT_test()68 ParseFile_EXACT_test()
69 {
70     XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::EXACT);
71     if (root == NULL) {
72         return 1;
73     }
74     string result = root->ToString(NO_NAMESPACES);
75     delete root;
76     //printf("[[%s]]\n", result.c_str());
77     return result == EXPECTED_EXACT;
78 }
79 
80 static int
ParseFile_PRETTY_test()81 ParseFile_PRETTY_test()
82 {
83     XMLNode* root = NodeHandler::ParseFile("testdata/xml.xml", XMLNode::PRETTY);
84     if (root == NULL) {
85         return 1;
86     }
87     string result = root->ToString(NO_NAMESPACES);
88     delete root;
89     //printf("[[%s]]\n", result.c_str());
90     return result == EXPECTED_PRETTY;
91 }
92 
93 static int
ParseString_EXACT_test()94 ParseString_EXACT_test()
95 {
96     string text = read_file("testdata/xml.xml");
97     XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::EXACT);
98     if (root == NULL) {
99         return 1;
100     }
101     string result = root->ToString(NO_NAMESPACES);
102     delete root;
103     //printf("[[%s]]\n", result.c_str());
104     return result == EXPECTED_EXACT;
105 }
106 
107 static int
ParseString_PRETTY_test()108 ParseString_PRETTY_test()
109 {
110     string text = read_file("testdata/xml.xml");
111     XMLNode* root = NodeHandler::ParseString("testdata/xml.xml", text, XMLNode::PRETTY);
112     if (root == NULL) {
113         return 1;
114     }
115     string result = root->ToString(NO_NAMESPACES);
116     delete root;
117     //printf("[[%s]]\n", result.c_str());
118     return result == EXPECTED_PRETTY;
119 }
120 
121 int
XMLHandler_test()122 XMLHandler_test()
123 {
124     int err = 0;
125     bool all = true;
126 
127     if (all) err |= ParseFile_EXACT_test();
128     if (all) err |= ParseFile_PRETTY_test();
129     if (all) err |= ParseString_EXACT_test();
130     if (all) err |= ParseString_PRETTY_test();
131 
132     return err;
133 }
134