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
31using namespace OHOS;
32using namespace OHOS::AAFwk;
33using testing::ext::TestSize;
34
35namespace OHOS {
36namespace AAFwk {
37class AAFwkBaseObjectTest : public testing::Test {
38public:
39    static void SetUpTestCase(void);
40    static void TearDownTestCase(void);
41    void SetUp();
42    void TearDown();
43};
44
45void AAFwkBaseObjectTest::SetUpTestCase(void)
46{}
47
48void AAFwkBaseObjectTest::TearDownTestCase(void)
49{}
50
51void AAFwkBaseObjectTest::SetUp(void)
52{}
53
54void 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 */
62HWTEST_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 */
76HWTEST_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 */
90HWTEST_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 */
104HWTEST_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 */
118HWTEST_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 */
133HWTEST_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 */
145HWTEST_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 */
157HWTEST_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 */
168HWTEST_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 */
184HWTEST_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 */
199HWTEST_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 */
210HWTEST_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 */
221HWTEST_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 */
232HWTEST_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 */
244HWTEST_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 */
256HWTEST_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 */
268HWTEST_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