14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License.
54d6c458bSopenharmony_ci * You may obtain a copy of the License at
64d6c458bSopenharmony_ci *
74d6c458bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84d6c458bSopenharmony_ci *
94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and
134d6c458bSopenharmony_ci * limitations under the License.
144d6c458bSopenharmony_ci */
154d6c458bSopenharmony_ci
164d6c458bSopenharmony_ci#ifndef TEST_XML_H
174d6c458bSopenharmony_ci#define TEST_XML_H
184d6c458bSopenharmony_ci
194d6c458bSopenharmony_ci#include "../js_xml.h"
204d6c458bSopenharmony_ci
214d6c458bSopenharmony_cinamespace OHOS::xml {
224d6c458bSopenharmony_ciclass XmlTest {
234d6c458bSopenharmony_cipublic:
244d6c458bSopenharmony_ci    XmlTest() = default;
254d6c458bSopenharmony_ci    ~XmlTest() = default;
264d6c458bSopenharmony_ci    static XmlSerializer construct(napi_env env);
274d6c458bSopenharmony_ci    static void SetDeclaration(napi_env env);
284d6c458bSopenharmony_ci    static void SetNamespace(napi_env env);
294d6c458bSopenharmony_ci    static void StartElement(napi_env env);
304d6c458bSopenharmony_ci    static void WriteEscaped(napi_env env);
314d6c458bSopenharmony_ci    static void XmlSerializerError(napi_env env);
324d6c458bSopenharmony_ci    static void PushSrcLinkList(napi_env env);
334d6c458bSopenharmony_ci    static size_t GetNSCount(napi_env env, size_t iTemp);
344d6c458bSopenharmony_ci    static std::string XmlPullParserError(napi_env env);
354d6c458bSopenharmony_ci    static TagEnum DealExclamationGroup(napi_env env, std::string xml);
364d6c458bSopenharmony_ci    static TagEnum DealLtGroup(napi_env env);
374d6c458bSopenharmony_ci    static TagEnum ParseTagType(napi_env env, std::string str, int apiVersion);
384d6c458bSopenharmony_ci    static std::string SkipText(napi_env env, std::string strXml, std::string str);
394d6c458bSopenharmony_ci    static std::string ParseNameInner(napi_env env, size_t start);
404d6c458bSopenharmony_ci    static std::string ParseName(napi_env env);
414d6c458bSopenharmony_ci    static bool ParseEntityFunc(napi_env env, std::string out, std::string sysInfo, bool flag, TextEnum textEnum);
424d6c458bSopenharmony_ci    static std::string ParseEntity(napi_env env, bool relaxed);
434d6c458bSopenharmony_ci    static size_t ParseTagValueInner(napi_env env, size_t &start,
444d6c458bSopenharmony_ci                                     std::string &result, size_t position, std::string xmlStr);
454d6c458bSopenharmony_ci    static std::string ParseTagValue(napi_env env, char delimiter, bool resolveEntities, TextEnum textEnum, size_t max);
464d6c458bSopenharmony_ci    static std::string GetNamespace(napi_env env, const std::string prefix, size_t depth);
474d6c458bSopenharmony_ci    static std::string ParseNspFunc(napi_env env);
484d6c458bSopenharmony_ci    static std::string ParseNspFunction(napi_env env, std::string pushStr);
494d6c458bSopenharmony_ci    static bool ParseNsp(napi_env env);
504d6c458bSopenharmony_ci    static bool ParseStartTagFuncDeal(napi_env env, std::string xml, bool relax);
514d6c458bSopenharmony_ci    static bool ParseDeclaration(napi_env env, std::string str);
524d6c458bSopenharmony_ci    static bool ReadInternalSubset();
534d6c458bSopenharmony_ci    static bool ParseStartTag(napi_env env, std::string str);
544d6c458bSopenharmony_ci    static bool ParseEndTagFunction(napi_env env, std::string str);
554d6c458bSopenharmony_ci    static bool ParseTagValueFunc(napi_env env, std::string str, char &c, size_t &start, std::string &result);
564d6c458bSopenharmony_ci    static std::string DealNapiStrValueFunction(napi_env env, std::string pushStr);
574d6c458bSopenharmony_ci    static int SplicNspFunction(napi_env env, std::string pushStr);
584d6c458bSopenharmony_ci    static std::string SetNamespaceFunction(napi_env env, std::string prefix, const std::string &nsTemp);
594d6c458bSopenharmony_ci    static std::string XmlSerializerErrorFunction(napi_env env);
604d6c458bSopenharmony_ci    static std::string DealLengthFuc(napi_env env, std::string str, size_t minimum, std::string pushStr);
614d6c458bSopenharmony_ci    int SkipCharFunction(napi_env env, std::string str, char expected);
624d6c458bSopenharmony_ci    int TestGetColumnNumber(napi_env env);
634d6c458bSopenharmony_ci    int TestGetLineNumber(napi_env env);
644d6c458bSopenharmony_ci    std::string TestGetText(napi_env env);
654d6c458bSopenharmony_ci    bool TestParseNsp(napi_env env);
664d6c458bSopenharmony_ci    void TestParseDeclaration(napi_env env);
674d6c458bSopenharmony_ci    std::string TestParseDelimiterInfo(napi_env env);
684d6c458bSopenharmony_ci    bool TestParseEndTag(napi_env env);
694d6c458bSopenharmony_ci    bool TestParseComment(napi_env env);
704d6c458bSopenharmony_ci    TagEnum TestParseOneTagFunc(napi_env env);
714d6c458bSopenharmony_ci    static TagEnum ParseStartTagFuncTest(napi_env env, std::string str, bool xmldecl, bool throwOnResolveFailure);
724d6c458bSopenharmony_ci    void TestParseEntityDecl(napi_env env);
734d6c458bSopenharmony_ci};
744d6c458bSopenharmony_ci
754d6c458bSopenharmony_ciXmlSerializer XmlTest::construct(napi_env env)
764d6c458bSopenharmony_ci{
774d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
784d6c458bSopenharmony_ci    void* pBuffer = nullptr;
794d6c458bSopenharmony_ci    size_t size = 1024;  // 1024: buffer size
804d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
814d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
824d6c458bSopenharmony_ci    return xmlSerializer;
834d6c458bSopenharmony_ci}
844d6c458bSopenharmony_ci
854d6c458bSopenharmony_civoid XmlTest::SetDeclaration(napi_env env)
864d6c458bSopenharmony_ci{
874d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
884d6c458bSopenharmony_ci    xmlSerializer.isHasDecl = true;
894d6c458bSopenharmony_ci    xmlSerializer.SetDeclaration();
904d6c458bSopenharmony_ci}
914d6c458bSopenharmony_ci
924d6c458bSopenharmony_civoid XmlTest::SetNamespace(napi_env env)
934d6c458bSopenharmony_ci{
944d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
954d6c458bSopenharmony_ci    xmlSerializer.type = "isStart";
964d6c458bSopenharmony_ci    xmlSerializer.iLength_ = 0;
974d6c458bSopenharmony_ci    xmlSerializer.depth_ = 1;
984d6c458bSopenharmony_ci    xmlSerializer.elementStack.push_back("");
994d6c458bSopenharmony_ci    xmlSerializer.elementStack.push_back("");
1004d6c458bSopenharmony_ci    xmlSerializer.SetNamespace("xml", "convert");
1014d6c458bSopenharmony_ci}
1024d6c458bSopenharmony_ci
1034d6c458bSopenharmony_civoid XmlTest::StartElement(napi_env env)
1044d6c458bSopenharmony_ci{
1054d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
1064d6c458bSopenharmony_ci    xmlSerializer.depth_ = 1;
1074d6c458bSopenharmony_ci    xmlSerializer.elementStack[0] = "x";
1084d6c458bSopenharmony_ci    xmlSerializer.elementStack.push_back("");
1094d6c458bSopenharmony_ci    xmlSerializer.elementStack.push_back("");
1104d6c458bSopenharmony_ci    xmlSerializer.elementStack.push_back("");
1114d6c458bSopenharmony_ci    xmlSerializer.StartElement("val");
1124d6c458bSopenharmony_ci}
1134d6c458bSopenharmony_ci
1144d6c458bSopenharmony_civoid XmlTest::WriteEscaped(napi_env env)
1154d6c458bSopenharmony_ci{
1164d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
1174d6c458bSopenharmony_ci    xmlSerializer.WriteEscaped("'\"&><q");
1184d6c458bSopenharmony_ci}
1194d6c458bSopenharmony_ci
1204d6c458bSopenharmony_civoid XmlTest::XmlSerializerError(napi_env env)
1214d6c458bSopenharmony_ci{
1224d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
1234d6c458bSopenharmony_ci    xmlSerializer.XmlSerializerError();
1244d6c458bSopenharmony_ci}
1254d6c458bSopenharmony_ci
1264d6c458bSopenharmony_civoid XmlTest::PushSrcLinkList(napi_env env)
1274d6c458bSopenharmony_ci{
1284d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>    <title>Happy</title>    <todo>Work</todo>";
1294d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
1304d6c458bSopenharmony_ci    xmlPullParser.PushSrcLinkList("str");
1314d6c458bSopenharmony_ci}
1324d6c458bSopenharmony_ci
1334d6c458bSopenharmony_cisize_t XmlTest::GetNSCount(napi_env env, size_t iTemp)
1344d6c458bSopenharmony_ci{
1354d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
1364d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
1374d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(0);
1384d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(1);
1394d6c458bSopenharmony_ci    return xmlPullParser.GetNSCount(iTemp);
1404d6c458bSopenharmony_ci}
1414d6c458bSopenharmony_ci
1424d6c458bSopenharmony_cistd::string XmlTest::XmlPullParserError(napi_env env)
1434d6c458bSopenharmony_ci{
1444d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
1454d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, "strXml", "utf-8");
1464d6c458bSopenharmony_ci    xmlPullParser.xmlPullParserError_ = "IndexOutOfBoundsException";
1474d6c458bSopenharmony_ci    return xmlPullParser.XmlPullParserError();
1484d6c458bSopenharmony_ci}
1494d6c458bSopenharmony_ci
1504d6c458bSopenharmony_ciTagEnum XmlTest::DealExclamationGroup(napi_env env, std::string xml)
1514d6c458bSopenharmony_ci{
1524d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
1534d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, "strXml", "utf-8");
1544d6c458bSopenharmony_ci    xmlPullParser.strXml_ = xml;
1554d6c458bSopenharmony_ci    return xmlPullParser.DealExclamationGroup();
1564d6c458bSopenharmony_ci}
1574d6c458bSopenharmony_ci
1584d6c458bSopenharmony_ciTagEnum XmlTest::DealLtGroup(napi_env env)
1594d6c458bSopenharmony_ci{
1604d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
1614d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
1624d6c458bSopenharmony_ci    xmlPullParser.strXml_ = "?/";
1634d6c458bSopenharmony_ci    return xmlPullParser.DealLtGroup();
1644d6c458bSopenharmony_ci}
1654d6c458bSopenharmony_ci
1664d6c458bSopenharmony_ciTagEnum XmlTest::ParseTagType(napi_env env, std::string str, int apiVersion)
1674d6c458bSopenharmony_ci{
1684d6c458bSopenharmony_ci    std::string strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><todo>Work</todo>";
1694d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
1704d6c458bSopenharmony_ci    xmlPullParser.bStartDoc_ = false;
1714d6c458bSopenharmony_ci    xmlPullParser.max_ = 0;
1724d6c458bSopenharmony_ci    xmlPullParser.strXml_ = str;
1734d6c458bSopenharmony_ci    xmlPullParser.apiVersion_ = apiVersion;
1744d6c458bSopenharmony_ci    return xmlPullParser.ParseTagType(false);
1754d6c458bSopenharmony_ci}
1764d6c458bSopenharmony_ci
1774d6c458bSopenharmony_cistd::string XmlTest::SkipText(napi_env env, std::string strXml, std::string str)
1784d6c458bSopenharmony_ci{
1794d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
1804d6c458bSopenharmony_ci    xmlPullParser.SkipText(str);
1814d6c458bSopenharmony_ci    return xmlPullParser.XmlPullParserError();
1824d6c458bSopenharmony_ci}
1834d6c458bSopenharmony_ci
1844d6c458bSopenharmony_ciint XmlTest::TestGetColumnNumber(napi_env env)
1854d6c458bSopenharmony_ci{
1864d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "1\n1", "utf8");
1874d6c458bSopenharmony_ci    xml.position_ = 3; // 3: index is three
1884d6c458bSopenharmony_ci    int res = xml.GetColumnNumber();
1894d6c458bSopenharmony_ci    return res;
1904d6c458bSopenharmony_ci}
1914d6c458bSopenharmony_ci
1924d6c458bSopenharmony_ciint XmlTest::TestGetLineNumber(napi_env env)
1934d6c458bSopenharmony_ci{
1944d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "\n", "utf8");
1954d6c458bSopenharmony_ci    xml.position_ = 1;
1964d6c458bSopenharmony_ci    int res = xml.GetLineNumber();
1974d6c458bSopenharmony_ci    return res;
1984d6c458bSopenharmony_ci}
1994d6c458bSopenharmony_ci
2004d6c458bSopenharmony_cistd::string XmlTest::TestGetText(napi_env env)
2014d6c458bSopenharmony_ci{
2024d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "1\n1", "utf8");
2034d6c458bSopenharmony_ci    xml.type = TagEnum::WHITESPACE;
2044d6c458bSopenharmony_ci    return xml.GetText();
2054d6c458bSopenharmony_ci}
2064d6c458bSopenharmony_ci
2074d6c458bSopenharmony_cibool XmlTest::TestParseNsp(napi_env env)
2084d6c458bSopenharmony_ci{
2094d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "", "utf8");
2104d6c458bSopenharmony_ci    xml.attriCount_ = 1;
2114d6c458bSopenharmony_ci    xml.attributes.push_back("");
2124d6c458bSopenharmony_ci    xml.attributes.push_back("");
2134d6c458bSopenharmony_ci    xml.attributes.push_back("xmlns");
2144d6c458bSopenharmony_ci    xml.attributes.push_back("");
2154d6c458bSopenharmony_ci    xml.nspCounts_.push_back(0);
2164d6c458bSopenharmony_ci    xml.name_ = ":";
2174d6c458bSopenharmony_ci    return xml.ParseNsp();
2184d6c458bSopenharmony_ci}
2194d6c458bSopenharmony_ci
2204d6c458bSopenharmony_civoid XmlTest::TestParseDeclaration(napi_env env)
2214d6c458bSopenharmony_ci{
2224d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "", "utf8");
2234d6c458bSopenharmony_ci    xml.bufferStartLine_ = 1;
2244d6c458bSopenharmony_ci    xml.attributes.push_back("");
2254d6c458bSopenharmony_ci    xml.attributes.push_back("");
2264d6c458bSopenharmony_ci    xml.attributes.push_back("");
2274d6c458bSopenharmony_ci    xml.attributes.push_back("1.0");
2284d6c458bSopenharmony_ci    xml.ParseDeclaration();
2294d6c458bSopenharmony_ci}
2304d6c458bSopenharmony_ci
2314d6c458bSopenharmony_cistd::string XmlTest::TestParseDelimiterInfo(napi_env env)
2324d6c458bSopenharmony_ci{
2334d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "12", "utf8");
2344d6c458bSopenharmony_ci    xml.text_ = "123";
2354d6c458bSopenharmony_ci    std::string res = xml.ParseDelimiterInfo("456", true);
2364d6c458bSopenharmony_ci    xml.strXml_ = "456";
2374d6c458bSopenharmony_ci    xml.position_ = 0;
2384d6c458bSopenharmony_ci    res = xml.ParseDelimiterInfo("456", false);
2394d6c458bSopenharmony_ci    return res;
2404d6c458bSopenharmony_ci}
2414d6c458bSopenharmony_ci
2424d6c458bSopenharmony_cibool XmlTest::TestParseEndTag(napi_env env)
2434d6c458bSopenharmony_ci{
2444d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "123456789", "utf8");
2454d6c458bSopenharmony_ci    xml.relaxed = false;
2464d6c458bSopenharmony_ci    xml.depth = 1;
2474d6c458bSopenharmony_ci    xml.elementStack_.resize(20); // 20 :vector size
2484d6c458bSopenharmony_ci    xml.elementStack_[3] = "!"; // 3: index of three
2494d6c458bSopenharmony_ci    xml.ParseEndTag();
2504d6c458bSopenharmony_ci    xml.depth = 0;
2514d6c458bSopenharmony_ci    xml.ParseEndTag();
2524d6c458bSopenharmony_ci    return false;
2534d6c458bSopenharmony_ci}
2544d6c458bSopenharmony_ci
2554d6c458bSopenharmony_cibool XmlTest::TestParseComment(napi_env env)
2564d6c458bSopenharmony_ci{
2574d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "1", "utf8");
2584d6c458bSopenharmony_ci    xml.relaxed = true;
2594d6c458bSopenharmony_ci    xml.ParseComment(true);
2604d6c458bSopenharmony_ci    return false;
2614d6c458bSopenharmony_ci}
2624d6c458bSopenharmony_ci
2634d6c458bSopenharmony_ciTagEnum XmlTest::TestParseOneTagFunc(napi_env env)
2644d6c458bSopenharmony_ci{
2654d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "1", "utf8");
2664d6c458bSopenharmony_ci    xml.type = TagEnum::ERROR;
2674d6c458bSopenharmony_ci    TagEnum res = xml.ParseOneTagFunc();
2684d6c458bSopenharmony_ci    return res;
2694d6c458bSopenharmony_ci}
2704d6c458bSopenharmony_ci
2714d6c458bSopenharmony_civoid XmlTest::TestParseEntityDecl(napi_env env)
2724d6c458bSopenharmony_ci{
2734d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, "%1234", "utf8");
2744d6c458bSopenharmony_ci    xml.ParseEntityDecl();
2754d6c458bSopenharmony_ci}
2764d6c458bSopenharmony_ci
2774d6c458bSopenharmony_cistd::string XmlTest::ParseNameInner(napi_env env, size_t start)
2784d6c458bSopenharmony_ci{
2794d6c458bSopenharmony_ci    std::string strXml = "<todo>Work</todo>";
2804d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
2814d6c458bSopenharmony_ci    xmlPullParser.position_ = 1;
2824d6c458bSopenharmony_ci    xmlPullParser.max_ = 1;
2834d6c458bSopenharmony_ci    xmlPullParser.strXml_ = "version";
2844d6c458bSopenharmony_ci    return xmlPullParser.ParseNameInner(start);
2854d6c458bSopenharmony_ci}
2864d6c458bSopenharmony_ci
2874d6c458bSopenharmony_cistd::string XmlTest::ParseName(napi_env env)
2884d6c458bSopenharmony_ci{
2894d6c458bSopenharmony_ci    std::string strXml = "><todo>Work</todo>";
2904d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
2914d6c458bSopenharmony_ci    xmlPullParser.strXml_ = "encoding";
2924d6c458bSopenharmony_ci    size_t len = xmlPullParser.strXml_.length();
2934d6c458bSopenharmony_ci    xmlPullParser.position_ = len;
2944d6c458bSopenharmony_ci    xmlPullParser.max_ = len;
2954d6c458bSopenharmony_ci    return xmlPullParser.ParseName();
2964d6c458bSopenharmony_ci}
2974d6c458bSopenharmony_ci
2984d6c458bSopenharmony_cibool XmlTest::ParseEntityFunc(napi_env env, std::string out, std::string sysInfo, bool flag, TextEnum textEnum)
2994d6c458bSopenharmony_ci{
3004d6c458bSopenharmony_ci    std::string strXml = "<todo>Work</todo>";
3014d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
3024d6c458bSopenharmony_ci    std::string key = "Work";
3034d6c458bSopenharmony_ci    xmlPullParser.documentEntities[key] = "value";
3044d6c458bSopenharmony_ci    xmlPullParser.bDocDecl = flag;
3054d6c458bSopenharmony_ci    xmlPullParser.sysInfo_ = sysInfo;
3064d6c458bSopenharmony_ci    xmlPullParser.ParseEntityFunc(0, out, true, textEnum);
3074d6c458bSopenharmony_ci    return xmlPullParser.bUnresolved_;
3084d6c458bSopenharmony_ci}
3094d6c458bSopenharmony_ci
3104d6c458bSopenharmony_cistd::string XmlTest::ParseEntity(napi_env env, bool relaxed)
3114d6c458bSopenharmony_ci{
3124d6c458bSopenharmony_ci    std::string strXml = "Wor";
3134d6c458bSopenharmony_ci    std::string out = "W#13434";
3144d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
3154d6c458bSopenharmony_ci    xmlPullParser.position_ = 0;
3164d6c458bSopenharmony_ci    xmlPullParser.max_ = 1;
3174d6c458bSopenharmony_ci    xmlPullParser.relaxed = relaxed;
3184d6c458bSopenharmony_ci    xmlPullParser.ParseEntity(out, true, true, TextEnum::ENTITY_DECL);
3194d6c458bSopenharmony_ci    return xmlPullParser.XmlPullParserError();
3204d6c458bSopenharmony_ci}
3214d6c458bSopenharmony_ci
3224d6c458bSopenharmony_cisize_t XmlTest::ParseTagValueInner(napi_env env, size_t &start,
3234d6c458bSopenharmony_ci                                   std::string &result, size_t position, std::string xmlStr)
3244d6c458bSopenharmony_ci{
3254d6c458bSopenharmony_ci    std::string strXml = "<todo>Work</todo>";
3264d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, strXml, "utf-8");
3274d6c458bSopenharmony_ci    xmlPullParser.position_ = position;
3284d6c458bSopenharmony_ci    xmlPullParser.max_ = 1;
3294d6c458bSopenharmony_ci    xmlPullParser.strXml_ = xmlStr;
3304d6c458bSopenharmony_ci    return xmlPullParser.ParseTagValueInner(start, result, 'o', TextEnum::ENTITY_DECL, false);
3314d6c458bSopenharmony_ci}
3324d6c458bSopenharmony_ci
3334d6c458bSopenharmony_cistd::string XmlTest::ParseTagValue(napi_env env, char delimiter, bool resolveEntities, TextEnum textEnum, size_t max)
3344d6c458bSopenharmony_ci{
3354d6c458bSopenharmony_ci    std::string xml = "W";
3364d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
3374d6c458bSopenharmony_ci    xmlPullParser.text_ = "xml";
3384d6c458bSopenharmony_ci    xmlPullParser.position_ = 1;
3394d6c458bSopenharmony_ci    xmlPullParser.max_ = max;
3404d6c458bSopenharmony_ci    return xmlPullParser.ParseTagValue(delimiter, resolveEntities, false, textEnum);
3414d6c458bSopenharmony_ci}
3424d6c458bSopenharmony_ci
3434d6c458bSopenharmony_cistd::string XmlTest::GetNamespace(napi_env env, const std::string prefix, size_t depth)
3444d6c458bSopenharmony_ci{
3454d6c458bSopenharmony_ci    std::string xml = "Work";
3464d6c458bSopenharmony_ci    const std::string preStr = prefix;
3474d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
3484d6c458bSopenharmony_ci    xmlPullParser.depth = depth;
3494d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(0);
3504d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(1);
3514d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(2); // values greater than pos_
3524d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("Q");
3534d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("E");
3544d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("");
3554d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("W");
3564d6c458bSopenharmony_ci    return xmlPullParser.GetNamespace(preStr);
3574d6c458bSopenharmony_ci}
3584d6c458bSopenharmony_ci
3594d6c458bSopenharmony_cistd::string XmlTest::ParseNspFunc(napi_env env)
3604d6c458bSopenharmony_ci{
3614d6c458bSopenharmony_ci    std::string xml = "Work";
3624d6c458bSopenharmony_ci    size_t count = 0;
3634d6c458bSopenharmony_ci    std::string attrName = "sub";
3644d6c458bSopenharmony_ci    bool any = true;
3654d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
3664d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("q");
3674d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("e");
3684d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("r");
3694d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("");
3704d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(0);
3714d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("t");
3724d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("c");
3734d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("y");
3744d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("p");
3754d6c458bSopenharmony_ci    xmlPullParser.bKeepNsAttri = true;
3764d6c458bSopenharmony_ci    xmlPullParser.ParseNspFunc(count, attrName, any);
3774d6c458bSopenharmony_ci    return xmlPullParser.XmlPullParserError();
3784d6c458bSopenharmony_ci}
3794d6c458bSopenharmony_ci
3804d6c458bSopenharmony_cistd::string XmlTest::ParseNspFunction(napi_env env, std::string pushStr)
3814d6c458bSopenharmony_ci{
3824d6c458bSopenharmony_ci    std::string xml = "Work";
3834d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
3844d6c458bSopenharmony_ci    xmlPullParser.attriCount_ = 1;
3854d6c458bSopenharmony_ci    xmlPullParser.depth = 1;
3864d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(0);
3874d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(1);
3884d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(2); // values greater than pos_
3894d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("Q");
3904d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("E");
3914d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("");
3924d6c458bSopenharmony_ci    xmlPullParser.nspStack_.push_back("W");
3934d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("r");
3944d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("t");
3954d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back(pushStr);
3964d6c458bSopenharmony_ci    xmlPullParser.ParseNspFunction();
3974d6c458bSopenharmony_ci    return xmlPullParser.XmlPullParserError();
3984d6c458bSopenharmony_ci}
3994d6c458bSopenharmony_ci
4004d6c458bSopenharmony_cibool XmlTest::ParseNsp(napi_env env)
4014d6c458bSopenharmony_ci{
4024d6c458bSopenharmony_ci    std::string xml = "Work";
4034d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
4044d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("");
4054d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("");
4064d6c458bSopenharmony_ci    xmlPullParser.attributes.push_back("xmlns");
4074d6c458bSopenharmony_ci    xmlPullParser.nspCounts_.push_back(0);
4084d6c458bSopenharmony_ci    xmlPullParser.name_ = ":xml";
4094d6c458bSopenharmony_ci    return xmlPullParser.ParseNsp();
4104d6c458bSopenharmony_ci}
4114d6c458bSopenharmony_ci
4124d6c458bSopenharmony_cibool XmlTest::ParseStartTagFuncDeal(napi_env env, std::string xml, bool relax)
4134d6c458bSopenharmony_ci{
4144d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, xml, "utf-8");
4154d6c458bSopenharmony_ci    xmlPullParser.position_ = 0;
4164d6c458bSopenharmony_ci    xmlPullParser.max_ = 1;
4174d6c458bSopenharmony_ci    xmlPullParser.relaxed = relax;
4184d6c458bSopenharmony_ci    return xmlPullParser.ParseStartTagFuncDeal(true);
4194d6c458bSopenharmony_ci}
4204d6c458bSopenharmony_ci
4214d6c458bSopenharmony_cibool XmlTest::ParseDeclaration(napi_env env, std::string str)
4224d6c458bSopenharmony_ci{
4234d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, str, "utf-8");
4244d6c458bSopenharmony_ci    xmlPullParser.attriCount_ = 3; // values greater than pos_
4254d6c458bSopenharmony_ci    xmlPullParser.ParseDeclaration();
4264d6c458bSopenharmony_ci    return true;
4274d6c458bSopenharmony_ci}
4284d6c458bSopenharmony_ci
4294d6c458bSopenharmony_cistd::string XmlTest::DealNapiStrValueFunction(napi_env env, std::string pushStr)
4304d6c458bSopenharmony_ci{
4314d6c458bSopenharmony_ci    napi_value arg = nullptr;
4324d6c458bSopenharmony_ci    std::string output = "";
4334d6c458bSopenharmony_ci    napi_create_string_utf8(env, pushStr.c_str(), pushStr.size(), &arg);
4344d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
4354d6c458bSopenharmony_ci    xmlSerializer.DealNapiStrValue(env, arg, output);
4364d6c458bSopenharmony_ci    return output;
4374d6c458bSopenharmony_ci}
4384d6c458bSopenharmony_ci
4394d6c458bSopenharmony_ciint XmlTest::SplicNspFunction(napi_env env, std::string pushStr)
4404d6c458bSopenharmony_ci{
4414d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
4424d6c458bSopenharmony_ci    xmlSerializer.type = pushStr;
4434d6c458bSopenharmony_ci    return xmlSerializer.curNspNum;
4444d6c458bSopenharmony_ci}
4454d6c458bSopenharmony_ci
4464d6c458bSopenharmony_cistd::string XmlTest::SetNamespaceFunction(napi_env env, std::string prefix, const std::string &nsTemp)
4474d6c458bSopenharmony_ci{
4484d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
4494d6c458bSopenharmony_ci    xmlSerializer.type = "isStart";
4504d6c458bSopenharmony_ci    xmlSerializer.SetDeclaration();
4514d6c458bSopenharmony_ci    xmlSerializer.SetNamespace(prefix, nsTemp);
4524d6c458bSopenharmony_ci    xmlSerializer.StartElement("note");
4534d6c458bSopenharmony_ci    xmlSerializer.EndElement();
4544d6c458bSopenharmony_ci    return xmlSerializer.out_;
4554d6c458bSopenharmony_ci}
4564d6c458bSopenharmony_ci
4574d6c458bSopenharmony_cistd::string XmlTest::XmlSerializerErrorFunction(napi_env env)
4584d6c458bSopenharmony_ci{
4594d6c458bSopenharmony_ci    XmlSerializer xmlSerializer = construct(env);
4604d6c458bSopenharmony_ci    xmlSerializer.isHasDecl = true;
4614d6c458bSopenharmony_ci    xmlSerializer.SetDeclaration();
4624d6c458bSopenharmony_ci    return xmlSerializer.xmlSerializerError_;
4634d6c458bSopenharmony_ci}
4644d6c458bSopenharmony_ci
4654d6c458bSopenharmony_cibool XmlTest::ParseStartTag(napi_env env, std::string str)
4664d6c458bSopenharmony_ci{
4674d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, str, "utf-8");
4684d6c458bSopenharmony_ci    xmlPullParser.attriCount_ = 3; // values greater than pos_
4694d6c458bSopenharmony_ci    xmlPullParser.defaultAttributes["lt;"]["<"] = "lt;";
4704d6c458bSopenharmony_ci    xmlPullParser.defaultAttributes["lt;"]["<"] = "<";
4714d6c458bSopenharmony_ci    xmlPullParser.defaultAttributes["gt;"]["<"] = "gt;";
4724d6c458bSopenharmony_ci    xmlPullParser.defaultAttributes["gt;"]["<"] = ">";
4734d6c458bSopenharmony_ci    xmlPullParser.ParseStartTag(false, false);
4744d6c458bSopenharmony_ci    xmlPullParser.ParseDeclaration();
4754d6c458bSopenharmony_ci    return true;
4764d6c458bSopenharmony_ci}
4774d6c458bSopenharmony_ci
4784d6c458bSopenharmony_cibool XmlTest::ParseEndTagFunction(napi_env env, std::string str)
4794d6c458bSopenharmony_ci{
4804d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, str, "utf8");
4814d6c458bSopenharmony_ci    xml.relaxed = false;
4824d6c458bSopenharmony_ci    xml.depth = 1;
4834d6c458bSopenharmony_ci    xml.elementStack_.resize(20); // 20 :vector size
4844d6c458bSopenharmony_ci    xml.elementStack_[3] = "!"; // 3: index of three
4854d6c458bSopenharmony_ci    xml.ParseEndTag();
4864d6c458bSopenharmony_ci    xml.depth = 0;
4874d6c458bSopenharmony_ci    xml.ParseEndTag();
4884d6c458bSopenharmony_ci    return true;
4894d6c458bSopenharmony_ci}
4904d6c458bSopenharmony_ci
4914d6c458bSopenharmony_cibool XmlTest::ParseTagValueFunc(napi_env env, std::string str, char &c, size_t &start, std::string &result)
4924d6c458bSopenharmony_ci{
4934d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xml(env, str, "utf8");
4944d6c458bSopenharmony_ci    xml.max_ = 100; // 100: max_ size
4954d6c458bSopenharmony_ci    return xml.ParseTagValueFunc(c, true, TextEnum::ATTRI, start, result);
4964d6c458bSopenharmony_ci}
4974d6c458bSopenharmony_ci
4984d6c458bSopenharmony_cistd::string XmlTest::DealLengthFuc(napi_env env, std::string str, size_t minimum, std::string pushStr)
4994d6c458bSopenharmony_ci{
5004d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, str, "utf-8");
5014d6c458bSopenharmony_ci    xmlPullParser.keyInfo_ = pushStr;
5024d6c458bSopenharmony_ci    xmlPullParser.position_ = 10; // 10: position_ size
5034d6c458bSopenharmony_ci    xmlPullParser.DealLength(minimum);
5044d6c458bSopenharmony_ci    return xmlPullParser.keyInfo_;
5054d6c458bSopenharmony_ci}
5064d6c458bSopenharmony_ci
5074d6c458bSopenharmony_ciTagEnum XmlTest::ParseStartTagFuncTest(napi_env env, std::string str, bool xmldecl, bool throwOnResolveFailure)
5084d6c458bSopenharmony_ci{
5094d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, str, "utf-8");
5104d6c458bSopenharmony_ci    size_t minimum = 10; // 10: minimum size
5114d6c458bSopenharmony_ci    xmlPullParser.position_ = 100; // 100: position_ size
5124d6c458bSopenharmony_ci    xmlPullParser.DealLength(minimum);
5134d6c458bSopenharmony_ci    TagEnum res = xmlPullParser.ParseStartTagFunc(xmldecl, throwOnResolveFailure);
5144d6c458bSopenharmony_ci    return res;
5154d6c458bSopenharmony_ci}
5164d6c458bSopenharmony_ci
5174d6c458bSopenharmony_ciint XmlTest::SkipCharFunction(napi_env env, std::string str, char expected)
5184d6c458bSopenharmony_ci{
5194d6c458bSopenharmony_ci    OHOS::xml::XmlPullParser xmlPullParser(env, str, "utf-8");
5204d6c458bSopenharmony_ci    xmlPullParser.DealLength(666); // 666: minimum size
5214d6c458bSopenharmony_ci    xmlPullParser.position_ = 666; // 666: position_ size
5224d6c458bSopenharmony_ci    xmlPullParser.SkipChar(expected);
5234d6c458bSopenharmony_ci    return xmlPullParser.PriorDealChar();
5244d6c458bSopenharmony_ci}
5254d6c458bSopenharmony_ci}
5264d6c458bSopenharmony_ci#endif // TEST_XML_Hs
527