14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2022 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#include "test_convertxml.h"
174d6c458bSopenharmony_ci#include "test.h"
184d6c458bSopenharmony_ci
194d6c458bSopenharmony_ci#include "napi/native_api.h"
204d6c458bSopenharmony_ci#include "napi/native_node_api.h"
214d6c458bSopenharmony_ci
224d6c458bSopenharmony_ci#include "js_convertxml.h"
234d6c458bSopenharmony_ci#include "js_xml.h"
244d6c458bSopenharmony_ci#include "native_module_convertxml.h"
254d6c458bSopenharmony_ci#include "tools/log.h"
264d6c458bSopenharmony_ci
274d6c458bSopenharmony_ciusing namespace OHOS::Xml;
284d6c458bSopenharmony_ci
294d6c458bSopenharmony_cinapi_value setProperty(napi_env env, napi_value obj, std::vector<std::string> proVec)
304d6c458bSopenharmony_ci{
314d6c458bSopenharmony_ci    const size_t boolNum = 8; // 8 : the counts of the bool value
324d6c458bSopenharmony_ci    napi_value val = nullptr;
334d6c458bSopenharmony_ci    for (size_t i = 0; i < proVec.size();) {
344d6c458bSopenharmony_ci        if (i < boolNum) {
354d6c458bSopenharmony_ci            napi_get_boolean(env, false, &val);
364d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
374d6c458bSopenharmony_ci            i++;
384d6c458bSopenharmony_ci        } else {
394d6c458bSopenharmony_ci            napi_create_string_utf8(env, proVec[i + 1].c_str(), proVec[i + 1].size(), &val);
404d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
414d6c458bSopenharmony_ci            i += 2; // 2 : the length of the value and property
424d6c458bSopenharmony_ci        }
434d6c458bSopenharmony_ci    }
444d6c458bSopenharmony_ci    return obj;
454d6c458bSopenharmony_ci}
464d6c458bSopenharmony_ci
474d6c458bSopenharmony_cinapi_value setPropertyForTrim(napi_env env, napi_value obj, std::vector<std::string> proVec)
484d6c458bSopenharmony_ci{
494d6c458bSopenharmony_ci    const size_t boolNum = 8; // 8 : the counts of the bool value
504d6c458bSopenharmony_ci    const size_t firstNum = 0;
514d6c458bSopenharmony_ci    const size_t secondNum = 1;
524d6c458bSopenharmony_ci    const size_t thirdNum = 2;
534d6c458bSopenharmony_ci    napi_value val = nullptr;
544d6c458bSopenharmony_ci    for (size_t i = 0; i < proVec.size();) {
554d6c458bSopenharmony_ci        if (i == firstNum) {
564d6c458bSopenharmony_ci            napi_get_boolean(env, true, &val);
574d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
584d6c458bSopenharmony_ci            i++;
594d6c458bSopenharmony_ci            continue;
604d6c458bSopenharmony_ci        }
614d6c458bSopenharmony_ci        if (i == secondNum) {
624d6c458bSopenharmony_ci            const char* str = "abc";
634d6c458bSopenharmony_ci            napi_create_string_utf8(env, str, NAPI_AUTO_LENGTH, &val);
644d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
654d6c458bSopenharmony_ci            i++;
664d6c458bSopenharmony_ci            continue;
674d6c458bSopenharmony_ci        }
684d6c458bSopenharmony_ci        if (i == thirdNum) {
694d6c458bSopenharmony_ci            int32_t number = 12345;
704d6c458bSopenharmony_ci            napi_create_int32(env, number, &val);
714d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
724d6c458bSopenharmony_ci            i++;
734d6c458bSopenharmony_ci            continue;
744d6c458bSopenharmony_ci        }
754d6c458bSopenharmony_ci        if (i < boolNum) {
764d6c458bSopenharmony_ci            napi_get_boolean(env, false, &val);
774d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
784d6c458bSopenharmony_ci            i++;
794d6c458bSopenharmony_ci        } else {
804d6c458bSopenharmony_ci            napi_create_string_utf8(env, proVec[i + 1].c_str(), proVec[i + 1].size(), &val);
814d6c458bSopenharmony_ci            napi_set_named_property(env, obj, proVec[i].c_str(), val);
824d6c458bSopenharmony_ci            i += 2; // 2 : the length of the value and property
834d6c458bSopenharmony_ci        }
844d6c458bSopenharmony_ci    }
854d6c458bSopenharmony_ci    return obj;
864d6c458bSopenharmony_ci}
874d6c458bSopenharmony_ci
884d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest001
894d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing only declaration items to a js object.
904d6c458bSopenharmony_ci * @tc.type: FUNC
914d6c458bSopenharmony_ci */
924d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest001, testing::ext::TestSize.Level0)
934d6c458bSopenharmony_ci{
944d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
954d6c458bSopenharmony_ci    void* pBuffer = nullptr;
964d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
974d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
984d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
994d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
1004d6c458bSopenharmony_ci    xmlSerializer.SetDeclaration();
1014d6c458bSopenharmony_ci
1024d6c458bSopenharmony_ci    Options op;
1034d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
1044d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
1054d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
1064d6c458bSopenharmony_ci
1074d6c458bSopenharmony_ci    // Do not set start tag '<'
1084d6c458bSopenharmony_ci    napi_value declarationObj = nullptr;
1094d6c458bSopenharmony_ci    napi_value declarationProp = nullptr;
1104d6c458bSopenharmony_ci    napi_value versionVal = nullptr;
1114d6c458bSopenharmony_ci    napi_value encodingVal = nullptr;
1124d6c458bSopenharmony_ci    napi_get_named_property(env, jsObj, op.declaration.c_str(), &declarationObj);
1134d6c458bSopenharmony_ci    napi_get_named_property(env, declarationObj, op.attributes.c_str(), &declarationProp);
1144d6c458bSopenharmony_ci    napi_get_named_property(env, declarationProp, "version", &versionVal);
1154d6c458bSopenharmony_ci    napi_get_named_property(env, declarationProp, "encoding", &encodingVal);
1164d6c458bSopenharmony_ci
1174d6c458bSopenharmony_ci    std::string verisonStr;
1184d6c458bSopenharmony_ci    std::string encodingStr;
1194d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, versionVal, verisonStr);
1204d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, encodingVal, encodingStr);
1214d6c458bSopenharmony_ci    EXPECT_STREQ(verisonStr.c_str(), "1.0");
1224d6c458bSopenharmony_ci    EXPECT_STREQ(encodingStr.c_str(), "utf-8");
1234d6c458bSopenharmony_ci    delete convertXml;
1244d6c458bSopenharmony_ci}
1254d6c458bSopenharmony_ci
1264d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest002
1274d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing an empty element to a js object.
1284d6c458bSopenharmony_ci * @tc.type: FUNC
1294d6c458bSopenharmony_ci */
1304d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest002, testing::ext::TestSize.Level0)
1314d6c458bSopenharmony_ci{
1324d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
1334d6c458bSopenharmony_ci    void* pBuffer = nullptr;
1344d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
1354d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
1364d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
1374d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
1384d6c458bSopenharmony_ci    xmlSerializer.StartElement("note1");
1394d6c458bSopenharmony_ci    xmlSerializer.EndElement();
1404d6c458bSopenharmony_ci
1414d6c458bSopenharmony_ci    Options op;
1424d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
1434d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
1444d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
1454d6c458bSopenharmony_ci
1464d6c458bSopenharmony_ci    napi_value element = nullptr;
1474d6c458bSopenharmony_ci    napi_value elements = nullptr;
1484d6c458bSopenharmony_ci    napi_value nameVal = nullptr;
1494d6c458bSopenharmony_ci    napi_value typeVal = nullptr;
1504d6c458bSopenharmony_ci    napi_get_named_property(env, jsObj, op.elements.c_str(), &elements);
1514d6c458bSopenharmony_ci    napi_get_element(env, elements, 0, &element);
1524d6c458bSopenharmony_ci    napi_get_named_property(env, element, op.name.c_str(), &nameVal);
1534d6c458bSopenharmony_ci    napi_get_named_property(env, element, op.type.c_str(), &typeVal);
1544d6c458bSopenharmony_ci
1554d6c458bSopenharmony_ci    std::string nameStr;
1564d6c458bSopenharmony_ci    std::string typeStr;
1574d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, nameVal, nameStr);
1584d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, typeVal, typeStr);
1594d6c458bSopenharmony_ci    EXPECT_STREQ(nameStr.c_str(), "note1");
1604d6c458bSopenharmony_ci    EXPECT_STREQ(typeStr.c_str(), "element");
1614d6c458bSopenharmony_ci}
1624d6c458bSopenharmony_ci
1634d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest003
1644d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing attributes to a js object.
1654d6c458bSopenharmony_ci * @tc.type: FUNC
1664d6c458bSopenharmony_ci */
1674d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest003, testing::ext::TestSize.Level0)
1684d6c458bSopenharmony_ci{
1694d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
1704d6c458bSopenharmony_ci    void* pBuffer = nullptr;
1714d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
1724d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
1734d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
1744d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
1754d6c458bSopenharmony_ci    xmlSerializer.StartElement("note1");
1764d6c458bSopenharmony_ci    xmlSerializer.SetAttributes("colour", "red");
1774d6c458bSopenharmony_ci    xmlSerializer.SetAttributes("shape", "circle");
1784d6c458bSopenharmony_ci    xmlSerializer.EndElement();
1794d6c458bSopenharmony_ci
1804d6c458bSopenharmony_ci    Options op;
1814d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
1824d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
1834d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
1844d6c458bSopenharmony_ci
1854d6c458bSopenharmony_ci    napi_value elements = nullptr;
1864d6c458bSopenharmony_ci    napi_value element = nullptr;
1874d6c458bSopenharmony_ci    napi_value attributes = nullptr;
1884d6c458bSopenharmony_ci    napi_value colour = nullptr;
1894d6c458bSopenharmony_ci    napi_value shape = nullptr;
1904d6c458bSopenharmony_ci    napi_get_named_property(env, jsObj, op.elements.c_str(), &elements);
1914d6c458bSopenharmony_ci    napi_get_element(env, elements, 0, &element);
1924d6c458bSopenharmony_ci    napi_get_named_property(env, element, op.attributes.c_str(), &attributes);
1934d6c458bSopenharmony_ci    napi_get_named_property(env, attributes, "colour", &colour);
1944d6c458bSopenharmony_ci    napi_get_named_property(env, attributes, "shape", &shape);
1954d6c458bSopenharmony_ci
1964d6c458bSopenharmony_ci    std::string colourStr;
1974d6c458bSopenharmony_ci    std::string shapeStr;
1984d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, colour, colourStr);
1994d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, shape, shapeStr);
2004d6c458bSopenharmony_ci    EXPECT_STREQ(colourStr.c_str(), "red");
2014d6c458bSopenharmony_ci    EXPECT_STREQ(shapeStr.c_str(), "circle");
2024d6c458bSopenharmony_ci}
2034d6c458bSopenharmony_ci
2044d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest004
2054d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing comment to a js object.
2064d6c458bSopenharmony_ci * @tc.type: FUNC
2074d6c458bSopenharmony_ci */
2084d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest004, testing::ext::TestSize.Level0)
2094d6c458bSopenharmony_ci{
2104d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
2114d6c458bSopenharmony_ci    void* pBuffer = nullptr;
2124d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
2134d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
2144d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
2154d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
2164d6c458bSopenharmony_ci    xmlSerializer.SetComment("This is a comment");
2174d6c458bSopenharmony_ci    xmlSerializer.StartElement("note1");
2184d6c458bSopenharmony_ci    xmlSerializer.EndElement();
2194d6c458bSopenharmony_ci
2204d6c458bSopenharmony_ci    Options op;
2214d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
2224d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
2234d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
2244d6c458bSopenharmony_ci
2254d6c458bSopenharmony_ci    napi_value elements = nullptr;
2264d6c458bSopenharmony_ci    napi_value element = nullptr;
2274d6c458bSopenharmony_ci    napi_value commentType = nullptr;
2284d6c458bSopenharmony_ci    napi_value commentText = nullptr;
2294d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, jsObj, op.elements.c_str(), &elements), napi_status::napi_ok);
2304d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_element(env, elements, 0, &element), napi_status::napi_ok);
2314d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.type.c_str(), &commentType), napi_status::napi_ok);
2324d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.comment.c_str(), &commentText), napi_status::napi_ok);
2334d6c458bSopenharmony_ci
2344d6c458bSopenharmony_ci    std::string commentTypeStr;
2354d6c458bSopenharmony_ci    std::string commentTextStr;
2364d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, commentType, commentTypeStr);
2374d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, commentText, commentTextStr);
2384d6c458bSopenharmony_ci    EXPECT_STREQ(commentTypeStr.c_str(), "comment");
2394d6c458bSopenharmony_ci    EXPECT_STREQ(commentTextStr.c_str(), "This is a comment");
2404d6c458bSopenharmony_ci}
2414d6c458bSopenharmony_ci
2424d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest005
2434d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing cdata to a js object.
2444d6c458bSopenharmony_ci * @tc.type: FUNC
2454d6c458bSopenharmony_ci */
2464d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest005, testing::ext::TestSize.Level0)
2474d6c458bSopenharmony_ci{
2484d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
2494d6c458bSopenharmony_ci    void* pBuffer = nullptr;
2504d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
2514d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
2524d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
2534d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
2544d6c458bSopenharmony_ci    xmlSerializer.SetCData("function foo() {}");
2554d6c458bSopenharmony_ci    xmlSerializer.StartElement("note1");
2564d6c458bSopenharmony_ci    xmlSerializer.EndElement();
2574d6c458bSopenharmony_ci
2584d6c458bSopenharmony_ci    Options op;
2594d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
2604d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
2614d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
2624d6c458bSopenharmony_ci
2634d6c458bSopenharmony_ci    napi_value elements = nullptr;
2644d6c458bSopenharmony_ci    napi_value element = nullptr;
2654d6c458bSopenharmony_ci    napi_value cdataType = nullptr;
2664d6c458bSopenharmony_ci    napi_value cdataText = nullptr;
2674d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, jsObj, op.elements.c_str(), &elements), napi_status::napi_ok);
2684d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_element(env, elements, 0, &element), napi_status::napi_ok);
2694d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.type.c_str(), &cdataType), napi_status::napi_ok);
2704d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.cdata.c_str(), &cdataText), napi_status::napi_ok);
2714d6c458bSopenharmony_ci
2724d6c458bSopenharmony_ci    std::string cdataTypeStr;
2734d6c458bSopenharmony_ci    std::string cdataTextStr;
2744d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, cdataType, cdataTypeStr);
2754d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, cdataText, cdataTextStr);
2764d6c458bSopenharmony_ci    EXPECT_STREQ(cdataTypeStr.c_str(), "cdata");
2774d6c458bSopenharmony_ci    EXPECT_STREQ(cdataTextStr.c_str(), "function foo() {}");
2784d6c458bSopenharmony_ci}
2794d6c458bSopenharmony_ci
2804d6c458bSopenharmony_ci/* @tc.name: ConvertXmlTest006
2814d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
2824d6c458bSopenharmony_ci * @tc.type: FUNC
2834d6c458bSopenharmony_ci */
2844d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertXmlTest006, testing::ext::TestSize.Level0)
2854d6c458bSopenharmony_ci{
2864d6c458bSopenharmony_ci    size_t size = 1024; // 1024 : the size is 1024 byte
2874d6c458bSopenharmony_ci    void* pBuffer = nullptr;
2884d6c458bSopenharmony_ci    napi_value arrayBuffer = nullptr;
2894d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
2904d6c458bSopenharmony_ci    napi_create_arraybuffer(env, size, &pBuffer, &arrayBuffer);
2914d6c458bSopenharmony_ci    OHOS::xml::XmlSerializer xmlSerializer(reinterpret_cast<char*>(pBuffer), size, "utf-8");
2924d6c458bSopenharmony_ci    xmlSerializer.SetDocType("root SYSTEM \"http://www.test.org/test.dtd\"");
2934d6c458bSopenharmony_ci    xmlSerializer.StartElement("note1");
2944d6c458bSopenharmony_ci    xmlSerializer.EndElement();
2954d6c458bSopenharmony_ci
2964d6c458bSopenharmony_ci    Options op;
2974d6c458bSopenharmony_ci    ConvertXml *convertXml = new ConvertXml(env);
2984d6c458bSopenharmony_ci    std::string xmlStr(reinterpret_cast<char*>(pBuffer));
2994d6c458bSopenharmony_ci    napi_value jsObj = convertXml->Convert(env, xmlStr);
3004d6c458bSopenharmony_ci
3014d6c458bSopenharmony_ci    napi_value elements = nullptr;
3024d6c458bSopenharmony_ci    napi_value element = nullptr;
3034d6c458bSopenharmony_ci    napi_value docType = nullptr;
3044d6c458bSopenharmony_ci    napi_value docText = nullptr;
3054d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, jsObj, op.elements.c_str(), &elements), napi_status::napi_ok);
3064d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_element(env, elements, 0, &element), napi_status::napi_ok);
3074d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.type.c_str(), &docType), napi_status::napi_ok);
3084d6c458bSopenharmony_ci    EXPECT_EQ(napi_get_named_property(env, element, op.doctype.c_str(), &docText), napi_status::napi_ok);
3094d6c458bSopenharmony_ci
3104d6c458bSopenharmony_ci    std::string docTypeStr;
3114d6c458bSopenharmony_ci    std::string docStr;
3124d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, docType, docTypeStr);
3134d6c458bSopenharmony_ci    convertXml->DealNapiStrValue(env, docText, docStr);
3144d6c458bSopenharmony_ci    EXPECT_STREQ(docTypeStr.c_str(), "doctype");
3154d6c458bSopenharmony_ci    EXPECT_STREQ(docStr.c_str(), "root");
3164d6c458bSopenharmony_ci}
3174d6c458bSopenharmony_ci
3184d6c458bSopenharmony_ci/* @tc.name: ConstructorTest001
3194d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
3204d6c458bSopenharmony_ci * @tc.type: FUNC
3214d6c458bSopenharmony_ci */
3224d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConstructorTest001, testing::ext::TestSize.Level0)
3234d6c458bSopenharmony_ci{
3244d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
3254d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
3264d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
3274d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
3284d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
3294d6c458bSopenharmony_ci    napi_valuetype valuetype = napi_undefined;
3304d6c458bSopenharmony_ci
3314d6c458bSopenharmony_ci    napi_typeof(env, convertXml.Convert(env, strXml), &valuetype);
3324d6c458bSopenharmony_ci    bool isObj = valuetype == napi_valuetype::napi_object;
3334d6c458bSopenharmony_ci    ASSERT_TRUE(isObj);
3344d6c458bSopenharmony_ci}
3354d6c458bSopenharmony_ci
3364d6c458bSopenharmony_ci/* @tc.name: ConstructorTest002
3374d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
3384d6c458bSopenharmony_ci * @tc.type: FUNC
3394d6c458bSopenharmony_ci */
3404d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConstructorTest002, testing::ext::TestSize.Level0)
3414d6c458bSopenharmony_ci{
3424d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
3434d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
3444d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
3454d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
3464d6c458bSopenharmony_ci    napi_value object = nullptr;
3474d6c458bSopenharmony_ci    const char* utf8Name = "_declaration";
3484d6c458bSopenharmony_ci    napi_create_object(env, &object);
3494d6c458bSopenharmony_ci    bool isHas = false;
3504d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
3514d6c458bSopenharmony_ci
3524d6c458bSopenharmony_ci    object = convertXml.Convert(env, strXml);
3534d6c458bSopenharmony_ci    napi_has_named_property(env, object, utf8Name, &isHas);
3544d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
3554d6c458bSopenharmony_ci}
3564d6c458bSopenharmony_ci
3574d6c458bSopenharmony_ci/* @tc.name: ConstructorTest003
3584d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
3594d6c458bSopenharmony_ci * @tc.type: FUNC
3604d6c458bSopenharmony_ci */
3614d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConstructorTest003, testing::ext::TestSize.Level0)
3624d6c458bSopenharmony_ci{
3634d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
3644d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
3654d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
3664d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
3674d6c458bSopenharmony_ci    napi_value object = nullptr;
3684d6c458bSopenharmony_ci    const char* utf8Name = "_declaration";
3694d6c458bSopenharmony_ci    napi_create_object(env, &object);
3704d6c458bSopenharmony_ci    bool isHas = false;
3714d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
3724d6c458bSopenharmony_ci
3734d6c458bSopenharmony_ci    object = convertXml.Convert(env, strXml);
3744d6c458bSopenharmony_ci    napi_has_named_property(env, object, utf8Name, &isHas);
3754d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
3764d6c458bSopenharmony_ci}
3774d6c458bSopenharmony_ci
3784d6c458bSopenharmony_ci/* @tc.name: ConvertTest001
3794d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
3804d6c458bSopenharmony_ci * @tc.type: FUNC
3814d6c458bSopenharmony_ci */
3824d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest001, testing::ext::TestSize.Level0)
3834d6c458bSopenharmony_ci{
3844d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
3854d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
3864d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?><note importance=\"high\" logged=\"true\">    ";
3874d6c458bSopenharmony_ci    std::string str2 = "<title>Happy</title>    <todo>Work</todo>    <todo>Play</todo></note>";
3884d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
3894d6c458bSopenharmony_ci    napi_valuetype valuetype = napi_undefined;
3904d6c458bSopenharmony_ci
3914d6c458bSopenharmony_ci    napi_typeof(env, convertXml.Convert(env, strXml), &valuetype);
3924d6c458bSopenharmony_ci    bool isObj = valuetype == napi_valuetype::napi_object;
3934d6c458bSopenharmony_ci    ASSERT_TRUE(isObj);
3944d6c458bSopenharmony_ci}
3954d6c458bSopenharmony_ci
3964d6c458bSopenharmony_ci/* @tc.name: ConvertTest002
3974d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
3984d6c458bSopenharmony_ci * @tc.type: FUNC
3994d6c458bSopenharmony_ci */
4004d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest002, testing::ext::TestSize.Level0)
4014d6c458bSopenharmony_ci{
4024d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
4034d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?><note importance=\"high\" logged=\"true\">    ";
4044d6c458bSopenharmony_ci    std::string str2 = "<title>Happy</title>    <todo>Work</todo>    <todo>Play</todo></note>";
4054d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
4064d6c458bSopenharmony_ci    napi_value object = nullptr;
4074d6c458bSopenharmony_ci    const char* utf8Name = "_declaration";
4084d6c458bSopenharmony_ci    napi_create_object(env, &object);
4094d6c458bSopenharmony_ci    bool isHas = false;
4104d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
4114d6c458bSopenharmony_ci
4124d6c458bSopenharmony_ci    object = convertXml.Convert(env, strXml);
4134d6c458bSopenharmony_ci    napi_has_named_property(env, object, utf8Name, &isHas);
4144d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
4154d6c458bSopenharmony_ci}
4164d6c458bSopenharmony_ci
4174d6c458bSopenharmony_ci/* @tc.name: ConvertTest003
4184d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
4194d6c458bSopenharmony_ci * @tc.type: FUNC
4204d6c458bSopenharmony_ci */
4214d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest003, testing::ext::TestSize.Level0)
4224d6c458bSopenharmony_ci{
4234d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
4244d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?><note importance=\"high\" logged=\"true\">    ";
4254d6c458bSopenharmony_ci    std::string str2 = "<title>Happy</title>    <todo>Work</todo>    <todo>Play</todo></note>";
4264d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
4274d6c458bSopenharmony_ci    napi_value object = nullptr;
4284d6c458bSopenharmony_ci    const char* utf8Name = "_elements";
4294d6c458bSopenharmony_ci    napi_create_object(env, &object);
4304d6c458bSopenharmony_ci    bool isHas = false;
4314d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
4324d6c458bSopenharmony_ci
4334d6c458bSopenharmony_ci    object = convertXml.Convert(env, strXml);
4344d6c458bSopenharmony_ci    napi_has_named_property(env, object, utf8Name, &isHas);
4354d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
4364d6c458bSopenharmony_ci}
4374d6c458bSopenharmony_ci
4384d6c458bSopenharmony_ci/* @tc.name: ConvertTest004
4394d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
4404d6c458bSopenharmony_ci * @tc.type: FUNC
4414d6c458bSopenharmony_ci */
4424d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest004, testing::ext::TestSize.Level0)
4434d6c458bSopenharmony_ci{
4444d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
4454d6c458bSopenharmony_ci    napi_value obj = nullptr;
4464d6c458bSopenharmony_ci    napi_create_object(env, &obj);
4474d6c458bSopenharmony_ci
4484d6c458bSopenharmony_ci    std::vector<std::string> proVec = {"trim", "ignoreDeclaration", "ignoreInstruction", "ignoreAttributes",
4494d6c458bSopenharmony_ci        "ignoreComment", "ignoreCDATA", "ignoreDoctype", "ignoreText", "declarationKey", "_declaration",
4504d6c458bSopenharmony_ci        "instructionKey", "_instruction", "attributesKey", "_attributes", "textKey", "_text", "cdataKey", "_cdata",
4514d6c458bSopenharmony_ci        "doctypeKey", "_doctype", "commentKey", "_comment", "parentKey", "_parent", "typeKey", "_type",
4524d6c458bSopenharmony_ci        "nameKey", "_name", "elementsKey", "_elements"};
4534d6c458bSopenharmony_ci    obj = setPropertyForTrim(env, obj, proVec);
4544d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
4554d6c458bSopenharmony_ci    convertXml.DealOptions(env, obj);
4564d6c458bSopenharmony_ci    bool isHas = false;
4574d6c458bSopenharmony_ci    napi_has_named_property(env, obj, "textKey", &isHas);
4584d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
4594d6c458bSopenharmony_ci
4604d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
4614d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
4624d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
4634d6c458bSopenharmony_ci    napi_valuetype valuetype = napi_undefined;
4644d6c458bSopenharmony_ci
4654d6c458bSopenharmony_ci    napi_typeof(env, convertXml.Convert(env, strXml), &valuetype);
4664d6c458bSopenharmony_ci    bool isObj = valuetype == napi_valuetype::napi_object;
4674d6c458bSopenharmony_ci    ASSERT_TRUE(isObj);
4684d6c458bSopenharmony_ci}
4694d6c458bSopenharmony_ci
4704d6c458bSopenharmony_ci/* @tc.name: ConvertTest005
4714d6c458bSopenharmony_ci * @tc.desc: Convert the xml object and set spaces info.
4724d6c458bSopenharmony_ci * @tc.type: FUNC
4734d6c458bSopenharmony_ci */
4744d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest005, testing::ext::TestSize.Level0)
4754d6c458bSopenharmony_ci{
4764d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
4774d6c458bSopenharmony_ci    napi_value obj = nullptr;
4784d6c458bSopenharmony_ci    napi_create_object(env, &obj);
4794d6c458bSopenharmony_ci
4804d6c458bSopenharmony_ci    std::vector<std::string> proVec = {"trim", "spaces", "ignoreInstruction", "ignoreAttributes",
4814d6c458bSopenharmony_ci        "ignoreComment", "ignoreCDATA", "ignoreDoctype", "ignoreText", "declarationKey", "_declaration",
4824d6c458bSopenharmony_ci        "instructionKey", "_instruction", "attributesKey", "_attributes", "textKey", "_text", "cdataKey", "_cdata",
4834d6c458bSopenharmony_ci        "doctypeKey", "_doctype", "commentKey", "_comment", "parentKey", "_parent", "typeKey", "_type",
4844d6c458bSopenharmony_ci        "nameKey", "_name", "elementsKey", "_elements"};
4854d6c458bSopenharmony_ci    obj = setPropertyForTrim(env, obj, proVec);
4864d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
4874d6c458bSopenharmony_ci    convertXml.DealOptions(env, obj);
4884d6c458bSopenharmony_ci    bool isHas = false;
4894d6c458bSopenharmony_ci    napi_has_named_property(env, obj, "textKey", &isHas);
4904d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
4914d6c458bSopenharmony_ci
4924d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
4934d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
4944d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
4954d6c458bSopenharmony_ci    napi_valuetype valuetype = napi_undefined;
4964d6c458bSopenharmony_ci
4974d6c458bSopenharmony_ci    napi_typeof(env, convertXml.Convert(env, strXml), &valuetype);
4984d6c458bSopenharmony_ci    bool isObj = valuetype == napi_valuetype::napi_object;
4994d6c458bSopenharmony_ci    ASSERT_TRUE(isObj);
5004d6c458bSopenharmony_ci}
5014d6c458bSopenharmony_ci
5024d6c458bSopenharmony_ci/* @tc.name: ConvertTest006
5034d6c458bSopenharmony_ci * @tc.desc: Convert the xml object and set spaces info.
5044d6c458bSopenharmony_ci * @tc.type: FUNC
5054d6c458bSopenharmony_ci */
5064d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ConvertTest006, testing::ext::TestSize.Level0)
5074d6c458bSopenharmony_ci{
5084d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
5094d6c458bSopenharmony_ci    napi_value obj = nullptr;
5104d6c458bSopenharmony_ci    napi_create_object(env, &obj);
5114d6c458bSopenharmony_ci
5124d6c458bSopenharmony_ci    std::vector<std::string> proVec = {"trim", "ignoreDeclaration", "spaces", "compact",
5134d6c458bSopenharmony_ci        "ignoreComment", "ignoreCDATA", "ignoreDoctype", "ignoreText", "declarationKey", "_declaration",
5144d6c458bSopenharmony_ci        "instructionKey", "_instruction", "attributesKey", "_attributes", "textKey", "_text", "cdataKey", "_cdata",
5154d6c458bSopenharmony_ci        "doctypeKey", "_doctype", "commentKey", "_comment", "parentKey", "_parent", "typeKey", "_type",
5164d6c458bSopenharmony_ci        "nameKey", "_name", "elementsKey", "_elements"};
5174d6c458bSopenharmony_ci    obj = setPropertyForTrim(env, obj, proVec);
5184d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
5194d6c458bSopenharmony_ci    convertXml.DealOptions(env, obj);
5204d6c458bSopenharmony_ci    bool isHas = false;
5214d6c458bSopenharmony_ci    napi_has_named_property(env, obj, "textKey", &isHas);
5224d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
5234d6c458bSopenharmony_ci
5244d6c458bSopenharmony_ci    std::string str1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
5254d6c458bSopenharmony_ci    std::string str2 = "<note importance=\"high\" logged=\"true\"><todo>Play</todo></note>";
5264d6c458bSopenharmony_ci    std::string strXml = str1 + str2;
5274d6c458bSopenharmony_ci    napi_valuetype valuetype = napi_undefined;
5284d6c458bSopenharmony_ci
5294d6c458bSopenharmony_ci    napi_typeof(env, convertXml.Convert(env, strXml), &valuetype);
5304d6c458bSopenharmony_ci    bool isObj = valuetype == napi_valuetype::napi_object;
5314d6c458bSopenharmony_ci    ASSERT_TRUE(isObj);
5324d6c458bSopenharmony_ci}
5334d6c458bSopenharmony_ci
5344d6c458bSopenharmony_ci/* @tc.name: DealNapiStrValueTest001
5354d6c458bSopenharmony_ci * @tc.desc: Deal napi string value.
5364d6c458bSopenharmony_ci * @tc.type: FUNC
5374d6c458bSopenharmony_ci */
5384d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealNapiStrValueTest001, testing::ext::TestSize.Level0)
5394d6c458bSopenharmony_ci{
5404d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
5414d6c458bSopenharmony_ci    napi_value obj = nullptr;
5424d6c458bSopenharmony_ci    napi_create_object(env, &obj);
5434d6c458bSopenharmony_ci    std::string str = "";
5444d6c458bSopenharmony_ci
5454d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
5464d6c458bSopenharmony_ci    napi_status rel = convertXml.DealNapiStrValue(env, nullptr, str);
5474d6c458bSopenharmony_ci
5484d6c458bSopenharmony_ci    ASSERT_FALSE(rel == napi_ok);
5494d6c458bSopenharmony_ci}
5504d6c458bSopenharmony_ci
5514d6c458bSopenharmony_ci/* @tc.name: DealIgnoreTest001
5524d6c458bSopenharmony_ci * @tc.desc: Deal napi string value.
5534d6c458bSopenharmony_ci * @tc.type: FUNC
5544d6c458bSopenharmony_ci */
5554d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealIgnoreTest001, testing::ext::TestSize.Level0)
5564d6c458bSopenharmony_ci{
5574d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
5584d6c458bSopenharmony_ci    napi_value obj = nullptr;
5594d6c458bSopenharmony_ci    napi_create_object(env, &obj);
5604d6c458bSopenharmony_ci    std::string str = "";
5614d6c458bSopenharmony_ci
5624d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
5634d6c458bSopenharmony_ci    napi_status rel = convertXml.DealNapiStrValue(env, nullptr, str);
5644d6c458bSopenharmony_ci
5654d6c458bSopenharmony_ci    ASSERT_FALSE(rel == napi_ok);
5664d6c458bSopenharmony_ci}
5674d6c458bSopenharmony_ci
5684d6c458bSopenharmony_ci/* @tc.name: DealOptionsTest001
5694d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
5704d6c458bSopenharmony_ci * @tc.type: FUNC
5714d6c458bSopenharmony_ci */
5724d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealOptionsTest001, testing::ext::TestSize.Level0)
5734d6c458bSopenharmony_ci{
5744d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
5754d6c458bSopenharmony_ci    napi_value obj = nullptr;
5764d6c458bSopenharmony_ci    napi_create_object(env, &obj);
5774d6c458bSopenharmony_ci
5784d6c458bSopenharmony_ci    std::vector<std::string> proVec = {"trim", "ignoreDeclaration", "ignoreInstruction", "ignoreAttributes",
5794d6c458bSopenharmony_ci        "ignoreComment", "ignoreCDATA", "ignoreDoctype", "ignoreText", "declarationKey", "_declaration",
5804d6c458bSopenharmony_ci        "instructionKey", "_instruction", "attributesKey", "_attributes", "textKey", "_text", "cdataKey", "_cdata",
5814d6c458bSopenharmony_ci        "doctypeKey", "_doctype", "commentKey", "_comment", "parentKey", "_parent", "typeKey", "_type",
5824d6c458bSopenharmony_ci        "nameKey", "_name", "elementsKey", "_elements"};
5834d6c458bSopenharmony_ci
5844d6c458bSopenharmony_ci    obj = setProperty(env, obj, proVec);
5854d6c458bSopenharmony_ci    OHOS::Xml::ConvertXml convertXml = OHOS::Xml::ConvertXml(env);
5864d6c458bSopenharmony_ci    convertXml.DealOptions(env, obj);
5874d6c458bSopenharmony_ci    bool isHas = false;
5884d6c458bSopenharmony_ci    napi_has_named_property(env, obj, "textKey", &isHas);
5894d6c458bSopenharmony_ci    ASSERT_TRUE(isHas);
5904d6c458bSopenharmony_ci}
5914d6c458bSopenharmony_ci
5924d6c458bSopenharmony_ci/* @tc.name: NativeModuleConvertXmlTest001
5934d6c458bSopenharmony_ci * @tc.desc: Convert the xml object containing doctype to a js object.
5944d6c458bSopenharmony_ci * @tc.type: FUNC
5954d6c458bSopenharmony_ci */
5964d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, NativeModuleConvertXmlTest001, testing::ext::TestSize.Level1)
5974d6c458bSopenharmony_ci{
5984d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
5994d6c458bSopenharmony_ci    napi_value exports = nullptr;
6004d6c458bSopenharmony_ci    napi_create_object(env, &exports);
6014d6c458bSopenharmony_ci    OHOS::Xml::ConvertXmlInit(env, exports);
6024d6c458bSopenharmony_ci    napi_value convertXmlClass = nullptr;
6034d6c458bSopenharmony_ci    napi_get_named_property(env, exports, "ConvertXml", &convertXmlClass);
6044d6c458bSopenharmony_ci
6054d6c458bSopenharmony_ci    napi_value instance = nullptr;
6064d6c458bSopenharmony_ci    napi_new_instance(env, convertXmlClass, 0, nullptr, &instance);
6074d6c458bSopenharmony_ci
6084d6c458bSopenharmony_ci    napi_value args[2]; // 2: number of arguments
6094d6c458bSopenharmony_ci    std::string firXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><note importance=\"high\" logged=\"true\">";
6104d6c458bSopenharmony_ci    std::string secXml = "<title>Happy</title></note>";
6114d6c458bSopenharmony_ci    std::string strXml = firXml + secXml;
6124d6c458bSopenharmony_ci    napi_create_string_utf8(env, strXml.c_str(), strXml.size(), &args[0]);
6134d6c458bSopenharmony_ci
6144d6c458bSopenharmony_ci    napi_value obj = nullptr;
6154d6c458bSopenharmony_ci    napi_create_object(env, &obj);
6164d6c458bSopenharmony_ci    std::vector<std::string> proVec = {"trim", "ignoreDeclaration", "ignoreInstruction", "ignoreAttributes",
6174d6c458bSopenharmony_ci        "ignoreComment", "ignoreCDATA", "ignoreDoctype", "ignoreText", "declarationKey", "_declaration",
6184d6c458bSopenharmony_ci        "instructionKey", "_instruction", "attributesKey", "_attributes", "textKey", "_text", "cdataKey", "_cdata",
6194d6c458bSopenharmony_ci        "doctypeKey", "_doctype", "commentKey", "_comment", "parentKey", "_parent", "typeKey", "_type",
6204d6c458bSopenharmony_ci        "nameKey", "_name", "elementsKey", "_elements"};
6214d6c458bSopenharmony_ci    args[1] = setProperty(env, obj, proVec);
6224d6c458bSopenharmony_ci
6234d6c458bSopenharmony_ci    napi_value funcResultValue = nullptr;
6244d6c458bSopenharmony_ci    napi_value testFunc = nullptr;
6254d6c458bSopenharmony_ci    napi_get_named_property(env, instance, "convert", &testFunc);
6264d6c458bSopenharmony_ci    napi_call_function(env, instance, testFunc, 2, args, &funcResultValue); // 2: number of arguments
6274d6c458bSopenharmony_ci    ASSERT_NE(funcResultValue, nullptr);
6284d6c458bSopenharmony_ci}
6294d6c458bSopenharmony_ci
6304d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, TrimTest001, testing::ext::TestSize.Level1)
6314d6c458bSopenharmony_ci{
6324d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
6334d6c458bSopenharmony_ci    CxmlTest::Trim(env, "");
6344d6c458bSopenharmony_ci    std::string res = CxmlTest::Trim(env, " #e ");
6354d6c458bSopenharmony_ci    ASSERT_STREQ(res.c_str(), "#e");
6364d6c458bSopenharmony_ci}
6374d6c458bSopenharmony_ci
6384d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, GetNodeTypeTest001, testing::ext::TestSize.Level1)
6394d6c458bSopenharmony_ci{
6404d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
6414d6c458bSopenharmony_ci    xmlElementType enumType = XML_ATTRIBUTE_NODE;
6424d6c458bSopenharmony_ci    std::string res = CxmlTest::GetNodeType(env, enumType);
6434d6c458bSopenharmony_ci    ASSERT_STREQ(res.c_str(), "attribute");
6444d6c458bSopenharmony_ci    enumType = XML_ENTITY_REF_NODE;
6454d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6464d6c458bSopenharmony_ci    enumType = XML_ENTITY_NODE;
6474d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6484d6c458bSopenharmony_ci    enumType = XML_PI_NODE;
6494d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6504d6c458bSopenharmony_ci    enumType = XML_DOCUMENT_NODE;
6514d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6524d6c458bSopenharmony_ci    enumType = XML_DOCUMENT_TYPE_NODE;
6534d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6544d6c458bSopenharmony_ci    enumType = XML_DOCUMENT_FRAG_NODE;
6554d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6564d6c458bSopenharmony_ci    enumType = XML_DOCB_DOCUMENT_NODE;
6574d6c458bSopenharmony_ci    CxmlTest::GetNodeType(env, enumType);
6584d6c458bSopenharmony_ci    enumType = XML_XINCLUDE_END;
6594d6c458bSopenharmony_ci    res = CxmlTest::GetNodeType(env, enumType);
6604d6c458bSopenharmony_ci    ASSERT_STREQ(res.c_str(), "");
6614d6c458bSopenharmony_ci}
6624d6c458bSopenharmony_ci
6634d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, GetPrevNodeListTest001, testing::ext::TestSize.Level1)
6644d6c458bSopenharmony_ci{
6654d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
6664d6c458bSopenharmony_ci    xmlNodePtr curNode = new xmlNode;
6674d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
6684d6c458bSopenharmony_ci    curNode->prev = curNode1;
6694d6c458bSopenharmony_ci    curNode1->prev = nullptr;
6704d6c458bSopenharmony_ci    curNode1->type = XML_PI_NODE;
6714d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
6724d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>("Hello world!"));
6734d6c458bSopenharmony_ci    CxmlTest::GetPrevNodeList(env, curNode);
6744d6c458bSopenharmony_ci    ASSERT_TRUE(curNode != nullptr);
6754d6c458bSopenharmony_ci    delete curNode;
6764d6c458bSopenharmony_ci    delete curNode1;
6774d6c458bSopenharmony_ci}
6784d6c458bSopenharmony_ci
6794d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, SetPrevInfoTest001, testing::ext::TestSize.Level1)
6804d6c458bSopenharmony_ci{
6814d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
6824d6c458bSopenharmony_ci    xmlNodePtr curNode = new xmlNode;
6834d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
6844d6c458bSopenharmony_ci    curNode->prev = curNode1;
6854d6c458bSopenharmony_ci    curNode1->prev = nullptr;
6864d6c458bSopenharmony_ci    curNode1->type = XML_PI_NODE;
6874d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
6884d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>("Hello world!"));
6894d6c458bSopenharmony_ci    CxmlTest::GetAnDSetPrevNodeList(env, curNode);
6904d6c458bSopenharmony_ci    ASSERT_TRUE(curNode != nullptr);
6914d6c458bSopenharmony_ci    delete curNode;
6924d6c458bSopenharmony_ci    delete curNode1;
6934d6c458bSopenharmony_ci}
6944d6c458bSopenharmony_ci
6954d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, SetXmlElementTypeTest001, testing::ext::TestSize.Level1)
6964d6c458bSopenharmony_ci{
6974d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
6984d6c458bSopenharmony_ci    napi_value elementsObject = nullptr;
6994d6c458bSopenharmony_ci    napi_create_object(env, &elementsObject);
7004d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
7014d6c458bSopenharmony_ci    curNode1->type = XML_PI_NODE;
7024d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
7034d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>("Hello world!"));
7044d6c458bSopenharmony_ci    bool flag = false;
7054d6c458bSopenharmony_ci    CxmlTest::SetXmlElementType(env, curNode1, elementsObject, flag);
7064d6c458bSopenharmony_ci    flag = false;
7074d6c458bSopenharmony_ci    curNode1->type = XML_COMMENT_NODE;
7084d6c458bSopenharmony_ci    CxmlTest::SetXmlElementType(env, curNode1, elementsObject, flag);
7094d6c458bSopenharmony_ci    delete curNode1;
7104d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
7114d6c458bSopenharmony_ci}
7124d6c458bSopenharmony_ci
7134d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, SetNodeInfoTest001, testing::ext::TestSize.Level1)
7144d6c458bSopenharmony_ci{
7154d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7164d6c458bSopenharmony_ci    napi_value elementsObject = nullptr;
7174d6c458bSopenharmony_ci    napi_create_object(env, &elementsObject);
7184d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
7194d6c458bSopenharmony_ci    curNode1->type = XML_PI_NODE;
7204d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
7214d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>("Hello world!"));
7224d6c458bSopenharmony_ci    bool flag = true;
7234d6c458bSopenharmony_ci    CxmlTest::SetNodeInfo(env, curNode1, elementsObject);
7244d6c458bSopenharmony_ci    delete curNode1;
7254d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
7264d6c458bSopenharmony_ci}
7274d6c458bSopenharmony_ci
7284d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealSpacesTest001, testing::ext::TestSize.Level1)
7294d6c458bSopenharmony_ci{
7304d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7314d6c458bSopenharmony_ci    napi_value napiObj = nullptr;
7324d6c458bSopenharmony_ci    napi_create_object(env, &napiObj);
7334d6c458bSopenharmony_ci    napi_value spacesValue;
7344d6c458bSopenharmony_ci    napi_create_string_utf8(env, "hello world", NAPI_AUTO_LENGTH, &spacesValue);
7354d6c458bSopenharmony_ci    napi_set_named_property(env, napiObj, "spaces", spacesValue);
7364d6c458bSopenharmony_ci    bool flag = true;
7374d6c458bSopenharmony_ci    CxmlTest::DealSpaces(env, napiObj);
7384d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
7394d6c458bSopenharmony_ci}
7404d6c458bSopenharmony_ci
7414d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealSpacesTest002, testing::ext::TestSize.Level1)
7424d6c458bSopenharmony_ci{
7434d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7444d6c458bSopenharmony_ci    napi_value napiObj = nullptr;
7454d6c458bSopenharmony_ci    napi_create_object(env, &napiObj);
7464d6c458bSopenharmony_ci    napi_value spacesValue;
7474d6c458bSopenharmony_ci    napi_create_int32(env, 123, &spacesValue); // 123: number of test number
7484d6c458bSopenharmony_ci    napi_set_named_property(env, napiObj, "spaces", spacesValue);
7494d6c458bSopenharmony_ci    bool flag = true;
7504d6c458bSopenharmony_ci    CxmlTest::DealSpaces(env, napiObj);
7514d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
7524d6c458bSopenharmony_ci}
7534d6c458bSopenharmony_ci
7544d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, SetDefaultKeyTest001, testing::ext::TestSize.Level1)
7554d6c458bSopenharmony_ci{
7564d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7574d6c458bSopenharmony_ci    size_t i = 15; // 15: number of default number
7584d6c458bSopenharmony_ci    std::string key = "hello";
7594d6c458bSopenharmony_ci    CxmlTest::SetDefaultKey(env, i, key);
7604d6c458bSopenharmony_ci    ASSERT_STREQ(key.c_str(), "hello");
7614d6c458bSopenharmony_ci}
7624d6c458bSopenharmony_ci
7634d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealSingleLineTest001, testing::ext::TestSize.Level1)
7644d6c458bSopenharmony_ci{
7654d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7664d6c458bSopenharmony_ci    std::string key = "xmlsss<zyyzyy>ssa";
7674d6c458bSopenharmony_ci    napi_value napiObj = nullptr;
7684d6c458bSopenharmony_ci    napi_create_object(env, &napiObj);
7694d6c458bSopenharmony_ci    CxmlTest::DealSingleLine(env, key, napiObj);
7704d6c458bSopenharmony_ci    ASSERT_STREQ(key.c_str(), "<node>xmlsss<zyyzyy>ssassa</node>");
7714d6c458bSopenharmony_ci}
7724d6c458bSopenharmony_ci
7734d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealSingleLineTest002, testing::ext::TestSize.Level1)
7744d6c458bSopenharmony_ci{
7754d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7764d6c458bSopenharmony_ci    std::string key = " xmlsss<zyyzyy>ssa";
7774d6c458bSopenharmony_ci    napi_value napiObj = nullptr;
7784d6c458bSopenharmony_ci    napi_create_object(env, &napiObj);
7794d6c458bSopenharmony_ci    CxmlTest::DealSingleLine(env, key, napiObj);
7804d6c458bSopenharmony_ci    ASSERT_STREQ(key.c_str(), "<node> xmlsss<zyyzyy>ssassa</node>");
7814d6c458bSopenharmony_ci}
7824d6c458bSopenharmony_ci
7834d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealComplexTest001, testing::ext::TestSize.Level1)
7844d6c458bSopenharmony_ci{
7854d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7864d6c458bSopenharmony_ci    std::string key = "xmlsss<!DOCTYPE>ssa";
7874d6c458bSopenharmony_ci    napi_value napiObj = nullptr;
7884d6c458bSopenharmony_ci    napi_create_object(env, &napiObj);
7894d6c458bSopenharmony_ci    CxmlTest::DealComplex(env, key, napiObj);
7904d6c458bSopenharmony_ci    ASSERT_STREQ(key.c_str(), "xmlsss<!DOCTYPE>ssa<node></node>");
7914d6c458bSopenharmony_ci}
7924d6c458bSopenharmony_ci
7934d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, ReplaceTest001, testing::ext::TestSize.Level1)
7944d6c458bSopenharmony_ci{
7954d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
7964d6c458bSopenharmony_ci    std::string str = "xmlsss<!DOCTYPE>ssa";
7974d6c458bSopenharmony_ci    std::string src = "sss";
7984d6c458bSopenharmony_ci    std::string dst = "zyy";
7994d6c458bSopenharmony_ci    CxmlTest::Replace(env, str, src, dst);
8004d6c458bSopenharmony_ci    ASSERT_STREQ(str.c_str(), "xmlzyy<!DOCTYPE>ssa");
8014d6c458bSopenharmony_ci}
8024d6c458bSopenharmony_ci
8034d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealCDataInfo001, testing::ext::TestSize.Level1)
8044d6c458bSopenharmony_ci{
8054d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
8064d6c458bSopenharmony_ci    bool flag = true;
8074d6c458bSopenharmony_ci    xmlNodePtr curNode = new xmlNode;
8084d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
8094d6c458bSopenharmony_ci    xmlNodePtr curNode2 = new xmlNode;
8104d6c458bSopenharmony_ci    curNode->next = curNode1;
8114d6c458bSopenharmony_ci    curNode->type = XML_CDATA_SECTION_NODE;
8124d6c458bSopenharmony_ci    curNode1->type = XML_TEXT_NODE;
8134d6c458bSopenharmony_ci    curNode1->next = curNode2;
8144d6c458bSopenharmony_ci    curNode2->type = XML_CDATA_SECTION_NODE;
8154d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
8164d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>("Hello world!"));
8174d6c458bSopenharmony_ci    CxmlTest::DealCDataInfo(env, flag, curNode);
8184d6c458bSopenharmony_ci    delete curNode2;
8194d6c458bSopenharmony_ci    delete curNode1;
8204d6c458bSopenharmony_ci    delete curNode;
8214d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
8224d6c458bSopenharmony_ci}
8234d6c458bSopenharmony_ci
8244d6c458bSopenharmony_ciHWTEST_F(NativeEngineTest, DealCDataInfo002, testing::ext::TestSize.Level1)
8254d6c458bSopenharmony_ci{
8264d6c458bSopenharmony_ci    napi_env env = (napi_env)engine_;
8274d6c458bSopenharmony_ci    bool flag = true;
8284d6c458bSopenharmony_ci    xmlNodePtr curNode = new xmlNode;
8294d6c458bSopenharmony_ci    xmlNodePtr curNode1 = new xmlNode;
8304d6c458bSopenharmony_ci    xmlNodePtr curNode2 = new xmlNode;
8314d6c458bSopenharmony_ci    curNode->next = curNode1;
8324d6c458bSopenharmony_ci    curNode->type = XML_CDATA_SECTION_NODE;
8334d6c458bSopenharmony_ci    curNode1->type = XML_TEXT_NODE;
8344d6c458bSopenharmony_ci    curNode1->next = curNode2;
8354d6c458bSopenharmony_ci    curNode2->type = XML_CDATA_SECTION_NODE;
8364d6c458bSopenharmony_ci
8374d6c458bSopenharmony_ci    curNode1->name =  reinterpret_cast<const xmlChar *>("Hello world!");
8384d6c458bSopenharmony_ci    curNode1->content = const_cast<xmlChar *>(reinterpret_cast<const xmlChar *>(" \t\t\t\t\t"));
8394d6c458bSopenharmony_ci    CxmlTest::DealCDataInfo(env, flag, curNode);
8404d6c458bSopenharmony_ci    ASSERT_TRUE(flag);
8414d6c458bSopenharmony_ci}