blob: 1c81c0c930bd0ef9a8bc25684e6febb6790feae7 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001#include "XMLHandler.h"
2#include <stdio.h>
3#include <unistd.h>
4#include <fcntl.h>
5
6const char *const NS_MAP[] = {
7 "xml", XMLNS_XMLNS,
8 NULL, NULL
9};
10
11const XMLNamespaceMap NO_NAMESPACES(NS_MAP);
12
13char 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
26char 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
46static string
47read_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
67static int
68ParseFile_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
80static int
81ParseFile_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
93static int
94ParseString_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
107static int
108ParseString_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
121int
122XMLHandler_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}