1e509ee18Sopenharmony_ci/* 2e509ee18Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3e509ee18Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e509ee18Sopenharmony_ci * you may not use this file except in compliance with the License. 5e509ee18Sopenharmony_ci * You may obtain a copy of the License at 6e509ee18Sopenharmony_ci * 7e509ee18Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e509ee18Sopenharmony_ci * 9e509ee18Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e509ee18Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e509ee18Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e509ee18Sopenharmony_ci * See the License for the specific language governing permissions and 13e509ee18Sopenharmony_ci * limitations under the License. 14e509ee18Sopenharmony_ci */ 15e509ee18Sopenharmony_ci 16e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h" 17e509ee18Sopenharmony_ci#include "tooling/base/pt_json.h" 18e509ee18Sopenharmony_ci 19e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling; 20e509ee18Sopenharmony_ci 21e509ee18Sopenharmony_cinamespace panda::test { 22e509ee18Sopenharmony_ciclass PtJsonTest : public testing::Test { 23e509ee18Sopenharmony_cipublic: 24e509ee18Sopenharmony_ci static void SetUpTestCase() 25e509ee18Sopenharmony_ci { 26e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "SetUpTestCase"; 27e509ee18Sopenharmony_ci } 28e509ee18Sopenharmony_ci 29e509ee18Sopenharmony_ci static void TearDownTestCase() 30e509ee18Sopenharmony_ci { 31e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "TearDownCase"; 32e509ee18Sopenharmony_ci } 33e509ee18Sopenharmony_ci 34e509ee18Sopenharmony_ci void SetUp() override 35e509ee18Sopenharmony_ci { 36e509ee18Sopenharmony_ci } 37e509ee18Sopenharmony_ci 38e509ee18Sopenharmony_ci void TearDown() override 39e509ee18Sopenharmony_ci { 40e509ee18Sopenharmony_ci } 41e509ee18Sopenharmony_ci}; 42e509ee18Sopenharmony_ci 43e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, FalseTest) 44e509ee18Sopenharmony_ci{ 45e509ee18Sopenharmony_ci std::string str = "false"; 46e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 47e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsBool()); 48e509ee18Sopenharmony_ci EXPECT_FALSE(json->GetBool()); 49e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 50e509ee18Sopenharmony_ci json->ReleaseRoot(); 51e509ee18Sopenharmony_ci} 52e509ee18Sopenharmony_ci 53e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, TrueTest) 54e509ee18Sopenharmony_ci{ 55e509ee18Sopenharmony_ci std::string str = "true"; 56e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 57e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsBool()); 58e509ee18Sopenharmony_ci EXPECT_TRUE(json->GetBool()); 59e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 60e509ee18Sopenharmony_ci json->ReleaseRoot(); 61e509ee18Sopenharmony_ci} 62e509ee18Sopenharmony_ci 63e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, IntTest) 64e509ee18Sopenharmony_ci{ 65e509ee18Sopenharmony_ci std::string str = "100"; 66e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 67e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsNumber()); 68e509ee18Sopenharmony_ci EXPECT_EQ(json->GetInt(), 100); 69e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 70e509ee18Sopenharmony_ci json->ReleaseRoot(); 71e509ee18Sopenharmony_ci} 72e509ee18Sopenharmony_ci 73e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, Int64Test) 74e509ee18Sopenharmony_ci{ 75e509ee18Sopenharmony_ci std::string str = "123456789012345"; 76e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 77e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsNumber()); 78e509ee18Sopenharmony_ci EXPECT_EQ(json->GetInt64(), 123456789012345); 79e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 80e509ee18Sopenharmony_ci json->ReleaseRoot(); 81e509ee18Sopenharmony_ci} 82e509ee18Sopenharmony_ci 83e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, DoubleTest) 84e509ee18Sopenharmony_ci{ 85e509ee18Sopenharmony_ci std::string str = "12345.6789"; 86e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 87e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsNumber()); 88e509ee18Sopenharmony_ci EXPECT_EQ(json->GetDouble(), 12345.6789); 89e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 90e509ee18Sopenharmony_ci json->ReleaseRoot(); 91e509ee18Sopenharmony_ci} 92e509ee18Sopenharmony_ci 93e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, StringTest) 94e509ee18Sopenharmony_ci{ 95e509ee18Sopenharmony_ci std::string str = "\"abcdefg\""; 96e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 97e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsString()); 98e509ee18Sopenharmony_ci EXPECT_EQ(json->GetString(), "abcdefg"); 99e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 100e509ee18Sopenharmony_ci json->ReleaseRoot(); 101e509ee18Sopenharmony_ci} 102e509ee18Sopenharmony_ci 103e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, ArrayTest1) 104e509ee18Sopenharmony_ci{ 105e509ee18Sopenharmony_ci std::string str = "[\"a\",\"b\",200]"; 106e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 107e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsArray()); 108e509ee18Sopenharmony_ci EXPECT_EQ(json->GetSize(), 3); 109e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(0)->GetString(), "a"); 110e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(1)->GetString(), "b"); 111e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(2)->GetInt(), 200); 112e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 113e509ee18Sopenharmony_ci json->ReleaseRoot(); 114e509ee18Sopenharmony_ci} 115e509ee18Sopenharmony_ci 116e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, ArrayTest2) 117e509ee18Sopenharmony_ci{ 118e509ee18Sopenharmony_ci std::string str = "[\"a\",\"b\",200,10.5,{}]"; 119e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 120e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsArray()); 121e509ee18Sopenharmony_ci EXPECT_EQ(json->GetSize(), 5); 122e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(0)->GetString(), "a"); 123e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(1)->GetString(), "b"); 124e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(2)->GetInt(), 200); 125e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(3)->GetDouble(), 10.5); 126e509ee18Sopenharmony_ci EXPECT_TRUE(json->Get(4)->IsObject()); 127e509ee18Sopenharmony_ci EXPECT_EQ(json->Stringify(), str); 128e509ee18Sopenharmony_ci json->ReleaseRoot(); 129e509ee18Sopenharmony_ci} 130e509ee18Sopenharmony_ci 131e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, ObjectTest) 132e509ee18Sopenharmony_ci{ 133e509ee18Sopenharmony_ci auto child1 = PtJson::CreateObject(); 134e509ee18Sopenharmony_ci child1->Add("ch", "child_1"); 135e509ee18Sopenharmony_ci ASSERT_TRUE(child1->Contains("ch")); 136e509ee18Sopenharmony_ci 137e509ee18Sopenharmony_ci auto child2 = PtJson::CreateObject(); 138e509ee18Sopenharmony_ci child2->Add("ch", "child_2"); 139e509ee18Sopenharmony_ci ASSERT_TRUE(child2->Contains("ch")); 140e509ee18Sopenharmony_ci 141e509ee18Sopenharmony_ci auto arr = PtJson::CreateArray(); 142e509ee18Sopenharmony_ci arr->Push(100); 143e509ee18Sopenharmony_ci EXPECT_EQ(arr->GetSize(), 1); 144e509ee18Sopenharmony_ci 145e509ee18Sopenharmony_ci auto root = PtJson::CreateObject(); 146e509ee18Sopenharmony_ci root->Add("a", false); 147e509ee18Sopenharmony_ci root->Add("b", 100); 148e509ee18Sopenharmony_ci root->Add("c", 100.2); 149e509ee18Sopenharmony_ci root->Add("d", static_cast<int64_t>(200)); 150e509ee18Sopenharmony_ci root->Add("e", "abc"); 151e509ee18Sopenharmony_ci root->Add("f", child2); 152e509ee18Sopenharmony_ci root->Add("g", arr); 153e509ee18Sopenharmony_ci 154e509ee18Sopenharmony_ci bool b; 155e509ee18Sopenharmony_ci int32_t i32; 156e509ee18Sopenharmony_ci int64_t i64; 157e509ee18Sopenharmony_ci double d; 158e509ee18Sopenharmony_ci std::string str; 159e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json; 160e509ee18Sopenharmony_ci ASSERT_EQ(root->GetBool("a", &b), Result::SUCCESS); 161e509ee18Sopenharmony_ci EXPECT_FALSE(b); 162e509ee18Sopenharmony_ci ASSERT_EQ(root->GetInt("b", &i32), Result::SUCCESS); 163e509ee18Sopenharmony_ci EXPECT_EQ(i32, 100); 164e509ee18Sopenharmony_ci ASSERT_EQ(root->GetDouble("c", &d), Result::SUCCESS); 165e509ee18Sopenharmony_ci EXPECT_EQ(d, 100.2); 166e509ee18Sopenharmony_ci ASSERT_EQ(root->GetInt64("d", &i64), Result::SUCCESS); 167e509ee18Sopenharmony_ci EXPECT_EQ(i64, static_cast<int64_t>(200)); 168e509ee18Sopenharmony_ci ASSERT_EQ(root->GetString("e", &str), Result::SUCCESS); 169e509ee18Sopenharmony_ci EXPECT_EQ(str, "abc"); 170e509ee18Sopenharmony_ci ASSERT_EQ(root->GetObject("f", &json), Result::SUCCESS); 171e509ee18Sopenharmony_ci ASSERT_EQ(json->GetString("ch", &str), Result::SUCCESS); 172e509ee18Sopenharmony_ci EXPECT_EQ(str, "child_2"); 173e509ee18Sopenharmony_ci ASSERT_EQ(root->GetArray("g", &json), Result::SUCCESS); 174e509ee18Sopenharmony_ci ASSERT_TRUE(json->IsArray()); 175e509ee18Sopenharmony_ci EXPECT_EQ(json->Get(0)->GetInt(), 100); 176e509ee18Sopenharmony_ci 177e509ee18Sopenharmony_ci EXPECT_EQ(root->Stringify(), 178e509ee18Sopenharmony_ci "{\"a\":false,\"b\":100,\"c\":100.2,\"d\":200,\"e\":\"abc\",\"f\":{\"ch\":\"child_2\"},\"g\":[100]}"); 179e509ee18Sopenharmony_ci root->ReleaseRoot(); 180e509ee18Sopenharmony_ci} 181e509ee18Sopenharmony_ci 182e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, StringifyTest) 183e509ee18Sopenharmony_ci{ 184e509ee18Sopenharmony_ci PtJson ptJson; 185e509ee18Sopenharmony_ci std::string result = ptJson.Stringify(); 186e509ee18Sopenharmony_ci ASSERT_EQ(result, ""); 187e509ee18Sopenharmony_ci} 188e509ee18Sopenharmony_ci 189e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, GetKeyTest) 190e509ee18Sopenharmony_ci{ 191e509ee18Sopenharmony_ci PtJson ptJson; 192e509ee18Sopenharmony_ci std::string result = ptJson.GetKey(); 193e509ee18Sopenharmony_ci ASSERT_EQ(result, ""); 194e509ee18Sopenharmony_ci cJSON temp; 195e509ee18Sopenharmony_ci char test[] = "test"; 196e509ee18Sopenharmony_ci temp.string = test; 197e509ee18Sopenharmony_ci PtJson ptJson1(&temp); 198e509ee18Sopenharmony_ci result = ptJson1.GetKey(); 199e509ee18Sopenharmony_ci ASSERT_EQ(result, "test"); 200e509ee18Sopenharmony_ci cJSON temp1; 201e509ee18Sopenharmony_ci temp1.string = nullptr; 202e509ee18Sopenharmony_ci PtJson ptJson2(&temp1); 203e509ee18Sopenharmony_ci result = ptJson2.GetKey(); 204e509ee18Sopenharmony_ci ASSERT_EQ(result, ""); 205e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr = std::make_unique<PtJson>(); 206e509ee18Sopenharmony_ci Result result1 = ptJson.GetAny(test, &ptr); 207e509ee18Sopenharmony_ci ASSERT_EQ(result1, Result::NOT_EXIST); 208e509ee18Sopenharmony_ci cJSON json; 209e509ee18Sopenharmony_ci cJSON son; 210e509ee18Sopenharmony_ci son.string = test; 211e509ee18Sopenharmony_ci json.string = test; 212e509ee18Sopenharmony_ci json.child = &son; 213e509ee18Sopenharmony_ci PtJson ptJson3(&json); 214e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr1 = std::make_unique<PtJson>(); 215e509ee18Sopenharmony_ci result1 = ptJson3.GetAny(test, &ptr1); 216e509ee18Sopenharmony_ci ASSERT_EQ(result1, Result::SUCCESS); 217e509ee18Sopenharmony_ci} 218e509ee18Sopenharmony_ci 219e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, GetTypeTest) 220e509ee18Sopenharmony_ci{ 221e509ee18Sopenharmony_ci cJSON *node = cJSON_CreateNumber(0); 222e509ee18Sopenharmony_ci PtJson num(node); 223e509ee18Sopenharmony_ci cJSON *node1 = cJSON_CreateString("test"); 224e509ee18Sopenharmony_ci PtJson str(node1); 225e509ee18Sopenharmony_ci bool result = str.GetBool(false); 226e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 227e509ee18Sopenharmony_ci int32_t result1 = str.GetInt(int32_t(0)); 228e509ee18Sopenharmony_ci ASSERT_EQ(result1, 0); 229e509ee18Sopenharmony_ci int64_t result2 = str.GetInt64(int64_t(0)); 230e509ee18Sopenharmony_ci ASSERT_EQ(result2, 0); 231e509ee18Sopenharmony_ci double result3 = str.GetDouble(0.1); // 0.1:num 232e509ee18Sopenharmony_ci ASSERT_EQ(result3, 0.1); // 0.1:num 233e509ee18Sopenharmony_ci std::string result4 = num.GetString(); 234e509ee18Sopenharmony_ci ASSERT_EQ(result4, ""); 235e509ee18Sopenharmony_ci} 236e509ee18Sopenharmony_ci 237e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, PushTest) 238e509ee18Sopenharmony_ci{ 239e509ee18Sopenharmony_ci char *ptr = nullptr; 240e509ee18Sopenharmony_ci PtJson ptJson; 241e509ee18Sopenharmony_ci bool result = ptJson.Push(ptr); 242e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 243e509ee18Sopenharmony_ci char cPtr[] = "value"; 244e509ee18Sopenharmony_ci result = ptJson.Push(cPtr); 245e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 246e509ee18Sopenharmony_ci bool value = true; 247e509ee18Sopenharmony_ci result = ptJson.Push(value); 248e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 249e509ee18Sopenharmony_ci double value1 = 0.1; // 0.1:value 250e509ee18Sopenharmony_ci result = ptJson.Push(value1); 251e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 252e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr1; 253e509ee18Sopenharmony_ci result = ptJson.Push(std::move(ptr1)); 254e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 255e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr2 = std::make_unique<PtJson>(); 256e509ee18Sopenharmony_ci result = ptJson.Push(std::move(ptr2)); 257e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 258e509ee18Sopenharmony_ci cJSON json; 259e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr3 = std::make_unique<PtJson>(&json); 260e509ee18Sopenharmony_ci result = ptJson.Push(std::move(ptr3)); 261e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 262e509ee18Sopenharmony_ci} 263e509ee18Sopenharmony_ci 264e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, AddTest) 265e509ee18Sopenharmony_ci{ 266e509ee18Sopenharmony_ci char key[] = "key"; 267e509ee18Sopenharmony_ci double value = 0.1; // 0.1:value 268e509ee18Sopenharmony_ci PtJson ptJson; 269e509ee18Sopenharmony_ci bool result = ptJson.Add(key, value); 270e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 271e509ee18Sopenharmony_ci char value1[] = "value"; 272e509ee18Sopenharmony_ci result = ptJson.Add(key, value1); 273e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 274e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr = std::make_unique<PtJson>(); 275e509ee18Sopenharmony_ci result = ptJson.Add(key, std::move(ptr)); 276e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 277e509ee18Sopenharmony_ci cJSON json; 278e509ee18Sopenharmony_ci std::unique_ptr<PtJson> ptr1 = std::make_unique<PtJson>(&json); 279e509ee18Sopenharmony_ci result = ptJson.Add(key, std::move(ptr1)); 280e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 281e509ee18Sopenharmony_ci bool value2 = true; 282e509ee18Sopenharmony_ci result = ptJson.Add(key, value2); 283e509ee18Sopenharmony_ci ASSERT_EQ(result, false); 284e509ee18Sopenharmony_ci} 285e509ee18Sopenharmony_ci 286e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, UIntTest) 287e509ee18Sopenharmony_ci{ 288e509ee18Sopenharmony_ci std::string str = "UIntTest"; 289e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 290e509ee18Sopenharmony_ci EXPECT_EQ(json->GetUInt(), 0); 291e509ee18Sopenharmony_ci str = "12345"; 292e509ee18Sopenharmony_ci json = PtJson::Parse(str.c_str()); 293e509ee18Sopenharmony_ci EXPECT_EQ(json->GetUInt(), 12345); 294e509ee18Sopenharmony_ci} 295e509ee18Sopenharmony_ci 296e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, UInt64Test) 297e509ee18Sopenharmony_ci{ 298e509ee18Sopenharmony_ci std::string str = "UInt64Test"; 299e509ee18Sopenharmony_ci std::unique_ptr<PtJson> json = PtJson::Parse(str.c_str()); 300e509ee18Sopenharmony_ci EXPECT_EQ(json->GetUInt64(), 0); 301e509ee18Sopenharmony_ci str = "123456789012345"; 302e509ee18Sopenharmony_ci json = PtJson::Parse(str.c_str()); 303e509ee18Sopenharmony_ci EXPECT_EQ(json->GetUInt64(), 123456789012345); 304e509ee18Sopenharmony_ci} 305e509ee18Sopenharmony_ci 306e509ee18Sopenharmony_ciHWTEST_F_L0(PtJsonTest, ResultUInt64Test) 307e509ee18Sopenharmony_ci{ 308e509ee18Sopenharmony_ci auto test = PtJson::CreateObject(); 309e509ee18Sopenharmony_ci test->Add("a", "ResultUInt64Test"); 310e509ee18Sopenharmony_ci test->Add("b", 100); 311e509ee18Sopenharmony_ci uint64_t ui64; 312e509ee18Sopenharmony_ci ASSERT_EQ(test->GetUInt64("a", &ui64), Result::TYPE_ERROR); 313e509ee18Sopenharmony_ci ASSERT_EQ(test->GetUInt64("b", &ui64), Result::SUCCESS); 314e509ee18Sopenharmony_ci EXPECT_EQ(ui64, static_cast<uint64_t>(100)); 315e509ee18Sopenharmony_ci} 316e509ee18Sopenharmony_ci}