• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef TEST_XML_H
17 #define TEST_XML_H
18 
19 #include "../js_xml.h"
20 
21 namespace OHOS::xml {
22 class XmlTest {
23 public:
24     XmlTest() = default;
25     ~XmlTest() = default;
26     static XmlSerializer construct(napi_env env);
27     static void SetDeclaration(napi_env env);
28     static void SetNamespace(napi_env env);
29     static void StartElement(napi_env env);
30     static void WriteEscaped(napi_env env);
31     static void XmlSerializerError(napi_env env);
32     static void PushSrcLinkList();
33     static size_t GetNSCount(size_t iTemp);
34     static std::string XmlPullParserError();
35     static TagEnum DealExclamationGroup(std::string xml);
36     static TagEnum DealLtGroup();
37     static TagEnum ParseTagType();
38     static std::string SkipText(std::string strXml, std::string str);
39     static std::string ParseNameInner(size_t start);
40     static std::string ParseName();
41     static void ParseEntityFunc(std::string out, std::string sysInfo, bool flag, TextEnum textEnum);
42     static std::string ParseEntity();
43     static size_t ParseTagValueInner(size_t &start, std::string &result, size_t position, std::string xmlStr);
44     static std::string ParseTagValue(char delimiter, bool resolveEntities, TextEnum textEnum, size_t max);
45     static std::string GetNamespace(const std::string prefix, size_t depth);
46     static std::string ParseNspFunc();
47     static std::string ParseNspFunction(std::string pushStr);
48     static bool ParseNsp();
49     static bool ParseStartTagFuncDeal(std::string xml, bool relax);
50     static bool ParseDeclaration(std::string str);
51     static bool ReadInternalSubset();
52     int TestGetColumnNumber(napi_env env);
53     int TestGetLineNumber(napi_env env);
54     std::string TestGetText(napi_env env);
55     bool TestParseNsp(napi_env env);
56     void TestParseDeclaration(napi_env env);
57     std::string TestParseDelimiterInfo(napi_env env);
58     bool TestParseEndTag(napi_env env);
59     bool TestParseComment(napi_env env);
60     TagEnum TestParseOneTagFunc();
61     void TestParseEntityDecl();
62 };
63 
construct(napi_env env)64 XmlSerializer XmlTest::construct(napi_env env)
65 {
66     napi_value arrayBuffer = nullptr;
67     void* pBuffer = nullptr;
68     size_t size = 1024;  // 1024: buffer size
69     napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
70     OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
71     return xmlSerializer;
72 }
73 
SetDeclaration(napi_env env)74 void XmlTest::SetDeclaration(napi_env env)
75 {
76     XmlSerializer xmlSerializer = construct(env);
77     xmlSerializer.isHasDecl = true;
78     xmlSerializer.SetDeclaration();
79 }
80 
SetNamespace(napi_env env)81 void XmlTest::SetNamespace(napi_env env)
82 {
83     XmlSerializer xmlSerializer = construct(env);
84     xmlSerializer.type = "isStart";
85     xmlSerializer.iLength_ = 0;
86     xmlSerializer.depth_ = 1;
87     xmlSerializer.elementStack.push_back("");
88     xmlSerializer.elementStack.push_back("");
89     xmlSerializer.SetNamespace("xml", "convert");
90 }
91 
StartElement(napi_env env)92 void XmlTest::StartElement(napi_env env)
93 {
94     XmlSerializer xmlSerializer = construct(env);
95     xmlSerializer.depth_ = 1;
96     xmlSerializer.elementStack[0] = "x";
97     xmlSerializer.elementStack.push_back("");
98     xmlSerializer.elementStack.push_back("");
99     xmlSerializer.elementStack.push_back("");
100     xmlSerializer.StartElement("val");
101 }
102 
WriteEscaped(napi_env env)103 void XmlTest::WriteEscaped(napi_env env)
104 {
105     XmlSerializer xmlSerializer = construct(env);
106     xmlSerializer.WriteEscaped("'\"&><q");
107 }
108 
XmlSerializerError(napi_env env)109 void XmlTest::XmlSerializerError(napi_env env)
110 {
111     XmlSerializer xmlSerializer = construct(env);
112     xmlSerializer.XmlSerializerError();
113 }
114 
PushSrcLinkList()115 void XmlTest::PushSrcLinkList()
116 {
117     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>    <title>Happy</title>    <todo>Work</todo>";
118     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
119     xmlPullParser.PushSrcLinkList("str");
120 }
121 
GetNSCount(size_t iTemp)122 size_t XmlTest::GetNSCount(size_t iTemp)
123 {
124     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
125     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
126     xmlPullParser.nspCounts_.push_back(0);
127     xmlPullParser.nspCounts_.push_back(1);
128     return xmlPullParser.GetNSCount(iTemp);
129 }
130 
XmlPullParserError()131 std::string XmlTest::XmlPullParserError()
132 {
133     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
134     OHOS::xml::XmlPullParser xmlPullParser("strXml", "utf-8");
135     xmlPullParser.xmlPullParserError_= "IndexOutOfBoundsException";
136     return xmlPullParser.XmlPullParserError();
137 }
138 
DealExclamationGroup(std::string xml)139 TagEnum XmlTest::DealExclamationGroup(std::string xml)
140 {
141     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
142     OHOS::xml::XmlPullParser xmlPullParser("strXml", "utf-8");
143     xmlPullParser.strXml_ = xml;
144     return xmlPullParser.DealExclamationGroup();
145 }
146 
DealLtGroup()147 TagEnum XmlTest::DealLtGroup()
148 {
149     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
150     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
151     xmlPullParser.strXml_ = "?/";
152     return xmlPullParser.DealLtGroup();
153 }
154 
ParseTagType()155 TagEnum XmlTest::ParseTagType()
156 {
157     std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
158     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
159     xmlPullParser.bStartDoc_ = false;
160     xmlPullParser.max_ = 0;
161     xmlPullParser.strXml_ = "%";
162     return xmlPullParser.ParseTagType(false);
163 }
164 
SkipText(std::string strXml,std::string str)165 std::string XmlTest::SkipText(std::string strXml, std::string str)
166 {
167     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
168     xmlPullParser.SkipText(str);
169     return xmlPullParser.XmlPullParserError();
170 }
171 
TestGetColumnNumber(napi_env env)172 int XmlTest::TestGetColumnNumber(napi_env env)
173 {
174     OHOS::xml::XmlPullParser xml("1\n1", "utf8");
175     xml.position_ = 3; // 3: index is three
176     int res = xml.GetColumnNumber();
177     return res;
178 }
179 
TestGetLineNumber(napi_env env)180 int XmlTest::TestGetLineNumber(napi_env env)
181 {
182     OHOS::xml::XmlPullParser xml("\n", "utf8");
183     xml.position_ = 1;
184     int res = xml.GetLineNumber();
185     return res;
186 }
187 
TestGetText(napi_env env)188 std::string XmlTest::TestGetText(napi_env env)
189 {
190     OHOS::xml::XmlPullParser xml("1\n1", "utf8");
191     xml.type = TagEnum::WHITESPACE;
192     return xml.GetText();
193 }
194 
TestParseNsp(napi_env env)195 bool XmlTest::TestParseNsp(napi_env env)
196 {
197     OHOS::xml::XmlPullParser xml("", "utf8");
198     xml.attriCount_ = 1;
199     xml.attributes.push_back("");
200     xml.attributes.push_back("");
201     xml.attributes.push_back("xmlns");
202     xml.attributes.push_back("");
203     xml.nspCounts_.push_back(0);
204     xml.name_ = ":";
205     return xml.ParseNsp();
206 }
207 
TestParseDeclaration(napi_env env)208 void XmlTest::TestParseDeclaration(napi_env env)
209 {
210     OHOS::xml::XmlPullParser xml("", "utf8");
211     xml.bufferStartLine_ = 1;
212     xml.attributes.push_back("");
213     xml.attributes.push_back("");
214     xml.attributes.push_back("");
215     xml.ParseDeclaration();
216 }
217 
TestParseDelimiterInfo(napi_env env)218 std::string XmlTest::TestParseDelimiterInfo(napi_env env)
219 {
220     OHOS::xml::XmlPullParser xml("12", "utf8");
221     xml.text_ = "123";
222     std::string res = xml.ParseDelimiterInfo("456", true);
223     xml.strXml_ = "456";
224     xml.position_ = 0;
225     res = xml.ParseDelimiterInfo("456", false);
226     return res;
227 }
228 
TestParseEndTag(napi_env env)229 bool XmlTest::TestParseEndTag(napi_env env)
230 {
231     OHOS::xml::XmlPullParser xml("123456789", "utf8");
232     xml.relaxed = false;
233     xml.depth = 1;
234     xml.elementStack_.resize(20); // 20 :vector size
235     xml.elementStack_[3] = "!"; // 3: index of three
236     xml.ParseEndTag();
237     xml.depth = 0;
238     xml.ParseEndTag();
239     return false;
240 }
241 
TestParseComment(napi_env env)242 bool XmlTest::TestParseComment(napi_env env)
243 {
244     OHOS::xml::XmlPullParser xml("1", "utf8");
245     xml.relaxed = true;
246     xml.ParseComment(true);
247     return false;
248 }
249 
TestParseOneTagFunc()250 TagEnum XmlTest::TestParseOneTagFunc()
251 {
252     OHOS::xml::XmlPullParser xml("1", "utf8");
253     xml.type = TagEnum::ERROR1;
254     TagEnum res = xml.ParseOneTagFunc();
255     return res;
256 }
257 
TestParseEntityDecl()258 void XmlTest::TestParseEntityDecl()
259 {
260     OHOS::xml::XmlPullParser xml("%1234", "utf8");
261     xml.ParseEntityDecl();
262 }
263 
ParseNameInner(size_t start)264 std::string XmlTest::ParseNameInner(size_t start)
265 {
266     std::string strXml = "<todo>Work</todo>";
267     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
268     xmlPullParser.position_ = 1;
269     xmlPullParser.max_ = 1;
270     xmlPullParser.strXml_ = "version";
271     return xmlPullParser.ParseNameInner(start);
272 }
273 
ParseName()274 std::string XmlTest::ParseName()
275 {
276     std::string strXml = "><todo>Work</todo>";
277     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
278     xmlPullParser.strXml_ = "encoding";
279     size_t len = xmlPullParser.strXml_.length();
280     xmlPullParser.position_ = len;
281     xmlPullParser.max_ = len;
282     return xmlPullParser.ParseName();
283 }
284 
ParseEntityFunc(std::string out,std::string sysInfo,bool flag,TextEnum textEnum)285 void XmlTest::ParseEntityFunc(std::string out, std::string sysInfo, bool flag, TextEnum textEnum)
286 {
287     std::string strXml = "<todo>Work</todo>";
288     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
289     std::string key = "Work";
290     xmlPullParser.documentEntities[key] = "value";
291     xmlPullParser.bDocDecl = flag;
292     xmlPullParser.sysInfo_ = sysInfo;
293     xmlPullParser.ParseEntityFunc(0, out, true, textEnum);
294 }
295 
ParseEntity()296 std::string XmlTest::ParseEntity()
297 {
298     std::string strXml = "Wor";
299     std::string out = "W#13434";
300     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
301     xmlPullParser.position_= 0;
302     xmlPullParser.max_ = 1;
303     xmlPullParser.relaxed = true;
304     xmlPullParser.ParseEntity(out, true, true, TextEnum::ENTITY_DECL);
305     return xmlPullParser.XmlPullParserError();
306 }
307 
ParseTagValueInner(size_t & start,std::string & result,size_t position,std::string xmlStr)308 size_t XmlTest::ParseTagValueInner(size_t &start, std::string &result, size_t position, std::string xmlStr)
309 {
310     std::string strXml = "<todo>Work</todo>";
311     OHOS::xml::XmlPullParser xmlPullParser(strXml, "utf-8");
312     xmlPullParser.position_ = position;
313     xmlPullParser.max_ = 1;
314     xmlPullParser.strXml_ = xmlStr;
315     return xmlPullParser.ParseTagValueInner(start, result, 'o', TextEnum::ENTITY_DECL, false);
316 }
317 
ParseTagValue(char delimiter,bool resolveEntities,TextEnum textEnum,size_t max)318 std::string XmlTest::ParseTagValue(char delimiter, bool resolveEntities, TextEnum textEnum, size_t max)
319 {
320     std::string xml = "W";
321     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
322     xmlPullParser.text_ = "xml";
323     xmlPullParser.position_ = 1;
324     xmlPullParser.max_ = max;
325     return xmlPullParser.ParseTagValue(delimiter, resolveEntities, false, textEnum);
326 }
327 
GetNamespace(const std::string prefix,size_t depth)328 std::string XmlTest::GetNamespace(const std::string prefix, size_t depth)
329 {
330     std::string xml = "Work";
331     const std::string preStr = prefix;
332     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
333     xmlPullParser.depth = depth;
334     xmlPullParser.nspCounts_.push_back(0);
335     xmlPullParser.nspCounts_.push_back(1);
336     xmlPullParser.nspCounts_.push_back(2); // values greater than pos_
337     xmlPullParser.nspStack_.push_back("Q");
338     xmlPullParser.nspStack_.push_back("E");
339     xmlPullParser.nspStack_.push_back("");
340     xmlPullParser.nspStack_.push_back("W");
341     return xmlPullParser.GetNamespace(preStr);
342 }
343 
ParseNspFunc()344 std::string XmlTest::ParseNspFunc()
345 {
346     std::string xml = "Work";
347     size_t count = 0;
348     std::string attrName = "sub";
349     bool any = true;
350     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
351     xmlPullParser.attributes.push_back("q");
352     xmlPullParser.attributes.push_back("e");
353     xmlPullParser.attributes.push_back("r");
354     xmlPullParser.attributes.push_back("");
355     xmlPullParser.nspCounts_.push_back(0);
356     xmlPullParser.nspStack_.push_back("t");
357     xmlPullParser.nspStack_.push_back("c");
358     xmlPullParser.nspStack_.push_back("y");
359     xmlPullParser.nspStack_.push_back("p");
360     xmlPullParser.bKeepNsAttri = true;
361     xmlPullParser.ParseNspFunc(count, attrName, any);
362     return xmlPullParser.XmlPullParserError();
363 }
364 
ParseNspFunction(std::string pushStr)365 std::string XmlTest::ParseNspFunction(std::string pushStr)
366 {
367     std::string xml = "Work";
368     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
369     xmlPullParser.attriCount_ = 1;
370     xmlPullParser.depth = 1;
371     xmlPullParser.nspCounts_.push_back(0);
372     xmlPullParser.nspCounts_.push_back(1);
373     xmlPullParser.nspCounts_.push_back(2); // values greater than pos_
374     xmlPullParser.nspStack_.push_back("Q");
375     xmlPullParser.nspStack_.push_back("E");
376     xmlPullParser.nspStack_.push_back("");
377     xmlPullParser.nspStack_.push_back("W");
378     xmlPullParser.attributes.push_back("r");
379     xmlPullParser.attributes.push_back("t");
380     xmlPullParser.attributes.push_back(pushStr);
381     xmlPullParser.ParseNspFunction();
382     return xmlPullParser.XmlPullParserError();
383 }
384 
ParseNsp()385 bool XmlTest::ParseNsp()
386 {
387     std::string xml = "Work";
388     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
389     xmlPullParser.attributes.push_back("");
390     xmlPullParser.attributes.push_back("");
391     xmlPullParser.attributes.push_back("xmlns");
392     xmlPullParser.nspCounts_.push_back(0);
393     xmlPullParser.name_ = ":xml";
394     return xmlPullParser.ParseNsp();
395 }
396 
ParseStartTagFuncDeal(std::string xml,bool relax)397 bool XmlTest::ParseStartTagFuncDeal(std::string xml, bool relax)
398 {
399     OHOS::xml::XmlPullParser xmlPullParser(xml, "utf-8");
400     xmlPullParser.position_ = 0;
401     xmlPullParser.max_ = 1;
402     xmlPullParser.relaxed = relax;
403     return xmlPullParser.ParseStartTagFuncDeal(true);
404 }
405 
ParseDeclaration(std::string str)406 bool XmlTest::ParseDeclaration(std::string str)
407 {
408     OHOS::xml::XmlPullParser xmlPullParser(str, "utf-8");
409     xmlPullParser.attriCount_ = 3; // values greater than pos_
410     xmlPullParser.ParseDeclaration();
411     return true;
412 }
413 }
414 #endif // TEST_XML_H