1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "gtest/gtest.h"
17 
18 #define private public
19 #define protected public
20 #include "base/json/uobject.h"
21 
22 using namespace testing;
23 using namespace testing::ext;
24 
25 namespace OHOS::Ace {
26 namespace {} // namespace
27 
28 class UObjectTest : public testing::Test {};
29 
30 /**
31  * @tc.name: UObjectTest001
32  * @tc.desc: AddItemToObject()
33  * @tc.type: FUNC
34  */
HWTEST_F(UObjectTest, UObjectTest001, TestSize.Level1)35 HWTEST_F(UObjectTest, UObjectTest001, TestSize.Level1)
36 {
37     /**
38      * @tc.steps: step1. Create a UOObject.
39      */
40     UObject uObject;
41 
42     /**
43      * @tc.steps: step2. Save value through AdditemToObject.
44      * @tc.expected: step2. Asserting values through the get method.
45      */
46     char* value = nullptr;
47     uObject.AddItemToObject("char", value);
48     EXPECT_EQ(uObject.stringItems_.size(), 0);
49     std::string stringValue = "test";
50     uObject.AddItemToObject("char", const_cast<char*>(stringValue.c_str()));
51     EXPECT_EQ(uObject.GetString("char"), "test");
52 
53     stringValue = "test1";
54     uObject.AddItemToObject("string", stringValue);
55     EXPECT_EQ(uObject.GetString("invalidKey"), "");
56     EXPECT_EQ(uObject.GetString("string"), "test1");
57 
58     double doubleValue = 1.0;
59     uObject.AddItemToObject("double", doubleValue);
60     EXPECT_EQ(uObject.GetDouble("invalidKey"), 0);
61     EXPECT_EQ(uObject.GetDouble("double"), 1.0);
62 
63     size_t sizeValue = 10;
64     uObject.AddItemToObject("size_t", sizeValue);
65     EXPECT_EQ(uObject.GetSizeT("invalidKey"), 0);
66     EXPECT_EQ(uObject.GetSizeT("size_t"), 10);
67     EXPECT_EQ(uObject.GetSizeT("double"), 1);
68 
69     int32_t int32Value = 5;
70     uObject.AddItemToObject("int32_t", int32Value);
71     EXPECT_EQ(uObject.GetInt32("invalidKey"), 0);
72     EXPECT_EQ(uObject.GetInt32("int32_t"), 5);
73     EXPECT_EQ(uObject.GetInt32("double"), 1);
74 
75     int64_t int64Value = 1;
76     uObject.AddItemToObject("int64_t", int64Value);
77     EXPECT_EQ(uObject.GetInt64("invalidKey"), 0);
78     EXPECT_EQ(uObject.GetInt64("int64_t"), 1);
79     EXPECT_EQ(uObject.GetInt64("double"), 1);
80 
81     bool boolValue = false;
82     uObject.AddItemToObject("bool", boolValue);
83     EXPECT_EQ(uObject.GetBool("invalidKey"), false);
84     EXPECT_EQ(uObject.GetBool("bool"), false);
85 
86     std::shared_ptr<UObject> sharedUObject = std::make_shared<UObject>();
87     uObject.AddItemToObject("shared_ptr", sharedUObject);
88     EXPECT_TRUE(uObject.GetObject("invalidKey"));
89     EXPECT_TRUE(uObject.GetObject("shared_ptr"));
90 
91     /**
92      * @tc.steps: step3. Contains() test.
93      * @tc.expected: step3. Asserting return bool.
94      */
95     EXPECT_FALSE(uObject.Contains("invalidKey"));
96     EXPECT_TRUE(uObject.Contains("string"));
97     EXPECT_TRUE(uObject.Contains("double"));
98     EXPECT_TRUE(uObject.Contains("size_t"));
99     EXPECT_TRUE(uObject.Contains("int32_t"));
100     EXPECT_TRUE(uObject.Contains("int64_t"));
101     EXPECT_TRUE(uObject.Contains("bool"));
102     EXPECT_TRUE(uObject.Contains("shared_ptr"));
103 }
104 
105 /**
106  * @tc.name: UObjectTest002
107  * @tc.desc: Serialize()
108  * @tc.type: FUNC
109  */
HWTEST_F(UObjectTest, UObjectTest002, TestSize.Level1)110 HWTEST_F(UObjectTest, UObjectTest002, TestSize.Level1)
111 {
112     /**
113      * @tc.steps: step1. Create a UOObject.
114      */
115     UObject uObject;
116     std::string stringValue = "test";
117     uObject.AddItemToObject("char", const_cast<char*>(stringValue.c_str()));
118     stringValue = "test1";
119     uObject.AddItemToObject("string", stringValue);
120     double doubleValue = 1.0;
121     uObject.AddItemToObject("double", doubleValue);
122     size_t sizeValue = 10;
123     uObject.AddItemToObject("size_t", sizeValue);
124     int32_t int32Value = 5;
125     uObject.AddItemToObject("int32_t", int32Value);
126     int64_t int64Value = 1;
127     uObject.AddItemToObject("int64_t", int64Value);
128     bool boolValue = false;
129     uObject.AddItemToObject("bool", boolValue);
130     std::shared_ptr<UObject> sharedUObject = std::make_shared<UObject>();
131     uObject.AddItemToObject("shared_ptr", sharedUObject);
132 
133     /**
134      * @tc.steps: step2. Serialize()
135      * @tc.expected: step2. Asserting values through the get method.
136      */
137     uObject.Hash();
138 
139     char* buffer = nullptr;
140     uObject.Serialize(buffer, 0);
141     EXPECT_EQ(uObject.offset_, 0);
142     buffer = new char[136];
143     uObject.Serialize(buffer, 136);
144     EXPECT_EQ(uObject.offset_, 136);
145 
146     /**
147      * @tc.steps: step3. Deserialize() test.
148      * @tc.expected: step3. Asserting offset_.
149      */
150     uObject.Deserialize(buffer, 136);
151     EXPECT_EQ(uObject.offset_, 136);
152 
153     /**
154      * @tc.steps: step4. delete buffer.
155      */
156     delete[] buffer;
157     buffer = nullptr;
158 }
159 
160 /**
161  * @tc.name: UObjectTest003
162  * @tc.desc: Serialize()
163  * @tc.type: FUNC
164  */
HWTEST_F(UObjectTest, UObjectTest003, TestSize.Level1)165 HWTEST_F(UObjectTest, UObjectTest003, TestSize.Level1)
166 {
167     UObject uObject;
168     std::string value = "";
169     uObject.WriteString(value);
170     const char* buffer = nullptr;
171     int32_t bufferLen = 100;
172     uObject.Deserialize(buffer, bufferLen);
173     EXPECT_EQ(uObject.offset_, 0);
174 }
175 } // namespace OHOS::Ace