1 /*
2  * Copyright (c) 2024 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 #include "cj_element_name_ffi.h"
19 #include "cj_utils_ffi.h"
20 #include "element_name.h"
21 #include "securec.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 using OHOS::AppExecFwk::ElementName;
26 
27 class CjElementNameFfiTest : public testing::Test {
28 public:
CjElementNameFfiTest()29     CjElementNameFfiTest()
30     {}
~CjElementNameFfiTest()31     ~CjElementNameFfiTest()
32     {}
33     static void SetUpTestCase();
34     static void TearDownTestCase();
35     void SetUp() override;
36     void TearDown() override;
37 };
38 
SetUpTestCase()39 void CjElementNameFfiTest::SetUpTestCase()
40 {}
41 
TearDownTestCase()42 void CjElementNameFfiTest::TearDownTestCase()
43 {}
44 
SetUp()45 void CjElementNameFfiTest::SetUp()
46 {}
47 
TearDown()48 void CjElementNameFfiTest::TearDown()
49 {}
50 
51 /**
52  * @tc.name: CJElementNameFFITestFFICJElementNameCreateWithContent_0100
53  * @tc.desc: CjElementNameFfiTest test for FFICJElementNameCreateWithContent.
54  * @tc.type: FUNC
55  */
56 HWTEST_F(CjElementNameFfiTest, CJElementNameFFITestFFICJElementNameCreateWithContent_0100, TestSize.Level1)
57 {
58     char* deviceId = new char[9];
59     strcpy_s(deviceId, 9, "deviceId");
60 
61     char* bundleName = new char[11];
62     strcpy_s(bundleName, 11, "bundleName");
63 
64     char* abilityName = new char[12];
65     strcpy_s(abilityName, 12, "abilityName");
66 
67     char* moduleName = new char[11];
68     strcpy_s(moduleName, 11, "moduleName");
69 
70     ElementNameHandle elementNameHandle =
71         FFICJElementNameCreateWithContent(deviceId, bundleName, abilityName, moduleName);
72     auto actualElementName = reinterpret_cast<ElementName*>(elementNameHandle);
73 
74     EXPECT_EQ(actualElementName->GetDeviceID(), deviceId);
75     EXPECT_EQ(actualElementName->GetBundleName(), bundleName);
76     EXPECT_EQ(actualElementName->GetAbilityName(), abilityName);
77     EXPECT_EQ(actualElementName->GetModuleName(), moduleName);
78 
79     FFICJElementNameDelete(elementNameHandle);
80 }
81 
82 /**
83  * @tc.name: CJElementNameFFITestFFICJElementNameDelete_0100
84  * @tc.desc: CjElementNameFfiTest test for FFICJElementNameDelete.
85  * @tc.type: FUNC
86  */
87 HWTEST_F(CjElementNameFfiTest, CJElementNameFFITestFFICJElementNameDelete_0100, TestSize.Level1)
88 {
89     char* deviceId = new char[9];
90     strcpy_s(deviceId, 9, "deviceId");
91 
92     char* bundleName = new char[11];
93     strcpy_s(bundleName, 11, "bundleName");
94 
95     char* abilityName = new char[12];
96     strcpy_s(abilityName, 12, "abilityName");
97 
98     char* moduleName = new char[11];
99     strcpy_s(moduleName, 11, "moduleName");
100 
101     ElementNameHandle elementNameHandle =
102         FFICJElementNameCreateWithContent(deviceId, bundleName, abilityName, moduleName);
103     auto actualElementName = reinterpret_cast<ElementName*>(elementNameHandle);
104     EXPECT_EQ(actualElementName->GetDeviceID(), deviceId);
105     EXPECT_EQ(actualElementName->GetBundleName(), bundleName);
106     EXPECT_EQ(actualElementName->GetAbilityName(), abilityName);
107     EXPECT_EQ(actualElementName->GetModuleName(), moduleName);
108 
109     FFICJElementNameDelete(elementNameHandle);
110 }
111 
112 /**
113  * @tc.name: CjElementNameFfiTestContext_0100
114  * @tc.desc: CjElementNameFfiTest test for FFICJElementNameGetElementNameInfo.
115  * @tc.type: FUNC
116  */
117 HWTEST_F(CjElementNameFfiTest, CJElementNameFFITestFFICJElementNameGetElementNameInfo_0100, TestSize.Level1)
118 {
119     char* deviceId = new char[9];
120     strcpy_s(deviceId, 9, "deviceId");
121 
122     char* bundleName = new char[11];
123     strcpy_s(bundleName, 11, "bundleName");
124 
125     char* abilityName = new char[12];
126     strcpy_s(abilityName, 12, "abilityName");
127 
128     char* moduleName = new char[11];
129     strcpy_s(moduleName, 11, "moduleName");
130 
131     ElementNameHandle elementNameHandle =
132         FFICJElementNameCreateWithContent(deviceId, bundleName, abilityName, moduleName);
133     ElementNameParams* elementNameParams = FFICJElementNameGetElementNameInfo(elementNameHandle);
134 
135     auto actualElementName = reinterpret_cast<ElementName*>(elementNameHandle);
136     EXPECT_STREQ(elementNameParams->deviceId, CreateCStringFromString(actualElementName->GetDeviceID()));
137     EXPECT_STREQ(elementNameParams->bundleName, CreateCStringFromString(actualElementName->GetBundleName()));
138     EXPECT_STREQ(elementNameParams->abilityName, CreateCStringFromString(actualElementName->GetAbilityName()));
139     EXPECT_STREQ(elementNameParams->moduleName, CreateCStringFromString(actualElementName->GetModuleName()));
140 
141     FFICJElementNameParamsDelete(elementNameParams);
142     FFICJElementNameDelete(elementNameHandle);
143 }
144 
145 /**
146  * @tc.name: CjElementNameFfiTestContext_0100
147  * @tc.desc: CjElementNameFfiTest test for FFICJElementNameParamsDelete.
148  * @tc.type: FUNC
149  */
150 HWTEST_F(CjElementNameFfiTest, CJElementNameFFITestFFICJElementNameParamsDelete_0100, TestSize.Level1)
151 {
152     char* deviceId = new char[9];
153     strcpy_s(deviceId, 9, "deviceId");
154 
155     char* bundleName = new char[11];
156     strcpy_s(bundleName, 11, "bundleName");
157 
158     char* abilityName = new char[12];
159     strcpy_s(abilityName, 12, "abilityName");
160 
161     char* moduleName = new char[11];
162     strcpy_s(moduleName, 11, "moduleName");
163 
164     ElementNameParams* elementNameParams = static_cast<ElementNameParams*>(malloc(sizeof(ElementNameParams)));
165     elementNameParams->deviceId = CreateCStringFromString(deviceId);
166     elementNameParams->bundleName = CreateCStringFromString(bundleName);
167     elementNameParams->abilityName = CreateCStringFromString(abilityName);
168     elementNameParams->moduleName = CreateCStringFromString(moduleName);
169 
170     FFICJElementNameParamsDelete(elementNameParams);
171     EXPECT_TRUE(elementNameParams->deviceId != nullptr);
172     EXPECT_TRUE(elementNameParams->bundleName != nullptr);
173     EXPECT_TRUE(elementNameParams->abilityName != nullptr);
174     EXPECT_TRUE(elementNameParams->moduleName != nullptr);
175 }