17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci#include <string>
167c804472Sopenharmony_ci#include <fstream>
177c804472Sopenharmony_ci#include "gtest/gtest.h"
187c804472Sopenharmony_ci#include "JsonReader.h"
197c804472Sopenharmony_ci
207c804472Sopenharmony_cinamespace {
217c804472Sopenharmony_ci    std::string g_name = "jin";
227c804472Sopenharmony_ci    bool g_isChild = true;
237c804472Sopenharmony_ci    int32_t g_age = 13;
247c804472Sopenharmony_ci    uint32_t g_code1 = 214748;
257c804472Sopenharmony_ci    int64_t g_code2 = 3333333333;
267c804472Sopenharmony_ci    double g_height = 165.3;
277c804472Sopenharmony_ci    std::string g_schoolName = "abc";
287c804472Sopenharmony_ci    std::string g_schoolAddr = "cba";
297c804472Sopenharmony_ci    std::string g_newName = "li";
307c804472Sopenharmony_ci    bool g_newIsChild = false;
317c804472Sopenharmony_ci    int32_t g_newAge = 26;
327c804472Sopenharmony_ci    uint32_t g_newCode1 = 2147489;
337c804472Sopenharmony_ci    int64_t g_newCode2 = 3333333339;
347c804472Sopenharmony_ci    double g_newHeight = 185.3;
357c804472Sopenharmony_ci    std::string g_obj = R"({"name":"jin","isChild":true,"age":13,"code1":214748,"code2":3333333333,
367c804472Sopenharmony_ci        "height":165.3,"school":{"schoolName":"abc","schoolAddr":"cba"}})";
377c804472Sopenharmony_ci    std::string g_arr = "[\"jin\",true,13,214748,3333333333,165.3,{\"schoolName\":\"abc\",\"schoolAddr\":\"cba\"}]";
387c804472Sopenharmony_ci
397c804472Sopenharmony_ci    TEST(JsonReaderTest, ParseJsonData2Test)
407c804472Sopenharmony_ci    {
417c804472Sopenharmony_ci        int age = 20;
427c804472Sopenharmony_ci        std::string str = "{\"name\":\"jin\", \"age\":20}";
437c804472Sopenharmony_ci        Json2::Value val = JsonReader::ParseJsonData2(str);
447c804472Sopenharmony_ci        EXPECT_EQ(val["name"].AsString(), "jin");
457c804472Sopenharmony_ci        EXPECT_EQ(val["age"].AsInt(), age);
467c804472Sopenharmony_ci    }
477c804472Sopenharmony_ci
487c804472Sopenharmony_ci    TEST(JsonReaderTest, CreateObjectTest)
497c804472Sopenharmony_ci    {
507c804472Sopenharmony_ci        Json2::Value school = JsonReader::CreateObject();
517c804472Sopenharmony_ci        school.Add("schoolName", g_schoolName.c_str());
527c804472Sopenharmony_ci        school.Add("schoolAddr", g_schoolAddr.c_str());
537c804472Sopenharmony_ci        Json2::Value student = JsonReader::CreateObject();
547c804472Sopenharmony_ci        student.Add("name", g_name.c_str());
557c804472Sopenharmony_ci        EXPECT_EQ(student["name"].AsString(), g_name);
567c804472Sopenharmony_ci        student.Add("isChild", g_isChild);
577c804472Sopenharmony_ci        EXPECT_EQ(student["isChild"].AsBool(), g_isChild);
587c804472Sopenharmony_ci        student.Add("age", g_age);
597c804472Sopenharmony_ci        EXPECT_EQ(student["age"].AsInt(), g_age);
607c804472Sopenharmony_ci        student.Add("code1", g_code1);
617c804472Sopenharmony_ci        EXPECT_EQ(student["code1"].AsUInt(), g_code1);
627c804472Sopenharmony_ci        student.Add("code2", g_code2);
637c804472Sopenharmony_ci        EXPECT_EQ(student["code2"].AsInt64(), g_code2);
647c804472Sopenharmony_ci        student.Add("height", g_height);
657c804472Sopenharmony_ci        EXPECT_EQ(student["height"].AsDouble(), g_height);
667c804472Sopenharmony_ci        student.Add("school", school);
677c804472Sopenharmony_ci        EXPECT_EQ(student["school"]["schoolName"].AsString(), g_schoolName);
687c804472Sopenharmony_ci        EXPECT_EQ(student["school"]["schoolAddr"].AsString(), g_schoolAddr);
697c804472Sopenharmony_ci    }
707c804472Sopenharmony_ci
717c804472Sopenharmony_ci    TEST(JsonReaderTest, CreateArrayTest)
727c804472Sopenharmony_ci    {
737c804472Sopenharmony_ci        Json2::Value school = JsonReader::CreateObject();
747c804472Sopenharmony_ci        school.Add("schoolName", g_schoolName.c_str());
757c804472Sopenharmony_ci        school.Add("schoolAddr", g_schoolAddr.c_str());
767c804472Sopenharmony_ci        Json2::Value books = JsonReader::CreateArray();
777c804472Sopenharmony_ci        books.Add(g_name.c_str());
787c804472Sopenharmony_ci        books.Add(g_isChild);
797c804472Sopenharmony_ci        books.Add(g_age);
807c804472Sopenharmony_ci        books.Add(g_code1);
817c804472Sopenharmony_ci        books.Add(g_code2);
827c804472Sopenharmony_ci        books.Add(g_height);
837c804472Sopenharmony_ci        books.Add(school);
847c804472Sopenharmony_ci        int size = 7;
857c804472Sopenharmony_ci        int actualSize = books.GetArraySize();
867c804472Sopenharmony_ci        EXPECT_EQ(actualSize, size);
877c804472Sopenharmony_ci        int index = 0;
887c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsString(), g_name);
897c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsBool(), g_isChild);
907c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsInt(), g_age);
917c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsUInt(), g_code1);
927c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsInt64(), g_code2);
937c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index++).AsDouble(), g_height);
947c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index)["schoolName"].AsString(), g_schoolName);
957c804472Sopenharmony_ci        EXPECT_EQ(books.GetArrayItem(index)["schoolAddr"].AsString(), g_schoolAddr);
967c804472Sopenharmony_ci    }
977c804472Sopenharmony_ci
987c804472Sopenharmony_ci    TEST(JsonReaderTest, CreateBoolTest)
997c804472Sopenharmony_ci    {
1007c804472Sopenharmony_ci        Json2::Value resultJson = JsonReader::CreateObject();
1017c804472Sopenharmony_ci        resultJson.Add("result", JsonReader::CreateBool(true));
1027c804472Sopenharmony_ci        EXPECT_TRUE(resultJson["result"].AsBool());
1037c804472Sopenharmony_ci    }
1047c804472Sopenharmony_ci
1057c804472Sopenharmony_ci    TEST(JsonReaderTest, CreateStringTest)
1067c804472Sopenharmony_ci    {
1077c804472Sopenharmony_ci        std::string content = "content";
1087c804472Sopenharmony_ci        Json2::Value resultJson = JsonReader::CreateObject();
1097c804472Sopenharmony_ci        resultJson.Add("content", JsonReader::CreateString(content));
1107c804472Sopenharmony_ci        EXPECT_EQ(resultJson["content"].AsString(), content);
1117c804472Sopenharmony_ci    }
1127c804472Sopenharmony_ci
1137c804472Sopenharmony_ci    TEST(JsonReaderTest, DepthCopyTest)
1147c804472Sopenharmony_ci    {
1157c804472Sopenharmony_ci        std::string content = "content";
1167c804472Sopenharmony_ci        Json2::Value resultJson = JsonReader::CreateObject();
1177c804472Sopenharmony_ci        resultJson.Add("content", JsonReader::CreateString(content));
1187c804472Sopenharmony_ci        Json2::Value newJson = JsonReader::DepthCopy(resultJson);
1197c804472Sopenharmony_ci        resultJson.Clear();
1207c804472Sopenharmony_ci        EXPECT_EQ(newJson["content"].AsString(), content);
1217c804472Sopenharmony_ci    }
1227c804472Sopenharmony_ci
1237c804472Sopenharmony_ci    TEST(JsonReaderTest, ObjectReplaceTest)
1247c804472Sopenharmony_ci    {
1257c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
1267c804472Sopenharmony_ci        objVal.Replace("name", g_newName.c_str());
1277c804472Sopenharmony_ci        EXPECT_EQ(objVal["name"].AsString(), g_newName);
1287c804472Sopenharmony_ci        objVal.Replace("isChild", g_newIsChild);
1297c804472Sopenharmony_ci        EXPECT_EQ(objVal["isChild"].AsBool(), g_newIsChild);
1307c804472Sopenharmony_ci        objVal.Replace("age", g_newAge);
1317c804472Sopenharmony_ci        EXPECT_EQ(objVal["age"].AsInt(), g_newAge);
1327c804472Sopenharmony_ci        objVal.Replace("code1", g_newCode1);
1337c804472Sopenharmony_ci        EXPECT_EQ(objVal["code1"].AsUInt(), g_newCode1);
1347c804472Sopenharmony_ci        objVal.Replace("code2", g_newCode2);
1357c804472Sopenharmony_ci        EXPECT_EQ(objVal["code2"].AsInt64(), g_newCode2);
1367c804472Sopenharmony_ci        objVal.Replace("height", g_newHeight);
1377c804472Sopenharmony_ci        EXPECT_EQ(objVal["height"].AsDouble(), g_newHeight);
1387c804472Sopenharmony_ci        std::string content = "content";
1397c804472Sopenharmony_ci        Json2::Value resultJson = JsonReader::CreateObject();
1407c804472Sopenharmony_ci        resultJson.Add("content", JsonReader::CreateString(content));
1417c804472Sopenharmony_ci        objVal.Replace("school", resultJson);
1427c804472Sopenharmony_ci        EXPECT_EQ(objVal["school"]["content"].AsString(), content);
1437c804472Sopenharmony_ci    }
1447c804472Sopenharmony_ci
1457c804472Sopenharmony_ci    TEST(JsonReaderTest, ArrayReplaceTest)
1467c804472Sopenharmony_ci    {
1477c804472Sopenharmony_ci        Json2::Value arrVal = JsonReader::ParseJsonData2(g_arr);
1487c804472Sopenharmony_ci        int index = 0;
1497c804472Sopenharmony_ci        arrVal.Replace(index, g_newName.c_str());
1507c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsString(), g_newName);
1517c804472Sopenharmony_ci        arrVal.Replace(index, g_newIsChild);
1527c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsBool(), g_newIsChild);
1537c804472Sopenharmony_ci        arrVal.Replace(index, g_newAge);
1547c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsInt(), g_newAge);
1557c804472Sopenharmony_ci        arrVal.Replace(index, g_newCode1);
1567c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsUInt(), g_newCode1);
1577c804472Sopenharmony_ci        arrVal.Replace(index, g_newCode2);
1587c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsInt64(), g_newCode2);
1597c804472Sopenharmony_ci        arrVal.Replace(index, g_newHeight);
1607c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index++).AsDouble(), g_newHeight);
1617c804472Sopenharmony_ci        std::string content = "content";
1627c804472Sopenharmony_ci        Json2::Value resultJson = JsonReader::CreateObject();
1637c804472Sopenharmony_ci        resultJson.Add("content", JsonReader::CreateString(content));
1647c804472Sopenharmony_ci        arrVal.Replace(index, resultJson);
1657c804472Sopenharmony_ci        EXPECT_EQ(arrVal.GetArrayItem(index)["content"].AsString(), content);
1667c804472Sopenharmony_ci    }
1677c804472Sopenharmony_ci
1687c804472Sopenharmony_ci    TEST(JsonReaderTest, IsValueTest)
1697c804472Sopenharmony_ci    {
1707c804472Sopenharmony_ci        Json2::Value arrVal = JsonReader::ParseJsonData2(g_arr);
1717c804472Sopenharmony_ci        EXPECT_TRUE(arrVal.IsArray());
1727c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
1737c804472Sopenharmony_ci        EXPECT_FALSE(objVal.IsNull());
1747c804472Sopenharmony_ci        EXPECT_TRUE(objVal.IsMember("school"));
1757c804472Sopenharmony_ci        EXPECT_TRUE(objVal["name"].IsString());
1767c804472Sopenharmony_ci        EXPECT_TRUE(objVal["age"].IsNumber());
1777c804472Sopenharmony_ci        EXPECT_TRUE(objVal["age"].IsInt());
1787c804472Sopenharmony_ci        EXPECT_TRUE(objVal["code1"].IsUInt());
1797c804472Sopenharmony_ci        EXPECT_TRUE(objVal["code2"].IsUInt64());
1807c804472Sopenharmony_ci        EXPECT_TRUE(objVal["isChild"].IsBool());
1817c804472Sopenharmony_ci        EXPECT_TRUE(objVal["height"].IsDouble());
1827c804472Sopenharmony_ci    }
1837c804472Sopenharmony_ci
1847c804472Sopenharmony_ci    TEST(JsonReaderTest, GetValueTest)
1857c804472Sopenharmony_ci    {
1867c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
1877c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetString("name"), g_name);
1887c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetBool("isChild"), g_isChild);
1897c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetInt("age"), g_age);
1907c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetUInt("code1"), g_code1);
1917c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetInt64("code2"), g_code2);
1927c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetFloat("height"), (float)g_height);
1937c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetDouble("height"), g_height);
1947c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetDouble("height1", 0.0), 0.0); // key not exist retrun default value
1957c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetValue("school").GetString("schoolName"), g_schoolName);
1967c804472Sopenharmony_ci        EXPECT_EQ(objVal.GetValue("school").GetString("schoolAddr"), g_schoolAddr);
1977c804472Sopenharmony_ci    }
1987c804472Sopenharmony_ci
1997c804472Sopenharmony_ci    TEST(JsonReaderTest, OperatorBracketCharPtrTest)
2007c804472Sopenharmony_ci    {
2017c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2027c804472Sopenharmony_ci        const char* key = "name";
2037c804472Sopenharmony_ci        Json2::Value name = objVal[key];
2047c804472Sopenharmony_ci        std::string value = name.AsString();
2057c804472Sopenharmony_ci        EXPECT_EQ(value, g_name);
2067c804472Sopenharmony_ci        // key not exist
2077c804472Sopenharmony_ci        const char* key2 = "name22";
2087c804472Sopenharmony_ci        Json2::Value name2 = objVal[key2];
2097c804472Sopenharmony_ci        std::string value2 = name2.AsString();
2107c804472Sopenharmony_ci        EXPECT_EQ(value2, "");
2117c804472Sopenharmony_ci    }
2127c804472Sopenharmony_ci
2137c804472Sopenharmony_ci    TEST(JsonReaderTest, OperatorBracketConstCharPtrTest)
2147c804472Sopenharmony_ci    {
2157c804472Sopenharmony_ci        const Json2::Value objVal = static_cast<const Json2::Value>(JsonReader::ParseJsonData2(g_obj));
2167c804472Sopenharmony_ci        const char* key = "name";
2177c804472Sopenharmony_ci        const Json2::Value name = objVal[key];
2187c804472Sopenharmony_ci        std::string value = name.AsString();
2197c804472Sopenharmony_ci        EXPECT_EQ(value, g_name);
2207c804472Sopenharmony_ci        // key not exist
2217c804472Sopenharmony_ci        const char* key2 = "name22";
2227c804472Sopenharmony_ci        Json2::Value name2 = objVal[key2];
2237c804472Sopenharmony_ci        std::string value2 = name2.AsString();
2247c804472Sopenharmony_ci        EXPECT_EQ(value2, "");
2257c804472Sopenharmony_ci    }
2267c804472Sopenharmony_ci
2277c804472Sopenharmony_ci    TEST(ValueTest, OperatorBracketStdStringTest)
2287c804472Sopenharmony_ci    {
2297c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2307c804472Sopenharmony_ci        std::string key = "name";
2317c804472Sopenharmony_ci        Json2::Value name = objVal[key];
2327c804472Sopenharmony_ci        std::string value = name.AsString();
2337c804472Sopenharmony_ci        EXPECT_EQ(value, g_name);
2347c804472Sopenharmony_ci        // key not exist
2357c804472Sopenharmony_ci        std::string key2 = "name22";
2367c804472Sopenharmony_ci        Json2::Value name2 = objVal[key2];
2377c804472Sopenharmony_ci        std::string value2 = name2.AsString();
2387c804472Sopenharmony_ci        EXPECT_EQ(value2, "");
2397c804472Sopenharmony_ci    }
2407c804472Sopenharmony_ci
2417c804472Sopenharmony_ci    TEST(ValueTest, OperatorBracketConstStdStringTest)
2427c804472Sopenharmony_ci    {
2437c804472Sopenharmony_ci        const Json2::Value objVal = static_cast<const Json2::Value>(JsonReader::ParseJsonData2(g_obj));
2447c804472Sopenharmony_ci        std::string key = "name";
2457c804472Sopenharmony_ci        const Json2::Value name = objVal[key];
2467c804472Sopenharmony_ci        std::string value = name.AsString();
2477c804472Sopenharmony_ci        EXPECT_EQ(value, g_name);
2487c804472Sopenharmony_ci        // key not exist
2497c804472Sopenharmony_ci        std::string key2 = "name22";
2507c804472Sopenharmony_ci        Json2::Value name2 = objVal[key2];
2517c804472Sopenharmony_ci        std::string value2 = name2.AsString();
2527c804472Sopenharmony_ci        EXPECT_EQ(value2, "");
2537c804472Sopenharmony_ci    }
2547c804472Sopenharmony_ci
2557c804472Sopenharmony_ci    TEST(ValueTest, GetMemberNamesTest)
2567c804472Sopenharmony_ci    {
2577c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2587c804472Sopenharmony_ci        Json2::Value::Members members = objVal.GetMemberNames();
2597c804472Sopenharmony_ci        int size = 7;
2607c804472Sopenharmony_ci        int memberSize = members.size();
2617c804472Sopenharmony_ci        EXPECT_EQ(memberSize, size);
2627c804472Sopenharmony_ci    }
2637c804472Sopenharmony_ci
2647c804472Sopenharmony_ci    TEST(ValueTest, ToStringTest_NoJsonPtr)
2657c804472Sopenharmony_ci    {
2667c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2677c804472Sopenharmony_ci        std::string key2 = "name22";
2687c804472Sopenharmony_ci        Json2::Value name2 = objVal[key2];
2697c804472Sopenharmony_ci        std::string str = name2.ToString();
2707c804472Sopenharmony_ci        EXPECT_TRUE(str.empty());
2717c804472Sopenharmony_ci    }
2727c804472Sopenharmony_ci
2737c804472Sopenharmony_ci    TEST(ValueTest, ToStyledStringTest)
2747c804472Sopenharmony_ci    {
2757c804472Sopenharmony_ci        // no jsonPtr
2767c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2777c804472Sopenharmony_ci        std::string key1 = "name22";
2787c804472Sopenharmony_ci        Json2::Value name1= objVal[key1];
2797c804472Sopenharmony_ci        std::string str1 = name1.ToStyledString();
2807c804472Sopenharmony_ci        EXPECT_TRUE(str1.empty());
2817c804472Sopenharmony_ci        // jsonPtr exist
2827c804472Sopenharmony_ci        std::string key2 = "name";
2837c804472Sopenharmony_ci        Json2::Value name2= objVal[key2];
2847c804472Sopenharmony_ci        std::string str2 = name2.ToStyledString();
2857c804472Sopenharmony_ci        EXPECT_FALSE(str2.empty());
2867c804472Sopenharmony_ci    }
2877c804472Sopenharmony_ci
2887c804472Sopenharmony_ci    TEST(ValueTest, IsIntTest)
2897c804472Sopenharmony_ci    {
2907c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
2917c804472Sopenharmony_ci        std::string key1 = "name";
2927c804472Sopenharmony_ci        Json2::Value name = objVal[key1];
2937c804472Sopenharmony_ci        EXPECT_FALSE(name.IsInt());
2947c804472Sopenharmony_ci
2957c804472Sopenharmony_ci        std::string key2 = "age";
2967c804472Sopenharmony_ci        Json2::Value age = objVal[key2];
2977c804472Sopenharmony_ci        EXPECT_TRUE(age.IsInt());
2987c804472Sopenharmony_ci    }
2997c804472Sopenharmony_ci
3007c804472Sopenharmony_ci    TEST(ValueTest, IsUIntTest)
3017c804472Sopenharmony_ci    {
3027c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3037c804472Sopenharmony_ci        std::string key1 = "name";
3047c804472Sopenharmony_ci        Json2::Value name = objVal[key1];
3057c804472Sopenharmony_ci        EXPECT_FALSE(name.IsUInt());
3067c804472Sopenharmony_ci
3077c804472Sopenharmony_ci        std::string key2 = "age";
3087c804472Sopenharmony_ci        Json2::Value age = objVal[key2];
3097c804472Sopenharmony_ci        EXPECT_TRUE(age.IsUInt());
3107c804472Sopenharmony_ci    }
3117c804472Sopenharmony_ci
3127c804472Sopenharmony_ci    TEST(ValueTest, IsInt64Test)
3137c804472Sopenharmony_ci    {
3147c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3157c804472Sopenharmony_ci        std::string key1 = "name";
3167c804472Sopenharmony_ci        Json2::Value name = objVal[key1];
3177c804472Sopenharmony_ci        EXPECT_FALSE(name.IsInt64());
3187c804472Sopenharmony_ci
3197c804472Sopenharmony_ci        std::string key2 = "age";
3207c804472Sopenharmony_ci        Json2::Value age = objVal[key2];
3217c804472Sopenharmony_ci        EXPECT_TRUE(age.IsInt64());
3227c804472Sopenharmony_ci    }
3237c804472Sopenharmony_ci
3247c804472Sopenharmony_ci    TEST(ValueTest, IsUInt64Test)
3257c804472Sopenharmony_ci    {
3267c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3277c804472Sopenharmony_ci        std::string key1 = "name";
3287c804472Sopenharmony_ci        Json2::Value name = objVal[key1];
3297c804472Sopenharmony_ci        EXPECT_FALSE(name.IsUInt64());
3307c804472Sopenharmony_ci
3317c804472Sopenharmony_ci        std::string key2 = "age";
3327c804472Sopenharmony_ci        Json2::Value age = objVal[key2];
3337c804472Sopenharmony_ci        EXPECT_TRUE(age.IsUInt64());
3347c804472Sopenharmony_ci    }
3357c804472Sopenharmony_ci
3367c804472Sopenharmony_ci    TEST(ValueTest, IsDoubleTest)
3377c804472Sopenharmony_ci    {
3387c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3397c804472Sopenharmony_ci        std::string key1 = "name";
3407c804472Sopenharmony_ci        Json2::Value name = objVal[key1];
3417c804472Sopenharmony_ci        EXPECT_FALSE(name.IsDouble());
3427c804472Sopenharmony_ci
3437c804472Sopenharmony_ci        std::string key2 = "age";
3447c804472Sopenharmony_ci        Json2::Value age = objVal[key2];
3457c804472Sopenharmony_ci        EXPECT_TRUE(age.IsDouble());
3467c804472Sopenharmony_ci    }
3477c804472Sopenharmony_ci
3487c804472Sopenharmony_ci    TEST(ValueTest, IsObjectTest)
3497c804472Sopenharmony_ci    {
3507c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3517c804472Sopenharmony_ci        std::string key = "school";
3527c804472Sopenharmony_ci        Json2::Value school = objVal[key];
3537c804472Sopenharmony_ci        EXPECT_TRUE(school.IsObject());
3547c804472Sopenharmony_ci    }
3557c804472Sopenharmony_ci
3567c804472Sopenharmony_ci    TEST(ValueTest, GetBoolTest_TypeErr)
3577c804472Sopenharmony_ci    {
3587c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3597c804472Sopenharmony_ci        bool ret = objVal.GetBool("name");
3607c804472Sopenharmony_ci        EXPECT_FALSE(ret);
3617c804472Sopenharmony_ci    }
3627c804472Sopenharmony_ci
3637c804472Sopenharmony_ci    TEST(ValueTest, GetStringTest_TypeErr)
3647c804472Sopenharmony_ci    {
3657c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3667c804472Sopenharmony_ci        std::string ret = objVal.GetString("age");
3677c804472Sopenharmony_ci        EXPECT_EQ(ret, "");
3687c804472Sopenharmony_ci    }
3697c804472Sopenharmony_ci
3707c804472Sopenharmony_ci    TEST(ValueTest, AsFolatTest_TypeErr)
3717c804472Sopenharmony_ci    {
3727c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3737c804472Sopenharmony_ci        Json2::Value height = objVal.GetValue("height");
3747c804472Sopenharmony_ci        float val = height.AsFloat();
3757c804472Sopenharmony_ci        float expectVal = 165.3;
3767c804472Sopenharmony_ci        EXPECT_EQ(val, expectVal);
3777c804472Sopenharmony_ci    }
3787c804472Sopenharmony_ci
3797c804472Sopenharmony_ci    TEST(ValueTest, AsDoubleTest_TypeErr)
3807c804472Sopenharmony_ci    {
3817c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3827c804472Sopenharmony_ci        Json2::Value name = objVal.GetValue("name");
3837c804472Sopenharmony_ci        double val = name.AsDouble();
3847c804472Sopenharmony_ci        float expectVal = 0.0;
3857c804472Sopenharmony_ci        EXPECT_EQ(val, expectVal);
3867c804472Sopenharmony_ci    }
3877c804472Sopenharmony_ci
3887c804472Sopenharmony_ci    TEST(ValueTest, AsBoolTest_TypeErr)
3897c804472Sopenharmony_ci    {
3907c804472Sopenharmony_ci        Json2::Value objVal = JsonReader::ParseJsonData2(g_obj);
3917c804472Sopenharmony_ci        Json2::Value name = objVal.GetValue("name");
3927c804472Sopenharmony_ci        bool val = name.AsBool();
3937c804472Sopenharmony_ci        EXPECT_FALSE(val);
3947c804472Sopenharmony_ci    }
3957c804472Sopenharmony_ci
3967c804472Sopenharmony_ci    TEST(JsonReaderTest, CreateNullTest)
3977c804472Sopenharmony_ci    {
3987c804472Sopenharmony_ci        Json2::Value value = JsonReader::CreateNull();
3997c804472Sopenharmony_ci        EXPECT_TRUE(value.IsNull());
4007c804472Sopenharmony_ci    }
4017c804472Sopenharmony_ci
4027c804472Sopenharmony_ci    TEST(JsonReaderTest, GetKeyTest)
4037c804472Sopenharmony_ci    {
4047c804472Sopenharmony_ci        Json2::Value jsonData1 = JsonReader::ParseJsonData2(g_obj);
4057c804472Sopenharmony_ci        Json2::Value height = jsonData1.GetValue("height");
4067c804472Sopenharmony_ci        std::string str = height.GetKey();
4077c804472Sopenharmony_ci        EXPECT_EQ(str, "height");
4087c804472Sopenharmony_ci    }
4097c804472Sopenharmony_ci
4107c804472Sopenharmony_ci    TEST(JsonReaderTest, ReadFileTest)
4117c804472Sopenharmony_ci    {
4127c804472Sopenharmony_ci        std::string path = "1.json";
4137c804472Sopenharmony_ci        std::ofstream file(path);
4147c804472Sopenharmony_ci        if (!file) {
4157c804472Sopenharmony_ci            printf("Error creating file: %s\r\n", path.c_str());
4167c804472Sopenharmony_ci            EXPECT_TRUE(false);
4177c804472Sopenharmony_ci            return;
4187c804472Sopenharmony_ci        }
4197c804472Sopenharmony_ci        file << g_obj;
4207c804472Sopenharmony_ci        file.close();
4217c804472Sopenharmony_ci        std::string readStr = JsonReader::ReadFile(path);
4227c804472Sopenharmony_ci        EXPECT_EQ(readStr, g_obj);
4237c804472Sopenharmony_ci    }
4247c804472Sopenharmony_ci
4257c804472Sopenharmony_ci    TEST(JsonReaderTest, GetErrorPtrTest)
4267c804472Sopenharmony_ci    {
4277c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(g_obj);
4287c804472Sopenharmony_ci        std::string errors = JsonReader::GetErrorPtr();
4297c804472Sopenharmony_ci        EXPECT_FALSE(jsonData.IsNull());
4307c804472Sopenharmony_ci        EXPECT_TRUE(errors.empty());
4317c804472Sopenharmony_ci    }
4327c804472Sopenharmony_ci
4337c804472Sopenharmony_ci    TEST(JsonReaderTest, AddTest_Err)
4347c804472Sopenharmony_ci    {
4357c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(g_obj);
4367c804472Sopenharmony_ci        // key is nullptr
4377c804472Sopenharmony_ci        const char* key = nullptr;
4387c804472Sopenharmony_ci        bool ret = jsonData.Add(key, "aaa");
4397c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4407c804472Sopenharmony_ci        ret = jsonData.Add(key, false);
4417c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4427c804472Sopenharmony_ci        double d = 22.0;
4437c804472Sopenharmony_ci        ret = jsonData.Add(key, d);
4447c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4457c804472Sopenharmony_ci        std::string str = "{\"name\":\"jin\", \"age\":20}";
4467c804472Sopenharmony_ci        Json2::Value val = JsonReader::ParseJsonData2(str);
4477c804472Sopenharmony_ci        ret = jsonData.Add(key, val);
4487c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4497c804472Sopenharmony_ci    }
4507c804472Sopenharmony_ci
4517c804472Sopenharmony_ci    TEST(JsonReaderTest, AddTest_ArrayErr)
4527c804472Sopenharmony_ci    {
4537c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(g_obj);
4547c804472Sopenharmony_ci        bool ret = jsonData.Add("aaa");
4557c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4567c804472Sopenharmony_ci        ret = jsonData.Add(false);
4577c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4587c804472Sopenharmony_ci        double d = 436.96;
4597c804472Sopenharmony_ci        ret = jsonData.Add(d);
4607c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4617c804472Sopenharmony_ci        Json2::Value val = JsonReader::CreateNull();
4627c804472Sopenharmony_ci        ret = jsonData.Add(val);
4637c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4647c804472Sopenharmony_ci    }
4657c804472Sopenharmony_ci
4667c804472Sopenharmony_ci    TEST(JsonReaderTest, ReplaceTest_Err)
4677c804472Sopenharmony_ci    {
4687c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(g_obj);
4697c804472Sopenharmony_ci        // key is nullptr
4707c804472Sopenharmony_ci        const char* key = nullptr;
4717c804472Sopenharmony_ci        bool ret = jsonData.Replace(key, "aaa");
4727c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4737c804472Sopenharmony_ci        ret = jsonData.Replace(key, false);
4747c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4757c804472Sopenharmony_ci        double d = 22.0;
4767c804472Sopenharmony_ci        ret = jsonData.Replace(key, d);
4777c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4787c804472Sopenharmony_ci        std::string str = "{\"name\":\"jin\", \"age\":20}";
4797c804472Sopenharmony_ci        Json2::Value val = JsonReader::ParseJsonData2(str);
4807c804472Sopenharmony_ci        ret = jsonData.Replace(key, val);
4817c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4827c804472Sopenharmony_ci    }
4837c804472Sopenharmony_ci
4847c804472Sopenharmony_ci    TEST(JsonReaderTest, ReplaceTest_ArrayErr)
4857c804472Sopenharmony_ci    {
4867c804472Sopenharmony_ci        Json2::Value jsonData = JsonReader::ParseJsonData2(g_obj);
4877c804472Sopenharmony_ci        // key is nullptr
4887c804472Sopenharmony_ci        const char* key = nullptr;
4897c804472Sopenharmony_ci        int invalidIndex = -1;
4907c804472Sopenharmony_ci        bool ret = jsonData.Replace(invalidIndex, "aaa");
4917c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4927c804472Sopenharmony_ci        ret = jsonData.Replace(invalidIndex, false);
4937c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4947c804472Sopenharmony_ci        double d = 22.0;
4957c804472Sopenharmony_ci        ret = jsonData.Replace(invalidIndex, d);
4967c804472Sopenharmony_ci        EXPECT_FALSE(ret);
4977c804472Sopenharmony_ci        std::string str = "{\"name\":\"jin\", \"age\":20}";
4987c804472Sopenharmony_ci        Json2::Value val = JsonReader::ParseJsonData2(str);
4997c804472Sopenharmony_ci        ret = jsonData.Replace(invalidIndex, val);
5007c804472Sopenharmony_ci        EXPECT_FALSE(ret);
5017c804472Sopenharmony_ci    }
5027c804472Sopenharmony_ci}