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