1 /*
2  * Copyright (c) 2021-2023 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 #include "base_def.h"
18 #include "base_obj.h"
19 #include "bool_wrapper.h"
20 #include "zchar_wrapper.h"
21 #include "byte_wrapper.h"
22 #include "user_object_wrapper.h"
23 #include "short_wrapper.h"
24 #include "int_wrapper.h"
25 #include "long_wrapper.h"
26 #include "float_wrapper.h"
27 #include "double_wrapper.h"
28 #include "string_wrapper.h"
29 #include "refbase.h"
30 
31 using namespace OHOS;
32 using namespace OHOS::AAFwk;
33 using testing::ext::TestSize;
34 
35 namespace OHOS {
36 namespace AAFwk {
37 class AAFwkBaseObjectTest : public testing::Test {
38 public:
39     static void SetUpTestCase(void);
40     static void TearDownTestCase(void);
41     void SetUp();
42     void TearDown();
43 };
44 
SetUpTestCase(void)45 void AAFwkBaseObjectTest::SetUpTestCase(void)
46 {}
47 
TearDownTestCase(void)48 void AAFwkBaseObjectTest::TearDownTestCase(void)
49 {}
50 
SetUp(void)51 void AAFwkBaseObjectTest::SetUp(void)
52 {}
53 
TearDown(void)54 void AAFwkBaseObjectTest::TearDown(void)
55 {}
56 
57 /**
58  * @tc.number: BaseObject_test_001
59  * @tc.name: Query
60  * @tc.desc: test Query function and iid == g_IID_IWeakReferenceSource.
61  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_001, TestSize.Level1)62 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_001, TestSize.Level1)
63 {
64     Object object;
65     InterfaceID iid = {
66         0xbc3f5250, 0x34d7, 0x42d2, 0x9b40, {0xf, 0xf, 0xc, 0xe, 0x8, 0x3, 0xf, 0xd, 0x4, 0x0, 0x6, 0x1}
67     };
68     EXPECT_TRUE(object.Query(iid));
69 }
70 
71 /**
72  * @tc.number: BaseObject_test_002
73  * @tc.name: Query
74  * @tc.desc: test Query function and iid == g_IID_IInterface.
75  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_002, TestSize.Level1)76 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_002, TestSize.Level1)
77 {
78     Object object;
79     InterfaceID iid = {
80         0x00000000, 0x0000, 0x0000, 0x0000, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}
81     };
82     EXPECT_TRUE(object.Query(iid));
83 }
84 
85 /**
86  * @tc.number: BaseObject_test_003
87  * @tc.name: GetInterfaceID
88  * @tc.desc: test GetInterfaceID function and object == static_cast<IObject *>(this).
89  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_003, TestSize.Level1)90 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_003, TestSize.Level1)
91 {
92     Object object;
93     InterfaceID iid = {
94         0x8321f710, 0xa0c0, 0x4cbe, 0xbfbc, {0x5, 0xa, 0x7, 0x8, 0xf, 0x1, 0x3, 0x1, 0x2, 0xb, 0x1, 0xb}
95     };
96     EXPECT_EQ(iid, object.GetInterfaceID(object.Query(iid)));
97 }
98 
99 /**
100  * @tc.number: BaseObject_test_004
101  * @tc.name: GetInterfaceID
102  * @tc.desc: test GetInterfaceID function and object == static_cast<IWeakReferenceSource *>(this).
103  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_004, TestSize.Level1)104 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_004, TestSize.Level1)
105 {
106     Object object;
107     InterfaceID iid = {
108         0xbc3f5250, 0x34d7, 0x42d2, 0x9b40, {0xf, 0xf, 0xc, 0xe, 0x8, 0x3, 0xf, 0xd, 0x4, 0x0, 0x6, 0x1}
109     };
110     EXPECT_EQ(iid, object.GetInterfaceID(object.Query(iid)));
111 }
112 
113 /**
114  * @tc.number: BaseObject_test_005
115  * @tc.name: GetInterfaceID
116  * @tc.desc: test GetInterfaceID function and object is Any value.
117  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_005, TestSize.Level1)118 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_005, TestSize.Level1)
119 {
120     Object object;
121     InterfaceID iid = {
122         0x26ab1978, 0x1d11, 0x4a4f, 0x826d, {0x6, 0x1, 0x7, 0x8, 0x5, 0xc, 0x0, 0x4, 0x8, 0xc, 0xc, 0xa}
123     };
124     EXPECT_EQ(InterfaceID::Empty, object.GetInterfaceID(object.Query(iid)));
125 }
126 
127 
128 /**
129  * @tc.number: BaseObject_test_006
130  * @tc.name: GetWeakReference
131  * @tc.desc: test GetWeakReference function and addr is not nullptr.
132  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_006, TestSize.Level1)133 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_006, TestSize.Level1)
134 {
135     Object object;
136     sptr<IWeakReference> weakRef = nullptr;
137     EXPECT_EQ(ERR_OK, object.GetWeakReference(weakRef));
138 }
139 
140 /**
141  * @tc.number: BaseObject_test_007
142  * @tc.name: ToString
143  * @tc.desc: test ToString function.
144  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_007, TestSize.Level1)145 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_007, TestSize.Level1)
146 {
147     std::shared_ptr<Object> object = std::make_shared<Object>();
148     ASSERT_NE(nullptr, object);
149     object->ToString();
150 }
151 
152 /**
153  * @tc.number: BaseObject_test_008
154  * @tc.name: GetClassID
155  * @tc.desc: test GetInterfaceID function and object is Any value.
156  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_008, TestSize.Level1)157 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_008, TestSize.Level1)
158 {
159     Object object;
160     EXPECT_EQ(ClassID::Empty, object.GetClassID());
161 }
162 
163 /**
164  * @tc.number: BaseObject_test_009
165  * @tc.name: GetHashCode
166  * @tc.desc: test GetInterfaceID function and object is Any value.
167  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_009, TestSize.Level1)168 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_009, TestSize.Level1)
169 {
170     std::shared_ptr<Object> object = std::make_shared<Object>();
171     Object object1;
172     InterfaceID iid = {
173         0x8321f710, 0xa0c0, 0x4cbe, 0xbfbc, {0x5, 0xa, 0x7, 0x8, 0xf, 0x1, 0x3, 0x1, 0x2, 0xb, 0x1, 0xb}
174     };
175     Object object2;
176     EXPECT_EQ(false, object->Equals(*(object1.Query(iid)), *(object2.Query(iid))));
177 }
178 
179 /**
180  * @tc.number: BaseObject_test_010
181  * @tc.name: GetHashCode
182  * @tc.desc: test GetInterfaceID function and object is Any value.
183  */
HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_010, TestSize.Level1)184 HWTEST_F(AAFwkBaseObjectTest, BaseObject_test_010, TestSize.Level1)
185 {
186     std::shared_ptr<Object> object = std::make_shared<Object>();
187     Object object1;
188     InterfaceID iid = {
189         0x8321f710, 0xa0c0, 0x4cbe, 0xbfbc, {0x5, 0xa, 0x7, 0x8, 0xf, 0x1, 0x3, 0x1, 0x2, 0xb, 0x1, 0xb}
190     };
191     EXPECT_EQ(true, object->Equals(*(object1.Query(iid)), *(object1.Query(iid))));
192 }
193 
194 /**
195  * @tc.number: UserObject_test_001
196  * @tc.name: ToString
197  * @tc.desc: test ToString function and value_ is nullptr.
198  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_001, TestSize.Level1)199 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_001, TestSize.Level1)
200 {
201     UserObject userObject(nullptr);
202     EXPECT_EQ("", userObject.ToString());
203 }
204 
205 /**
206  * @tc.number: UserObject_test_002
207  * @tc.name: Box
208  * @tc.desc: test Box function and value is nullptr.
209  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_002, TestSize.Level1)210 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_002, TestSize.Level1)
211 {
212     UserObject userObject(nullptr);
213     EXPECT_EQ(nullptr, userObject.Box(nullptr));
214 }
215 
216 /**
217  * @tc.number: UserObject_test_003
218  * @tc.name: Unbox
219  * @tc.desc: test Unbox function and object is nullptr.
220  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_003, TestSize.Level1)221 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_003, TestSize.Level1)
222 {
223     UserObject userObject(nullptr);
224     EXPECT_EQ(nullptr, userObject.Unbox(nullptr));
225 }
226 
227 /**
228  * @tc.number: UserObject_test_004
229  * @tc.name: Parse
230  * @tc.desc: test Parse function and str is empty.
231  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_004, TestSize.Level1)232 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_004, TestSize.Level1)
233 {
234     UserObject userObject(nullptr);
235     std::string str = "";
236     EXPECT_EQ(nullptr, userObject.Parse(str));
237 }
238 
239 /**
240  * @tc.number: UserObject_test_005
241  * @tc.name: Parse
242  * @tc.desc: test Parse function and SPLIT is does not exist.
243  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_005, TestSize.Level1)244 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_005, TestSize.Level1)
245 {
246     UserObject userObject(nullptr);
247     std::string str = "acd";
248     EXPECT_EQ(nullptr, userObject.Parse(str));
249 }
250 
251 /**
252  * @tc.number: UserObject_test_006
253  * @tc.name: Parse
254  * @tc.desc: test Parse function and SPLIT is exist.
255  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_006, TestSize.Level1)256 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_006, TestSize.Level1)
257 {
258     UserObject userObject(nullptr);
259     std::string str = "a#cd";
260     EXPECT_EQ(nullptr, userObject.Parse(str));
261 }
262 
263 /**
264  * @tc.number: UserObject_test_007
265  * @tc.name: Parse
266  * @tc.desc: test Parse function and str == "true".
267  */
HWTEST_F(AAFwkBaseObjectTest, UserObject_test_007, TestSize.Level1)268 HWTEST_F(AAFwkBaseObjectTest, UserObject_test_007, TestSize.Level1)
269 {
270     Boolean boolean(true);
271     std::string str = "true";
272     boolean.Parse(str);
273     EXPECT_EQ("true", boolean.ToString());
274 }
275 }  // namespace AAFwk
276 }  // namespace OHOS
277