Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: third_party/libjingle_xmpp/xmllite/xmlparser_unittest.cc

Issue 2443903004: Add xmllite and xmpp sources to third_party/ (Closed)
Patch Set: Fix GN and sort includes Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2004 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <iostream>
6 #include <sstream>
7 #include <string>
8 #include "third_party/libjingle_xmpp/xmllite/qname.h"
9 #include "third_party/libjingle_xmpp/xmllite/xmlparser.h"
10 #include "webrtc/base/common.h"
11 #include "webrtc/base/gunit.h"
12
13 using buzz::QName;
14 using buzz::XmlParser;
15 using buzz::XmlParseContext;
16 using buzz::XmlParseHandler;
17
18 class XmlParserTestHandler : public XmlParseHandler {
19 public:
20 virtual void StartElement(XmlParseContext * pctx,
21 const char * name, const char ** atts) {
22 ss_ << "START (" << pctx->ResolveQName(name, false).Merged();
23 while (*atts) {
24 ss_ << ", " << pctx->ResolveQName(*atts, true).Merged()
25 << "='" << *(atts+1) << "'";
26 atts += 2;
27 }
28 ss_ << ") ";
29 }
30 virtual void EndElement(XmlParseContext * pctx, const char * name) {
31 RTC_UNUSED(pctx);
32 RTC_UNUSED(name);
33 ss_ << "END ";
34 }
35 virtual void CharacterData(XmlParseContext * pctx,
36 const char * text, int len) {
37 RTC_UNUSED(pctx);
38 ss_ << "TEXT (" << std::string(text, len) << ") ";
39 }
40 virtual void Error(XmlParseContext * pctx, XML_Error code) {
41 RTC_UNUSED(pctx);
42 ss_ << "ERROR (" << static_cast<int>(code) << ") ";
43 }
44 virtual ~XmlParserTestHandler() {
45 }
46
47 std::string Str() {
48 return ss_.str();
49 }
50
51 std::string StrClear() {
52 std::string result = ss_.str();
53 ss_.str("");
54 return result;
55 }
56
57 private:
58 std::stringstream ss_;
59 };
60
61
62 TEST(XmlParserTest, TestTrivial) {
63 XmlParserTestHandler handler;
64 XmlParser::ParseXml(&handler, "<testing/>");
65 EXPECT_EQ("START (testing) END ", handler.Str());
66 }
67
68 TEST(XmlParserTest, TestAttributes) {
69 {
70 XmlParserTestHandler handler;
71 XmlParser::ParseXml(&handler, "<testing a='b'/>");
72 EXPECT_EQ("START (testing, a='b') END ", handler.Str());
73 }
74 {
75 XmlParserTestHandler handler;
76 XmlParser::ParseXml(&handler, "<testing e='' long='some text'/>");
77 EXPECT_EQ("START (testing, e='', long='some text') END ", handler.Str());
78 }
79 }
80
81 TEST(XmlParserTest, TestNesting) {
82 {
83 XmlParserTestHandler handler;
84 XmlParser::ParseXml(&handler,
85 "<top><first/><second><third></third></second></top>");
86 EXPECT_EQ("START (top) START (first) END START (second) START (third) "
87 "END END END ", handler.Str());
88 }
89 {
90 XmlParserTestHandler handler;
91 XmlParser::ParseXml(&handler, "<top><fifth><deeper><and><deeper/></and>"
92 "<sibling><leaf/></sibling></deeper></fifth><first/><second>"
93 "<third></third></second></top>");
94 EXPECT_EQ("START (top) START (fifth) START (deeper) START (and) START "
95 "(deeper) END END START (sibling) START (leaf) END END END "
96 "END START (first) END START (second) START (third) END END END ",
97 handler.Str());
98 }
99 }
100
101 TEST(XmlParserTest, TestXmlDecl) {
102 {
103 XmlParserTestHandler handler;
104 XmlParser::ParseXml(&handler, "<?xml version=\"1.0\"?><testing/>");
105 EXPECT_EQ("START (testing) END ", handler.Str());
106 }
107 {
108 XmlParserTestHandler handler;
109 XmlParser::ParseXml(&handler,
110 "<?xml version=\"1.0\" encoding=\"utf-8\"?><testing/>");
111 EXPECT_EQ("START (testing) END ", handler.Str());
112 }
113 {
114 XmlParserTestHandler handler;
115 XmlParser::ParseXml(&handler,
116 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
117 "<testing/>");
118 EXPECT_EQ("START (testing) END ", handler.Str());
119 }
120 }
121
122 TEST(XmlParserTest, TestNamespace) {
123 {
124 XmlParserTestHandler handler;
125 XmlParser::ParseXml(&handler, "<top xmlns='my-namespace' a='b'/>");
126 EXPECT_EQ("START (my-namespace:top, xmlns='my-namespace', a='b') END ",
127 handler.Str());
128 }
129 {
130 XmlParserTestHandler handler;
131 XmlParser::ParseXml(&handler, "<foo:top xmlns:foo='my-namespace' "
132 "a='b' foo:c='d'/>");
133 EXPECT_EQ("START (my-namespace:top, "
134 "http://www.w3.org/2000/xmlns/:foo='my-namespace', "
135 "a='b', my-namespace:c='d') END ", handler.Str());
136 }
137 {
138 XmlParserTestHandler handler;
139 XmlParser::ParseXml(&handler, "<top><nested xmlns='my-namespace'><leaf/>"
140 "</nested><sibling/></top>");
141 EXPECT_EQ("START (top) START (my-namespace:nested, xmlns='my-namespace') "
142 "START (my-namespace:leaf) END END START (sibling) END END ",
143 handler.Str());
144 }
145 }
146
147 TEST(XmlParserTest, TestIncremental) {
148 XmlParserTestHandler handler;
149 XmlParser parser(&handler);
150 std::string fragment;
151
152 fragment = "<stream:stream";
153 parser.Parse(fragment.c_str(), fragment.length(), false);
154 EXPECT_EQ("", handler.StrClear());
155
156 fragment = " id=\"abcdefg\" xmlns=\"";
157 parser.Parse(fragment.c_str(), fragment.length(), false);
158 EXPECT_EQ("", handler.StrClear());
159
160 fragment = "j:c\" xmlns:stream='hm";
161 parser.Parse(fragment.c_str(), fragment.length(), false);
162 EXPECT_EQ("", handler.StrClear());
163
164 fragment = "ph'><test";
165 parser.Parse(fragment.c_str(), fragment.length(), false);
166 EXPECT_EQ("START (hmph:stream, id='abcdefg', xmlns='j:c', "
167 "http://www.w3.org/2000/xmlns/:stream='hmph') ", handler.StrClear());
168
169 fragment = "ing/><again/>abracad";
170 parser.Parse(fragment.c_str(), fragment.length(), false);
171 EXPECT_EQ("START (j:c:testing) END START (j:c:again) END TEXT (abracad) ",
172 handler.StrClear());
173
174 fragment = "abra</stream:";
175 parser.Parse(fragment.c_str(), fragment.length(), false);
176 EXPECT_EQ("TEXT (abra) ", handler.StrClear());
177
178 fragment = "stream>";
179 parser.Parse(fragment.c_str(), fragment.length(), false);
180 EXPECT_EQ("END ", handler.StrClear());
181 }
182
183 TEST(XmlParserTest, TestReset) {
184 {
185 XmlParserTestHandler handler;
186 XmlParser parser(&handler);
187 std::string fragment;
188
189 fragment = "<top><first/><second><third></third>";
190 parser.Parse(fragment.c_str(), fragment.length(), false);
191 EXPECT_EQ("START (top) START (first) END START (second) START (third) END ",
192 handler.StrClear());
193
194 parser.Reset();
195 fragment = "<tip><first/><second><third></third>";
196 parser.Parse(fragment.c_str(), fragment.length(), false);
197 EXPECT_EQ("START (tip) START (first) END START (second) START (third) END ",
198 handler.StrClear());
199 }
200 {
201 XmlParserTestHandler handler;
202 XmlParser parser(&handler);
203 std::string fragment;
204
205 fragment = "<top xmlns='m'>";
206 parser.Parse(fragment.c_str(), fragment.length(), false);
207 EXPECT_EQ("START (m:top, xmlns='m') ", handler.StrClear());
208
209 fragment = "<testing/><frag";
210 parser.Parse(fragment.c_str(), fragment.length(), false);
211 EXPECT_EQ("START (m:testing) END ", handler.StrClear());
212
213 parser.Reset();
214 fragment = "<testing><fragment/";
215 parser.Parse(fragment.c_str(), fragment.length(), false);
216 EXPECT_EQ("START (testing) ", handler.StrClear());
217
218 fragment = ">";
219 parser.Parse(fragment.c_str(), fragment.length(), false);
220 EXPECT_EQ("START (fragment) END ", handler.StrClear());
221 }
222 }
223
224 TEST(XmlParserTest, TestError) {
225 {
226 XmlParserTestHandler handler;
227 XmlParser::ParseXml(&handler, "junk");
228 EXPECT_EQ("ERROR (2) ", handler.Str());
229 }
230 {
231 XmlParserTestHandler handler;
232 XmlParser::ParseXml(&handler, "<top/> garbage ");
233 EXPECT_EQ("START (top) END ERROR (9) ", handler.Str());
234 }
235 {
236 XmlParserTestHandler handler;
237 XmlParser::ParseXml(&handler, "<-hm->");
238 EXPECT_EQ("ERROR (4) ", handler.Str());
239 }
240 {
241 XmlParserTestHandler handler;
242 XmlParser::ParseXml(&handler, "<hello>&foobar;</hello>");
243 EXPECT_EQ("START (hello) ERROR (11) ", handler.Str());
244 }
245 {
246 XmlParserTestHandler handler;
247 XmlParser::ParseXml(&handler,
248 "<!DOCTYPE HTML PUBLIC \"foobar\" \"barfoo\">");
249 EXPECT_EQ("ERROR (3) ", handler.Str());
250 }
251 {
252 // XmlParser requires utf-8
253 XmlParserTestHandler handler;
254 XmlParser::ParseXml(&handler,
255 "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><test/>");
256 EXPECT_EQ("ERROR (19) ", handler.Str());
257 }
258 {
259 // XmlParser requires version 1.0
260 XmlParserTestHandler handler;
261 XmlParser::ParseXml(&handler,
262 "<?xml version=\"2.0\"?><test/>");
263 EXPECT_EQ("ERROR (2) ", handler.Str());
264 }
265 {
266 // XmlParser requires standalone documents
267 XmlParserTestHandler handler;
268 XmlParser::ParseXml(&handler,
269 "<?xml version=\"1.0\" standalone=\"no\"?><test/>");
270 EXPECT_EQ("ERROR (2) ", handler.Str());
271 }
272 {
273 // XmlParser doesn't like empty namespace URIs
274 XmlParserTestHandler handler;
275 XmlParser::ParseXml(&handler,
276 "<test xmlns:foo='' foo:bar='huh?'>");
277 EXPECT_EQ("ERROR (2) ", handler.Str());
278 }
279 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698